feat: add Desktop Nightly update channel - #4108
Conversation
a049a79 to
91d96ca
Compare
EnglishI found two blockers:
Given the clarified product contract—only ASF-approved stable releases and developer Nightlies—I do not consider 简体中文我确认了两个阻塞问题:
根据已经澄清的产品契约——只有完整经过 ASF 流程的正式版本和仅供开发的 Nightly——我不认为仅为 Nightly 开启 |
Build signed developer snapshots from the exact main commit, publish immutable payloads and verified provenance to Apache Nightlies, and keep packaged clients pinned to their declared update authority. Document the one-time Infra and GitHub Environment setup while leaving the workflow disabled until those external credentials exist. Generated-by: Codex
Treat each fresh workflow run as one immutable version, publish payloads before independent platform feeds, and reject in-place reruns. Replace the third-party rsync action with strict host-key-verified transport scoped to the protected Nightly environment. Generated-by: Codex
Fail in-place workflow reruns explicitly, route every Nightly authority change through release-contract validation, and strengthen staged-feed verification. Generated-by: Codex
Reject in-place reruns independently in every rerunnable Nightly job. Keep formal release contract checks deterministic when packaging runs with Nightly environment variables. Generated-by: Codex
91d96ca to
e841adb
Compare
|
Fixed both blockers in
Verified:
@M4n5ter, could you please take another look when convenient? |
Summary
Add a developer-only Desktop Nightly channel that builds the exact scheduled
maincommit for macOS arm64 and Windows x64 without participating in the ASF source-release vote.Each fresh workflow run owns one immutable
0.2.0-dev.YYYYMMDD.runversion. Publication is append-only: verified versioned payloads are uploaded first, then the independent macOS and Windows feeds advance. In-place workflow reruns are rejected; a failed Nightly is retried with a fresh dispatch and therefore a fresh version.Nightly packages embed an isolated Apache Nightlies feed, accept only newer
devversions, and verify downloaded bytes against Sigstore provenance issued by the Nightly workflow onmain. Publishing uses the protectednightlyEnvironment and the hosted runner's rsync with an Infra-verifiedknown_hostsentry; no third-party deployment action receives the SSH key.The workflow remains disabled until Apache Infra publishing, retention ownership, and the protected
nightlyEnvironment are configured.Verification
node --test --test-concurrency=1 scripts/desktop-nightly.test.mjs scripts/desktop-nightly-stage.test.mjs scripts/desktop-nightly-workflow-policy.test.mjs scripts/ci-test-plan.test.mjs scripts/verify-windows-harness.test.mjs(98 passed)app-update-service.test.tsandapp-update-attestation.test.ts(18 passed)node --test --test-name-pattern='Desktop packaging derives|platform package verifiers' scripts/product-release.test.mjs(2 passed)actionlint .github/workflows/desktop-nightly.ymlgit diff --checktsc -p apps/desktop/tsconfig.main.json --noEmitremains blocked by existing stale workspace/test types unrelated to this diff (llmConnectionId,SessionConfigurationPatch, and MCP store exports).Rollout
apache/makafor Nightlies publishing, supplies an authenticated SSHknown_hostsentry, and confirms whether retention is service-managed or project-managed.nightlyEnvironment restricted tomain; store all Nightlies rsync and Apple signing/notarization secrets there.DESKTOP_NIGHTLY_ENABLED=true.Nightly currently uses the same application identity and user-data location as the formal Desktop, so installing it replaces the existing Maka installation rather than adding a side-by-side app. Clean remote Runtime Host setup remains outside this channel because Nightly does not publish a matching npm package.
AI use
Select exactly one:
Tool(s) and scope: Codex implemented the workflow, channel authority, staging/verification scripts, tests, operations documentation, and adversarial review fixes. The human contributor must review the final diff, provenance, licensing, and rollout configuration before merge.
Checklist
Does this PR entail a change in behavior?