build: Pin GoReleaser and stop on a toolchain mismatch #18
No reviewers
Labels
No labels
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
blocked
draft
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
s1d3sw1ped/jiggablend!18
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "ash/toolchain-preflight-17"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
make buildnow depends on acheck-toolchaintarget (GORELEASER_VERSION ?= v2.18.3) that runsscripts/check-toolchain.sh(forge standard copy) before anything else.toolchain go1.27.2(written ingo mod tidyformat, since the GoReleaser before-hook runs tidy and would otherwise rewrite it on every build).test-pr.yaml) and release (release-tag.yaml) run the preflight right after setup-go. Release moves tosetup-go@v5andgoreleaser-action@v6withversion: v2.18.3."v" GitVersion, which readsvv2.18.3for ago install-ed GoReleaser (the exact fix it prints), so the check could never pass. It now strips a leadingvfirst. forge-standards' copy needs the same one-line change.Why
make buildran whatevergoreleaserwas on PATH and the release job usedgoreleaser-action@master/version: latest/setup-go@main, so a release could come from a different GoReleaser than any local build. Forge rule (2026-10-10): one-at-a-time toolchains get a preflight.Test (jumpbox, GNU Make 4.4.1, local Go 1.27.1, GoReleaser v2.18.3 via
go install)make buildstops at check-toolchain, prints found none / required v2.18.3 / thego installfix, rc 2, tree clean.GORELEASER_VERSION=v2.18.2: stops, found v2.18.3 / required v2.18.2, tree clean.GOTOOLCHAIN=local(Go 1.27.1): stops, found go1.27.1 / required go1.27.2, tree clean.toolchainedited to go1.27.3, and separatelygoedited to 1.27.1: both caught as "pins changed since the last commit" with thegit checkout -- go.modfix.make buildtwice in a row, both rc 0, GoReleaser build succeeds,bin/jiggablend --helpruns,git statusclean after each.sh scripts/check-toolchain.shwithout GORELEASER_VERSION (the CI path): rc 0.make helplists the new target.go vet ./...ok. Workflow YAML parses.go test -race -shuffle=on ./...: 189 pass, 4 skip, 1 fail,TestIntegration_Encode_EXR_H264, because the jumpbox has no ffmpeg. The same test fails the same way on develop; CI installs ffmpeg.Written by OpenCode gemma-26b-censored. I hand-fixed its broken YAML indentation, moved the README paragraph under Building, rewrote the commit message, fixed the go.mod formatting and the script's version parse. Base is develop per CONTRIBUTING.
Closes #17
GO from me on
8aa852d, once CI is green.It covers all of #17.
make buildnow runs the preflight first and stops with found, required and the fix. go.mod getstoolchain go1.27.2. The release job is off@master,@mainandlatestand onto setup-go v5, goreleaser-action v6 and v2.18.3. CI runs the check, and the README tells you what to do on a mismatch. Your mismatch proofs cover all three toolchains and the go.mod rewrite case, and the tree stays clean each time.Good catch on the
vv2.18.3parse. forge-standards still has the old line in bothcheck-toolchain.shandforge-toolchain.md, so I'll get that fixed there separately. It doesn't block this PR.This touches CI and release config, so it goes the normal way and Linus lands it after the check-and-test run passes. If it causes trouble, revert the merge. Nothing else needs undoing.