fix(release): make nightlies immutable per commit #134

Merged
barrettruth merged 1 commit from fix/nightly-immutable-tags into main 2026-04-28 19:04:43 +00:00
barrettruth commented 2026-04-28 18:53:08 +00:00

Problem

The nightly workflow only had a single mutable nightly tag and prerelease. That made nightlies lose per-commit provenance, and it also left the workflow vulnerable to tag recreation failures like fatal: tag 'nightly' already exists when the local alias tag was still present.

Solution

Publish an immutable nightly tag and prerelease for each dev commit using nightly-<version>-<shortsha>, keep nightly as a moving alias that points at the same commit, and teach the workflow to skip only when both the immutable and alias releases already match the target SHA. The release helper now generates deterministic nightly tag names, the workflow deletes any stale local nightly tag before recreating the alias, and the release-process doc explains the new model. Local verification covered direnv exec /home/barrett/dev/tmux-mosaic just test-one 'release-version:', direnv exec /home/barrett/dev/tmux-mosaic just format, direnv exec /home/barrett/dev/tmux-mosaic just lint, and an isolated rerun of the known noisy drag-resize in top orientation syncs mfact from height test after one unrelated parallel-suite flake.

## Problem The nightly workflow only had a single mutable `nightly` tag and prerelease. That made nightlies lose per-commit provenance, and it also left the workflow vulnerable to tag recreation failures like `fatal: tag 'nightly' already exists` when the local alias tag was still present. ## Solution Publish an immutable nightly tag and prerelease for each dev commit using `nightly-<version>-<shortsha>`, keep `nightly` as a moving alias that points at the same commit, and teach the workflow to skip only when both the immutable and alias releases already match the target SHA. The release helper now generates deterministic nightly tag names, the workflow deletes any stale local `nightly` tag before recreating the alias, and the release-process doc explains the new model. Local verification covered `direnv exec /home/barrett/dev/tmux-mosaic just test-one 'release-version:'`, `direnv exec /home/barrett/dev/tmux-mosaic just format`, `direnv exec /home/barrett/dev/tmux-mosaic just lint`, and an isolated rerun of the known noisy `drag-resize in top orientation syncs mfact from height` test after one unrelated parallel-suite flake.
Sign in to join this conversation.
No description provided.