Install the toolchain with mise, like everything else - #6
Merged
Conversation
Neither reads the other's output: the build action cross-compiles and asks the binary for its version, and the test action formats, vets and tests the source. So the order decides one thing only -- which failure you hear about sooner -- and a vet or test failure is a more common way to break this than the cross-compile is. Nothing else changes here. setup-go already keeps a Go build cache and the run log shows it restoring, which is why this repository needs none of the cache work the mise-based ones did. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Every repository in the fleet now installs its toolchain through mise. This one used setup-go, and while that was defensible on its own terms it meant the answer to "which Go builds this" depended on which repository you were standing in. The comment this replaces made the real argument against changing it: reading go-version-file: go.mod kept the version in one place, and a bump could not leave CI testing the old one. That argument is sound and the change gives it up, so it is replaced rather than deleted -- a new .mise.toml is a second place for the version to live. What makes that acceptable is that the drift is now checked instead of hoped for. "Toolchain pins agree" reads both files and fails the run if .mise.toml pins an older Go than go.mod asks for. That failure is not hypothetical: astry pinned 1.24.5 against a go.mod asking for 1.25 and built anyway, because GOTOOLCHAIN=auto fetched the real one behind the pin -- so the pin described nothing and nothing said so. setup-go was also caching the Go build for free, which mise does not do. That cache is now explicit, keyed on go.sum and the toolchain pin, so dropping setup-go does not quietly trade a warm compile for a cold one. 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.
Completes the fleet-wide toolchain standardization. Every repo now installs through
mise-action.What this gives up, and how it is covered
I argued against this change when it was proposed, and the argument is worth recording because the code already made it:
That is correct.
setup-gowithgo-version-file: go.modgenuinely kept the Go version in exactly one place, and a new.mise.tomlcreates a second. This repo had no.mise.tomlat all — it is pure Go, with no bun or PocketBase pins needing a home.So rather than accept the drift, it is checked. A
Toolchain pins agreestep reads both files and fails the run if.mise.tomlpins an older Go thango.modasks for.That failure is not hypothetical.
astry's own config records hitting it:Tested both directions: it passes on the current pins and rejects
1.25against ago.modasking for1.26.The other half
setup-gowas caching the Go build for free (cache: trueis the v4+ default).mise-actioninstalls the toolchain and caches nothing else, so the cache is now explicit — keyed ongo.sum+.mise.toml, written once per dependency change.Without that step this change would have traded a warm compile for a cold one on every run, which is exactly the fleet-wide problem the rest of this work has been fixing.
Applies to
ci.ymlandrelease.ymlboth.🤖 Generated with Claude Code