Skip to content

Run releases only on a confirmed dispatch; install from source - #39

Merged
imanimanyara merged 3 commits into
mainfrom
ci/dispatch-only-release
Nov 2, 2026
Merged

imanimanyara merged 3 commits into
mainfrom
ci/dispatch-only-release

Conversation

@imanimanyara

@imanimanyara imanimanyara commented Nov 2, 2026 •

Copy link
Copy Markdown
Member

Summary

Go releases are git only until the owner decides otherwise for this project. This makes the release workflow unable to start by itself and makes the docs offer building from source only.

  • release.yml triggers on workflow_dispatch only, with a required confirm input. Its first step, before checkout, refuses unless confirm is release-go and the run was dispatched on a v[0-9]* tag. The input is passed through env, not interpolated into the script. Every other step (GoReleaser, cosign, SBOM, ghcr login, attestation, CHANGELOG notes) is unchanged.
  • TestReleaseRunsOnlyOnAConfirmedDispatch (release_workflow_test.go, root package) fails if release.yml has a push, schedule, pull_request or release trigger, or is missing workflow_dispatch, the confirm input, the release-go check or the tag check.
  • docs/release.md: pushing a tag publishes nothing. A release is gh workflow run release.yml --repo simtabi/probaci --ref vX.Y.Z -f confirm=release-go, on a tag already on GitHub, and only for a version the owner approved.
  • README Install and docs/installation.md now cover building from source only: clone, make build, probaci install, pinning a tag and updating. Homebrew, Scoop, the install scripts, release downloads, the container image and go install are no longer offered. No binary release has ever been published (the repo has no tags), so there are no frozen channels to describe. scripts/install.sh and scripts/install.ps1 stay in the tree.
  • CHANGELOG [Unreleased] entries for both changes.
  • ci.yml: the gosec job installed gosec@latest, which now resolves to v2.30.0 and requires go >= 1.26, so on the job's Go 1.25 (GOTOOLCHAIN=local) it failed at install and scanned nothing. Pinned to v2.29.0, the newest release that accepts Go 1.25, with a comment saying why. Excludes unchanged; no code changes were needed.

codeql.yml, keepalive.yml and scorecard.yml are untouched.

Verification

  • gofmt -l . printed nothing. go vet . passed, and go test -run 'TestReleaseRunsOnlyOnAConfirmedDispatch|TestDocLookup' . passed.
  • Guard seen red: I restored the old release.yml from main (the push: tags: ["v*"] trigger), and the test failed with "release.yml has an automatic trigger" plus all four missing-marker errors. I put the new file back, cmp showed it identical, and the test passed again.
  • release.yml parses as YAML. actionlint is not installed locally.
  • I could not run go vet ./... / go test ./... across the whole module locally, because the sandbox cannot download modules. CI runs it.
  • gosec v2.29.0 built and run under Go 1.25.14 with the job's flags (-exclude=G104,G204,G301,G302,G304,G306 ./...): 45 files, 0 issues, 4 existing #nosec. go vet ./... and go test ./... passed under the same toolchain, and gofmt -l . printed nothing.

Go releases are git only until the owner decides otherwise for this project. A tag push no longer starts GoReleaser; a release is dispatched on a v[0-9]* tag with -f confirm=release-go, and the first step refuses anything else before a single artifact is built.

TestReleaseRunsOnlyOnAConfirmedDispatch fails if release.yml regains an automatic trigger or loses the confirmation; it was seen failing with the old tag-push trigger restored. docs/release.md describes the new steps.
Binary releases are on hold, so the README and installation guide no longer offer the install scripts, Homebrew, Scoop, Linux packages, the container image, release downloads or go install. They give a clone, make build and probaci install, how to pin a tag and update, and note that no binary release has been published yet. The release tooling and install scripts stay in the tree.
Copilot AI balanced review requested due to automatic review settings November 2, 2026 16:47

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota. Try requesting a review at a lower effort level.

gosec@latest resolved to v2.30.0, whose go.mod requires go >= 1.26.
The job runs Go 1.25 with GOTOOLCHAIN=local, so go install refused it
and the job failed before scanning anything. v2.29.0 is the newest
release that accepts 1.25, matching the go-version every other job
and go.mod use. It scans the module clean with the existing excludes.
@imanimanyara
imanimanyara merged commit 95ccb5e into main Nov 2, 2026
9 checks passed
@imanimanyara
imanimanyara deleted the ci/dispatch-only-release branch November 2, 2026 19:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants