diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 58daffd..a383297 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -149,7 +149,40 @@ jobs: npm run version:set -- "${version}" - name: Build (${{ matrix.tauri_script }}) - run: npm run ${{ matrix.tauri_script }} + shell: bash + env: + APPLE_SIGNING_IDENTITY_RAW: ${{ secrets.APPLE_SIGNING_IDENTITY }} + run: | + # macOS: sign the bundle so Gatekeeper doesn't reject downloads as + # "damaged". A completely unsigned .app (the old --no-sign) is + # refused outright on macOS Sequoia 15+ with NO "Open anyway" path; + # an ad-hoc signature (codesign --sign -) restores the open option. + # Use a real Developer ID when the APPLE_SIGNING_IDENTITY secret is + # configured, otherwise fall back to ad-hoc "-". (Mirrors the + # codex-app-transfer release.yml signing path.) + if [[ "${{ runner.os }}" == "macOS" ]]; then + if [[ -n "$APPLE_SIGNING_IDENTITY_RAW" ]]; then + export APPLE_SIGNING_IDENTITY="$APPLE_SIGNING_IDENTITY_RAW" + else + export APPLE_SIGNING_IDENTITY="-" + echo "::notice::macOS: no APPLE_SIGNING_IDENTITY secret — using ad-hoc identity (-)" + fi + fi + npm run ${{ matrix.tauri_script }} + + - name: Verify macOS .app is codesigned + if: runner.os == 'macOS' + shell: bash + run: | + # Fail early if the bundle came out unsigned — an unsigned .app is + # exactly what shows "is damaged" on Sequoia with no way to open. + # Mirrors codex-app-transfer release.yml's codesign sanity check. + app="$(find src-tauri/target dist -type d -name 'codex_switch.app' -print -quit 2>/dev/null)" + if [[ -z "$app" ]]; then + echo "::error::no codex_switch.app found to verify"; exit 1 + fi + echo "verifying codesign on: $app" + codesign --verify --deep --strict --verbose=2 "$app" - name: Upload artifacts uses: actions/upload-artifact@v4 diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ae238c..af25aed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ ## 1.5.12 - 2026-05-29 - Settings → Codex CLI path gains an **Auto-detect** button next to "Change". Unlike the existing path self-check (which trusts the cached / override path), it force-rescans every common install location plus PATH and verifies each candidate is actually runnable via `codex --version`. A lone runnable hit is applied immediately; several open the dialog with the verified candidates to pick from; none falls back to the manual dialog. Targets the two cases the self-check can't: auto-detection landed on a wrong / stale path, or the user doesn't know where to point it. Backed by a new `redetect_codex_cli_path` command that runs on the blocking pool (each candidate probe spawns a child) with a per-candidate timeout so a hung binary can't wedge the scan. macOS + Windows symmetric. +- macOS release builds are now **ad-hoc codesigned** instead of `--no-sign`. `--no-sign` left only the Rust linker's binary-level ad-hoc signature (`flags 0x20002 adhoc,linker-signed`) with no full bundle codesign, so `codesign --verify` reported "code has no resources but signature indicates they must be present" — a mismatched signature that macOS Sequoia 15+ flags as "is damaged" (no "Open anyway") once the download is quarantined. The release workflow now exports `APPLE_SIGNING_IDENTITY` (a real Developer ID when the secret is set, else ad-hoc `-`) so Tauri does a complete bundle codesign, plus a `codesign --verify --deep --strict` gate before upload. Downloads now open via the normal "unverified developer → Open anyway" flow. +- Linux `.deb` / `.AppImage` now actually attach to the release: the asset glob is recursive (`**/*`) so it matches the `bundle/deb/` and `bundle/appimage/` subdirectories the artifact preserves (#46). ## 1.5.11 - 2026-05-16 diff --git a/package.json b/package.json index 6cd6706..e946086 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "tauri:build:windows:portable": "npm run version:sync && tauri build --target x86_64-pc-windows-msvc --no-bundle", "tauri:build:macos-dmg": "npm run tauri:build:macos-release", "tauri:build:macos-app": "npm run version:sync && npm run macos:artifacts:prepare:app && tauri build --bundles app --no-sign && npm run macos:artifacts:finalize:app", - "tauri:build:macos-release": "npm run version:sync && npm run macos:artifacts:prepare:release && tauri build --bundles app,dmg --no-sign && npm run macos:pkg && npm run macos:artifacts:finalize:release" + "tauri:build:macos-release": "npm run version:sync && npm run macos:artifacts:prepare:release && tauri build --bundles app,dmg && npm run macos:pkg && npm run macos:artifacts:finalize:release" }, "dependencies": { "@tauri-apps/api": "2.10.1"