Repository navigation
Release through the shared Go release workflow - #47
Conversation
release.yml becomes a thin caller of simtabi/.github's go-release.yml, pinned to its merge commit. A release builds on a pushed vX.Y.Z tag or on request for a tag already pushed, replacing the dispatch-only, confirm=release-go workflow. Go comes from .go-version (1.26, as CI installs it) so the build does not drop to go.mod's 1.26.0. The guards pin the triggers, the shared call, its inputs and the GoReleaser channels.
Binaries ship on the GitHub release only (owner, 2026-11-13). The homebrew_casks, scoops and winget blocks go. No probaci release ever reached the tap, bucket or Winget.
README and installation offer the release download, checked against checksums.txt, then a build from source. docs/release.md gives both ways to release with real commands. src/embedded is re-synced.
.go-version becomes 1.26.11 and every setup-go in ci.yml and codeql.yml reads it. The jobs installed "1.26" from the runner's cache, 1.26.10, which govulncheck flags for GO-2026-6859 in net/http; the shared release cannot set check-latest, so an exact version is the one way to keep CI and the release on the same toolchain. The guard now requires an exact version and every setup-go to read the file.
|
What I chose: Why not The trade-off: the next Go patch is a one-line bump of
|
Summary
Moves probaci's release onto simtabi/.github's shared Go release workflow, per the 2026-11-13 standard: binaries ship on the GitHub release only, and a release builds on a pushed version tag or on request.
release.ymlis now a thin caller ofsimtabi/.github/.github/workflows/go-release.yml@745880bdb9b35a21eb16824cfc995f16e1e82fd5(Add the shared Go release workflow .github#27). Its triggers arepush: tags(v[0-9]+.[0-9]+.[0-9]+,v[0-9]+.[0-9]+.[0-9]+-*) andworkflow_dispatchwith a requiredtag. Concurrency is per tag and never cancelled.GOPRIVATE/GONOSUMDB, thesrc/vX.Y.Zalias, CHANGELOG notes, GoReleaser onsrc/.goreleaser.yaml(cosign-signed checksums kept), and attestation over.cache/goreleaser/checksums.txt. There are no extra assets, so there is nopost-releasestep.go-version: "1.26"(the newest 1.26 patch, likeci.yml). The shared default,src/go.mod, saysgo 1.26.0and would pin the build to 1.26.0. So the caller passesgo-version-file: .go-version, a new one-line file containing1.26, and a test fails if it drifts fromci.yml. This adds a root dotfile, flagged here for review.~> v2.4. The shared workflow uses~> v2, and there is no input for it.goreleaser checkwith 2.20.1 validates the config.src/scripts/extract-changelog.shfor 0.1.0, apart from a leading blank line and the trailing link reference (GitHub does not render it). The script stays.docs/installation.mdoffer the release download (checked againstchecksums.txt, withgh attestation verify), then a build from source.docs/release.mdgives both release commands.src/embedded/is re-synced withmake sync-docs.Removed
src/.goreleaser.yaml: thehomebrew_casks,scoopsandwingetblocks. No probaci release was ever published, andsimtabi/homebrew-tapandsimtabi/scoop-buckethold no probaci entry, so nothing there is frozen or affected.release.yml: theenvironment: release, theTAP_GITHUB_TOKEN,HOMEBREW_TAP_DEPLOY_KEYandSCOOP_BUCKET_DEPLOY_KEYenv, which only fed those blocks, and theconfirm=release-gorefusal step, which the shared tag check replaces. The repository secrets themselves are untouched.TestReleaseRunsOnlyOnAConfirmedDispatch(and itsautomaticTriggerregexp) becameTestReleaseRunsOnAVersionTagOrOnRequest. New:TestReleaseInputsMatchTheRepository(alias on, this repo's config and changelog,.go-versionequal to CI's Go) andTestGoReleaserPublishesNowhereElse, which asserts the three removed blocks, and every other banned block, are absent.Verification
go -C src test -count=1 ./...passes;go -C src vet ./...andgofmt -l srcare clean;golangci-lint run ./...reports 0 issues;goreleaser check --config src/.goreleaser.yaml(2.20.1) validates;actionlint1.7.12 is clean.go test -count=1, then restored:branches: [main], ascheduletrigger,uses:pointed elsewhere,go-version-filedropped,.go-versionset to1.25,module-alias-prefix: '', and abrews:block. Each failed its guard.