From 6d8b8b904a75dcaf40fd2b12a30fc67b0a15d785 Mon Sep 17 00:00:00 2001 From: ethernet Date: Sat, 12 Sep 2026 19:15:53 -0400 Subject: [PATCH 1/2] fix: convert builds to powershell prevents msvc linking for python native deps from calling git bash link --- .github/workflows/desktop-bundled-release.yml | 40 ++++++++++++------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/.github/workflows/desktop-bundled-release.yml b/.github/workflows/desktop-bundled-release.yml index 240f25f201..c1148a8054 100644 --- a/.github/workflows/desktop-bundled-release.yml +++ b/.github/workflows/desktop-bundled-release.yml @@ -470,7 +470,7 @@ jobs: python -m scripts.ci.python_packages cmake==3.31.6 - name: Build and package - shell: bash + shell: powershell timeout-minutes: 900 env: HERMES_BUNDLE_ENV_JSON: ${{ inputs.bundle_env }} @@ -483,16 +483,16 @@ jobs: AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }} AZURE_TOKEN_CREDENTIALS: prod run: | - if [ -n "$HERMES_BUILD_COMMIT" ]; then - python scripts/bundles/desktop.py --commit="$HERMES_BUILD_COMMIT" --variant=bundled - else - python scripts/bundles/desktop.py --tag="$HERMES_PAYLOAD_TAG" --variant=bundled - # The official Store identity is stable-only. Canary must never - # replace it, even in a Store flight ring. - if [[ "$HERMES_PAYLOAD_TAG" != *-canary.* ]]; then - python scripts/bundles/desktop.py --tag="$HERMES_PAYLOAD_TAG" --variant=store - fi - fi + if ($env:HERMES_BUILD_COMMIT) { + python scripts/bundles/desktop.py --commit="$env:HERMES_BUILD_COMMIT" --variant=bundled + } else { + python scripts/bundles/desktop.py --tag="$env:HERMES_PAYLOAD_TAG" --variant=bundled + # The official Store identity is stable-only. Canary must never + # replace it, even in a Store flight ring. + if ($env:HERMES_PAYLOAD_TAG -notlike "*-canary.*") { + python scripts/bundles/desktop.py --tag="$env:HERMES_PAYLOAD_TAG" --variant=store + } + } - name: Save warmed Python dependencies even after a packaging failure if: ${{ !cancelled() && steps.pm.outcome == 'success' }} @@ -863,8 +863,8 @@ jobs: fail-fast: false matrix: target: - - { label: linux-x64 } # runner: ubuntu-24.04 - - { label: linux-arm64 } # runner: ubuntu-24.04-arm + - { label: linux-x64 } # runner: ubuntu-24.04 + - { label: linux-arm64 } # runner: ubuntu-24.04-arm steps: - name: Disabled shell: bash @@ -1341,7 +1341,6 @@ jobs: # payload env composition exposes it, desktop payload model). run: bash scripts/termux/build_uv.sh termux-build/payload - - name: Stage the remaining CLI runtime tools shell: bash run: | @@ -1821,7 +1820,18 @@ jobs: stable-phase-result: name: Stable bundle phase completed if: always() && inputs.release-phase != '' - needs: [validate, build-win32, build-darwin, publish-win32-updater, termux-deb, candidate-manifest, stable-publish, stable-store, stable-promote] + needs: + [ + validate, + build-win32, + build-darwin, + publish-win32-updater, + termux-deb, + candidate-manifest, + stable-publish, + stable-store, + stable-promote + ] runs-on: ubuntu-24.04 steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 From 503b16120dbf4f614a9ec049b58c2da97d2fad2c Mon Sep 17 00:00:00 2001 From: ethernet Date: Sat, 12 Sep 2026 19:32:12 -0400 Subject: [PATCH 2/2] fix: nicer updater ui --- hermes_cli/_old_updater.py | 1 - hermes_cli/update_lock.py | 11 ++++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/hermes_cli/_old_updater.py b/hermes_cli/_old_updater.py index 8df87cef76..ada8714c76 100644 --- a/hermes_cli/_old_updater.py +++ b/hermes_cli/_old_updater.py @@ -114,7 +114,6 @@ def stop_for_relaunch() -> NoReturn: _result = 1 try: request, resumes, receipt_slot = _historical_context() - print("Completing the update with the new Hermes updater…", file=sys.stderr, flush=True) _result, completed = _run_child(request) if completed.get("resume_handled"): for token in resumes: diff --git a/hermes_cli/update_lock.py b/hermes_cli/update_lock.py index 95de0ab6e4..8aed936faa 100644 --- a/hermes_cli/update_lock.py +++ b/hermes_cli/update_lock.py @@ -125,17 +125,14 @@ def read_live_update(*, path: Path | None = None) -> UpdateHolder | None: return UpdateHolder(pid=pid, age_seconds=age) -def describe_holder(holder: UpdateHolder) -> str: - """One-line, user-facing explanation of who holds the update lock.""" - minutes, seconds = divmod(int(max(holder.age_seconds, 0)), 60) +def describe_holder(holder: UpdateHolder | None) -> str: + minutes, seconds = divmod(int(max(0 if holder is None else holder.age_seconds, 0)), 60) elapsed = f"{minutes}m {seconds}s" if minutes else f"{seconds}s" return ( - f"✗ Another Hermes update is already running (PID {holder.pid}, " + f"✗ Another Hermes update is already running {f"(PID {holder.pid})" if holder else ""}, " f"started {elapsed} ago).\n" "\n" - " Two updates mutating the same checkout corrupt it: one rewrites\n" - " source while the other is mid-install. Wait for it to finish, or\n" - " close the window/dashboard tab that started it, then retry." + " Two updates running at once can corrupt Hermes. Wait for the update to finish, then try again." )