feat(release): desktop packaging (DMG/MSI/AppImage/deb), signed updater, docs (desktop stack 5/5) - #5309
feat(release): desktop packaging (DMG/MSI/AppImage/deb), signed updater, docs (desktop stack 5/5)#5309devin-ai-integration[bot] wants to merge 8 commits into
Conversation
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…re exists Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
|
I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".
|
|
Important Review skippedBot user detected. To trigger a single review, invoke the ⚙️ Run configurationConfiguration used: Repository: lidge-jun/opencodex/.coderabbit.yaml Review profile: ASSERTIVE Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
리뷰 · 우선순위 60 / 80이 PR은 데스크톱 스택 마지막(5/5)입니다. Tauri 셸을 macOS·Windows·Linux용 설치 파일로 묶고, 서명된 자동 업데이트를 붙입니다. 베이스는 라인 - 베이스/ 라인 - 라벨/ 라인 - 라인 - 라인 - 라인 - 라인 - 라인 - 메인테이너의 판단이 필요한 지점 스택(#5299 등)을 어떤 순서로 너의 추천 방향은 맞고, 서명 없을 때 매니페스트를 안 만드는 큰 줄기는 좋습니다. 다만 지금은 이 댓글은 grok-bot이 작성했습니다 |
…y install Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
|
Addressed in f42b793:
Merge order / |
|
⏳ DRAFT
What to do
Review readiness checklist
0/4 boxes ticked. This pull request was already a draft. Its draft status will be preserved after every issue above is resolved. |
추가 리뷰 · 우선순위 42 / 80지난 리뷰(653d376) 다음에 tip이 이번 커밋에서 고친 것: (1) 서명 플랫폼이 하나도 없으면 매니페스트를 안 쓰고 실패하는 테스트가 생겼습니다. (2) 지금도 초안입니다. hygiene는 라인 - 베이스/ 라인 - 라벨/ 라인 - 라인 - 라인 - 메인테이너의 판단이 필요한 지점
너의 추천 코드로 지적했던 구멍(테스트 누락, 부분 서명 매니페스트, 설치 레이스, 모호한 번들 선택)은 이번 tip에서 대체로 닫혔습니다. 머지 차단은 이제 거의 프로세스입니다. (1) 이 댓글은 grok-bot이 작성했습니다 |
|
Agreed on all points; no further code change from this round.
|
Replaces the placeholder key generated during development. The matching private key is in the repo secrets as TAURI_SIGNING_PRIVATE_KEY, so signed updater artifacts and latest.json can actually be produced.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0564103d16
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} | ||
| APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} | ||
| MACOS_SIGN_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }} | ||
| run: bunx tauri build --ci --target ${{ matrix.target }} --bundles ${{ matrix.bundles }} |
There was a problem hiding this comment.
Synchronize desktop metadata before packaging releases
For every release after 2.61.0, this builds the desktop app without updating either desktop/src-tauri/tauri.conf.json or desktop/src-tauri/Cargo.toml, while the release authority only bumps package.json (scripts/release.ts:599-612). The workflow then renames that 2.61.0 bundle and writes latest.json using the requested newer version, so the installed app still reports 2.61.0; updater comparisons can repeatedly offer the same release, and MSI upgrades may reject packages retaining the previous product version. Set and validate both desktop versions from RELEASE_VERSION before invoking Tauri, or make the release authority bump them atomically.
AGENTS.md reference: AGENTS.md:L46-L47
Useful? React with 👍 / 👎.
|
Superseded by #5318, merged to #5196 landed first as The consolidation applies the tree difference of the stack tip against the point the chain branched from. One file genuinely conflicted and both intents were kept. Everything from the standalone binary through the signed packaging is on Closing as superseded rather than stale. |
Summary
Desktop stack 5/5 (on top of #5299). Turns the Tauri shell into a releasable, self-updating package for macOS, Windows, and Linux, without touching the proxy runtime.
Release packaging (
.github/workflows/release.yml) — newpackage-desktopmatrix next topackage-standalone:universal-apple-darwinapp,dmgOpenCodex-<v>-macos.dmg,OpenCodex-<v>-macos.app.tar.gz(+.sig)x86_64-pc-windows-msvcmsiOpenCodex-<v>-windows-x64.msi(+.sig)x86_64-unknown-linux-gnuappimage,debOpenCodex-<v>-linux-x86_64.AppImage(+.sig),OpenCodex-<v>-linux-amd64.debEach job builds the GUI, prepares the
ocxsidecar(s) (both Apple archs for the universal build), builds the WidgetKit appex on macOS, runstauri build --ci, thendesktop/scripts/collect-release-assets.tsrenames bundle outputs, copies.sigfiles and emits.sha256.attach-release(renamed fromattach-standalone, still attaches standalone binaries) downloads both artifact sets and runsdesktop/scripts/updater-manifest.tsto produce Taurilatest.json.Signing is secret-gated and passed only via
env:(TAURI_SIGNING_PRIVATE_KEY[_PASSWORD],APPLE_*,MACOS_SIGN_IDENTITY). Without secrets the bundles still build ad-hoc/unsigned and attach and nolatest.jsonis produced. WhenTAURI_SIGNING_PRIVATE_KEYis configured,updater-manifest.ts --require-allruns and fails the release if any of the four updater platforms lacks a.sig, so a partially signed manifest can never becomelatest.Updater (
desktop/src-tauri/src/updater.rs) — exact-pinnedtauri-plugin-updater =2.9.0+tauri-plugin-process =2.3.0. Endpointreleases/latest/download/latest.json, minisign pubkey intauri.conf.json,createUpdaterArtifacts: true. Release builds check ~30 s after start and every 6 h, cache the result inPendingUpdate, and the tray gets Check for Updates… / Install update vX.Y.Z (disabled until one is found) →download_and_install→app.restart(). The pending update is taken (not cloned) on install, the menu shows Installing update vX… with both actions disabled, background checks pause while installing, and a failed install restores the pending update and menu. Debug builds skip background checks; repeated failures are logged once per distinct message.Design note surfaced during verification: Tauri's macOS updater artifact is
OpenCodex.app.tar.gz, not the DMG, so the manifest mapsdarwin-*→ the tar.gz and users still install from the DMG (documented)..msi/.AppImageare signed directly.CI (
ci.yml) — thewidgetjob (name kept) now also builds the unsigned Tauri.appand assertsContents/MacOS/OpenCodex, the bundledocxsidecar, andPlugIns/OpenCodexWidget.appex(+codesign -dv).Docs — new
docs-siteguide Desktop App (install per OS, Gatekeeper/SmartScreen, sidecar attach-vs-spawn, browser access tohttp://127.0.0.1:10100, updates, widget, uninstall), menu-bar guides (5 locales) point to it, README install links in all 8 READMEs (i18n manifest resynced),desktop/README.mdrelease section,structure/desktop-shell.md.Verification
cargo fmt --check,cargo clippy --all-targets -- -D warnings,cargo test(11 passed) indesktop/src-tauribun run build:gui,bun run typecheck,bun run structure:check,git diff --checkbun test tests/ci-workflows— 897 passed, 0 failed (includes newrelease-desktop-scripts.test.ts: asset naming, dmg+app.tar.gz collection, manifest skips unsigned platforms / fails when none remain /--require-allnames missing platforms; ambiguous bundle outputs rejected)cd docs-site && bun run build— OKbunx tauri build --ci --bundles app,dmg(aarch64, signed with a local test key):.appcontains sidecar +OpenCodexWidget.appex;collect-release-assets→ dmg/app.tar.gz/.sig/.sha256;updater-manifest→ validlatest.jsonwithdarwin-aarch64/darwin-x86_64signatures and.app.tar.gzURLsschemaVersion: 1)Not verified here: Windows MSI / Linux AppImage+deb builds (CI-only runners), Developer ID notarization (no secrets).
Checklist
env:; unsigned builds never produce a manifest; private key not in repo).Maintainer follow-ups
TAURI_SIGNING_PRIVATE_KEY(_PASSWORD)(public key already intauri.conf.json; regenerate both withtauri signer generateif you prefer your own) and Apple signing secrets to enable signed releases + notarization.maintainer-sponsoredlabel for the hygiene gate (workflow changes).Link to Devin session: https://app.devin.ai/sessions/f2dce68b7ca349e3ba39dab55bc12300
Open in Devin Desktop: https://app.devin.ai/desktop/session/f2dce68b7ca349e3ba39dab55bc12300?variant=devin
Requested by: @lidge-jun
Review readiness checklist
This PR stays in draft until every box below is ticked. Tick all four boxes once the requirements are met:
All CI tests are green on my local testing.
I pushed my PR to the latest dev commit.
I resolved all correct Codex and CodeRabbit findings.
My PR is ready for review.