Repository navigation
feat(release): rc prereleases from main, promote to release branch for stable - #36
Merged
Merged
Conversation
…r stable Merges to main now publish x.y.z-rc.N GitHub prereleases (archives + docker tag) only. Stable x.y.z releases (Homebrew, winget, docker latest, docs) are cut by fast-forwarding the new `release` branch to a verified rc via the Promote workflow. semantic-release creates releases as drafts; GoReleaser uploads the archives and publishes them, so releases/latest never points at a release without assets, and never at an rc. Documented in RELEASING.md.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
semantic-release published each GitHub release right away, and GoReleaser attached the archives several minutes later. Anything that resolved
releases/latestin that window (CI pipelines,install_nova.sh) got a release with no assets and failed.Also, every merge to
mainwent straight to Homebrew/winget/latestwithout anyone verifying it first.What
Two channels (details in the new
RELEASING.md):x.y.z-rc.Nmainghcr…/nova-cli:x.y.z-rc.Nx.y.zreleaseto a verified rc (new Promote workflow, orgit push origin <sha>:release):latest, docs.releaserc.json:releaseis the stable branch andmainis thercprerelease branch. Releases are created as drafts..goreleaser.yaml:use_existing_draft. GoReleaser uploads the archives and only then publishes the release.prerelease: autokeeps rc builds as prereleases.release.yml: also runs onrelease. For rc builds it skips Homebrew, winget, docker:latestand the docs deploy.promote.yml(new): checks the commit is onmainand thatreleasecan be fast-forwarded to it, pushes it, then dispatches the Release workflow.RELEASING.md(new),CONTRIBUTING.md,README.md,AGENTS.md.releases/latestignores prereleases, so consumers of it only ever get stable, fully uploaded versions.Before merging
releasebranch at the current stable version. semantic-release fails if a configured release branch doesn't exist:git push origin 0.1.0^{commit}:refs/heads/releasereleaseis protected, allow GitHub Actions to push to it (needed by the Promote workflow).After merging, this PR (
feat) should produce0.2.0-rc.1.Testing
actionlintandgoreleaser checkpass. The workflows themselves can't be run before merge. After merge, check that the run produces a prerelease0.2.0-rc.1and doesn't touch Homebrew or winget.