Repository navigation
feat(release): a stable channel that becomes releases/latest - #1035
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
A stable release of 0.1.0 is v0.1.0, not a prerelease, and becomes latest. A prerelease is exactly what the betas were. The default is prerelease. Channel and version must agree both ways, the tag must match package.json, and an unknown channel is refused before any build. The versions are the real published beta and the planned stable. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
release.yml hardcoded prerelease: true and never set make_latest, so no stable release could be made and releases/latest (the landing page's download button) 404'd. Its tag and name defaulted to v0.0.2-beta.1, a release that already exists. A new channel input (prerelease by default, or stable) goes through scripts/release/identity.mjs. That script derives the tag and name from package.json, refuses a mismatched channel, version or tag before the build, and emits prerelease and make_latest for the publish step. A beta is never made latest. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
… metadata From the #1035 review (APPROVE with recommendations): - target_commitish is the built SHA. A stable release is published from a draft, and GitHub creates the tag then, on the default branch's head at that moment, which can be a commit merged during the build. - A newline in release_name could append tag= to GITHUB_OUTPUT and replace the validated tag, so line breaks are refused. - 0.1.0+build-5 was read as a prerelease; only the version core decides. - The prerelease-of-a-stable error now suggests the NEXT patch's beta, which sorts after the stable. - Re-publishing an older stable taking latest back is documented as a known limit. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Owner
Author
|
Review (APPROVE) recommendations applied in
11/11 tests pass and actionlint is clean. I'll merge once CI is green. |
Juliusolsson05
added a commit
that referenced
this pull request
Sep 20, 2026
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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 (Stage 8 of the release-readiness ledger)
release.ymlcould not make a production release:prerelease: trueand never setmake_latest.releases/latest, and with it the landing page's stable download button, returns 404.v0.0.2-beta.1, a release that already exists.Change
channelinput:prerelease(default; exactly what every beta was) orstable.scripts/release/identity.mjsreplaces the inline identity bash, followingnightly.mjs's pattern:tag,name,prereleaseandmake_latest;-betaversion, a prerelease channel with a stable version (which would take the stable tag), a tag that doesn't match package.json, or an unknown channel.validate-releaseexposes those outputs.package-macosnow also needsvalidate-release, and publishes with them. A beta is never made latest.reusable-app-build-macos.yml) has no publish step, so nothing needs mirroring.Tests
testing/system/release/identity.test.ts: 8 cases that run the script as a real process with the workflow's env and a realGITHUB_OUTPUTfile. The versions are the real published beta (0.0.2-beta.1) and the planned stable (0.1.0).The workflow YAML parses, and
@action-validator/clipasses.Not in this PR
The version bump itself:
0.1.0is the ledger default and still an owner call.🤖 Generated with Claude Code