Skip to content

chore: collapse stable + nightly into one rolling auto-ship lane - #49

Merged
arzafran merged 1 commit into
mainfrom
chore/single-lane-rolling-shipping
Jul 7, 2026
Merged

chore: collapse stable + nightly into one rolling auto-ship lane#49
arzafran merged 1 commit into
mainfrom
chore/single-lane-rolling-shipping

Conversation

@arzafran

@arzafran arzafran commented Jul 7, 2026

Copy link
Copy Markdown
Member

What this does

Programa now ships on a single lane instead of two. Every commit on main that passes CI is automatically built, signed, notarized, and published — no more separate nightly channel, no manual tagging to ship. If something breaks, we fix it forward on main and the next green build ships the fix.

To keep the releases page clean, auto-ship publishes to one reused rolling release that's overwritten each time (rather than a new release per commit). Permanent vX.Y.Z milestone tags still work for marking versions.

Summary

  • Trigger: release.yml now runs on workflow_run after the CI workflow succeeds on main (gated on conclusion == success), and pins checkout to the exact commit CI validated (head_sha). The v* tag push and workflow_dispatch dry-run paths are kept.
  • Rolling release: auto-ship reuses a single rolling release — force-moves the tag to the shipped commit, overwrites assets, marks it "latest" so releases/latest/download/* always resolves to the newest green build. Milestone v* tags publish permanent releases and remain protected by the immutable-asset guard (auto-ship skips that guard on purpose).
  • Build-number fix: CFBundleVersion / sparkle:version is now always the monotonic GitHub run ID for both auto-ship and milestone tags. Previously milestone tags used the small committed build number, which would have silently failed the monotonic guard (and Sparkle) once auto-ship published run-ID-scale numbers.
  • Nightly removal: deleted nightly.yml + the nightly command files, removed nightly Sparkle-feed detection from UpdateDelegate, the nightly bug-report dropdown, the CLI's dead nightly.yml signer reference, and stale nightly refs in CI guard tests + daemon docs. No nightly users existed, so it was deleted outright.

Test plan

  • Dry-run first: trigger release.yml via workflow_dispatch — it should build + notarize and upload an artifact without publishing a release or moving any tag.
  • CI (ci.yml) green on this branch (unit, workflow-guard tests, ui-regressions).
  • After merge: confirm the first green-CI run on main publishes/overwrites the rolling release, marked latest, with a run-ID build number.
  • Confirm an installed older build auto-updates via Sparkle from the single feed.

⚠️ Merging this enables live auto-ship. The first green CI run on main after merge notarizes and ships to all users. Run the workflow_dispatch dry-run before merging.

Delete the nightly channel entirely (no users) and make `release.yml` the
single lane: every commit on `main` that passes the `CI` workflow auto-builds,
signs, notarizes, and publishes to a single reused `rolling` GitHub release
that is overwritten each ship and marked "latest". Fix-forward on `main`.

- `workflow_run` trigger on `CI` success (branches: main), gated on
  conclusion == success; checkout pins the tested head_sha.
- Build number (CFBundleVersion / sparkle:version) is now ALWAYS the monotonic
  GitHub run ID for both auto-ship and milestone `v*` tags, so a milestone tag
  can never fail the monotonic guard behind an auto-ship's larger build number.
- Auto-ship skips the immutable-asset guard and overwrites the rolling release;
  the guard still protects milestone `v*` tags from clobbering signed artifacts.
- `workflow_dispatch` stays a dry-run (artifact only, no publish, no tag move).
- Remove nightly Sparkle feed detection from UpdateDelegate, the nightly bug
  report dropdown, the CLI's dead nightly.yml signer reference, and stale
  nightly refs across CI guard tests and daemon docs.
@arzafran
arzafran merged commit 45b1b34 into main Jul 7, 2026
8 checks passed
@arzafran
arzafran deleted the chore/single-lane-rolling-shipping branch July 7, 2026 23:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant