feat: immutable releases#14445
Merged
Merged
Conversation
- Remove mutable tag triggers (stable, rc, rc-*) from release workflow;
only v*.*.* semver tags trigger releases now
- Remove mutable 'nightly' GitHub release overwrite; each nightly gets
its own immutable nightly-{SHA} release only
- Delete move-tag.js; stop force-moving the nightly tag to HEAD
- Docker: stop tagging :nightly and :latest; use immutable
:nightly-{short-sha} and :v*.*.* tags instead
- foundryup: resolve 'latest' and 'nightly' channels via GitHub API
to find the actual immutable release tags
- foundryup: 'stable' is a silent alias for 'latest'
- Simplify prune-prereleases.js filter (no mutable nightly to protect)
- Bump foundryup installer version to 1.8.0
Amp-Thread-ID: https://ampcode.com/threads/T-019dbf9e-5115-77b9-a177-1af9d30af00c
Co-authored-by: Amp <amp@ampcode.com>
- Docker: derive tags from inputs.tag_name directly, fixing workflow_call nightly mis-tagging - Remove release pruning entirely (immutable means permanent) - Delete prune-prereleases.js and cleanup job from release.yml - Remove force: true from create-tag.js (invalid for createRef) Amp-Thread-ID: https://ampcode.com/threads/T-019dbf9e-5115-77b9-a177-1af9d30af00c Co-authored-by: Amp <amp@ampcode.com>
Avoids pagination issue where 50+ nightlies could push the latest stable release off the first page of results. Amp-Thread-ID: https://ampcode.com/threads/T-019dbf9e-5115-77b9-a177-1af9d30af00c Co-authored-by: Amp <amp@ampcode.com>
Amp-Thread-ID: https://ampcode.com/threads/T-019dbf9e-5115-77b9-a177-1af9d30af00c Co-authored-by: Amp <amp@ampcode.com>
…tly resolution Amp-Thread-ID: https://ampcode.com/threads/T-019dbf9e-5115-77b9-a177-1af9d30af00c Co-authored-by: Amp <amp@ampcode.com>
…lease Amp-Thread-ID: https://ampcode.com/threads/T-019dce16-13eb-7218-a42c-ce91ed473f36 Co-authored-by: Amp <amp@ampcode.com>
Amp-Thread-ID: https://ampcode.com/threads/T-019dce16-13eb-7218-a42c-ce91ed473f36 Co-authored-by: Amp <amp@ampcode.com>
Amp-Thread-ID: https://ampcode.com/threads/T-019dce16-13eb-7218-a42c-ce91ed473f36 Co-authored-by: Amp <amp@ampcode.com>
Amp-Thread-ID: https://ampcode.com/threads/T-019dce16-13eb-7218-a42c-ce91ed473f36 Co-authored-by: Amp <amp@ampcode.com>
mablr
reviewed
Apr 27, 2026
…convention Amp-Thread-ID: https://ampcode.com/threads/T-019dce16-13eb-7218-a42c-ce91ed473f36 Co-authored-by: Amp <amp@ampcode.com>
Amp-Thread-ID: https://ampcode.com/threads/T-019dce16-13eb-7218-a42c-ce91ed473f36 Co-authored-by: Amp <amp@ampcode.com>
Contributor
Author
The old workflow emitted |
- prepare creates the GitHub release as a draft up-front (with --verify-tag) so all matrix jobs upload assets to an existing draft. - release matrix replaces softprops/action-gh-release with gh release upload --clobber against the draft. - nightly releases are auto-published by a new publish-nightly job once all assets have been uploaded; stable releases are left as drafts for a maintainer to publish manually. - prepare distinguishes existing draft (reuse) from already-published release (fail loudly), so a same-SHA nightly rerun after publication can't try to upload to an immutable release. Amp-Thread-ID: https://ampcode.com/threads/T-019dced2-6c4a-76fb-af86-79fd948a0157 Co-authored-by: Amp <amp@ampcode.com>
mablr
previously approved these changes
Apr 27, 2026
figtracer
reviewed
Apr 28, 2026
zerosnacks
commented
Apr 28, 2026
figtracer
previously approved these changes
Apr 28, 2026
env context is not available in job-level if expressions Amp-Thread-ID: https://ampcode.com/threads/T-019dd37e-7210-77da-bf0e-1d77ccecb19e Co-authored-by: Amp <amp@ampcode.com>
zerosnacks
added a commit
to foundry-rs/foundry-toolchain
that referenced
this pull request
Apr 28, 2026
Removes `rc` from the documented `version` input options, since it is no longer a supported channel after foundry-rs/foundry#14445 (immutable releases). ## Context The Foundry release workflow previously supported a mutable `rc` Git tag that was force-moved on each release candidate. With the immutable releases PR (foundry-rs/foundry#14445), the `rc` channel is removed — release candidates are now pre-release tags like `v1.6.0-rc1` and must be installed by their explicit version. ## Changes - `action.yml`: removed `rc` from the version description - `README.md`: removed `rc` from the inputs table ## Behavior change for users Once foundry-rs/foundry#14445 merges: - `version: rc` → no longer works; users must pin the specific version (e.g. `version: v1.6.0-rc1`) - `version: stable` (default) → silently changes meaning, now resolves via GitHub `/releases/latest`. Until `v1.7.0` is tagged, this returns `v1.6.0-rc1` because GitHub considers it the latest non-prerelease release - `version: nightly` → still works (resolves to latest `nightly-{SHA}`) - `version: v1.6.0` / `1.6.0` → still works ## Related - foundry-rs/foundry#14445 — Foundry immutable releases PR --------- Co-authored-by: Amp <amp@ampcode.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.
Summary
Switches Foundry to fully immutable releases. No more mutable Git tags (
nightly,stable,rc) that get force-moved on each release.Changes
Release workflow (
release.yml)stable,rc,rc-*) — onlyv*.*.*semver tags trigger releasesnightlyGitHub releasenightlytag to HEADLAST_STABLE_VERSIONenv varcleanupjob — no more pruning of old nightlies (immutable means permanent)nightly-{SHA}release onlyfromTagfor stable releases now explicitly resolves to the previousv*.*.*tag, preventing nightlies from being picked as the baseDocker (
docker-publish.yml)inputs.tag_nameworkflow_callbug where nightlies got mis-tagged (event_nameisworkflow_call, notschedule):v1.2.3,:v1.2,:v1(standard Docker convention); everything else (includingnightly-{SHA}) tagged as-isfoundryup (bash)
latestis now the default channel — uses/releases/latestGitHub API endpointstableis a silent alias forlatestnightlyresolves to the latestnightly-{SHA}prerelease via GitHub API (per_page=10), excludes draftsv1.6.0,nightly-{SHA}) still work directlyfetch()helper for silent HTTP requests (used by release resolution and version check)resolve_latest_release()functionset -eo pipefailcompatibility in fetch pipelinescheck_installer_up_to_date()now usesfetch()helperfoundryup -i latestalternativeScripts
.github/scripts/create-tag.js— removedforce: truefromcreateRef; now only swallows "already exists" errors (422) and rethrows unexpected failures.github/scripts/move-tag.js— deleted.github/scripts/prune-prereleases.js— deletedUser-facing behavior
foundryup/releases/latest)foundryup -i latestfoundryup -i stablelatestfoundryup -i nightlyfoundryup -i nightly-abc123...foundryup -i v1.6.0/releases/latestThe
foundryupdefault (latest) resolves via GitHub's/releases/latestendpoint, which returns the most recent non-prerelease, non-draft release. Currently that isv1.6.0-rc1— this will remain the default untilv1.7.0is tagged as a full release. This is expected behavior: GitHub considersv1.6.0-rc1the latest release because it was not marked as a prerelease.Migration
Old mutable tags (
nightly,stable) will be frozen in place — not deleted. Old foundryup (v1.7.0) will still work with stale binaries and the existingcheck_installer_up_to_date()will prompt users to runfoundryup --update.Companion PR