From 75048b18940d4d7908d08f2faae34cc28c8ec6bc Mon Sep 17 00:00:00 2001 From: ilyazub Date: Tue, 13 Oct 2026 13:33:59 +0200 Subject: [PATCH] [Docs] Say release tags and releases can't change once published Since 2026-10-13 a ruleset blocks updating or deleting v* tags for everyone, admins included, and releases are immutable from v0.3.1 on: tag and files locked, title and notes editable. GoReleaser 2.18.3 uploads to a draft and publishes last, so a failed upload leaves a draft, not a partial release. AGENTS.md now says both, so agents don't try to move a tag or rebuild a release. Co-Authored-By: Claude Opus 5.5 --- AGENTS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index cfeddd2..d4deb62 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -10,9 +10,9 @@ 2. writes `Formula/serpapi-cli.rb` in `serpapi/homebrew-tap` from those checksums and pushes it as a `serpapi-cli ` commit. - To release by hand, run the CI workflow on `main` from the Actions tab with a bump (`dry_run` is on by default), or push a lightweight `v*` tag on a `main` commit whose CI passed with no `--- SKIP` in the e2e log; `release.yml` runs on the pushed tag. - If a release job fails after the tag was made, re-run the failed jobs of that CI run, or, once the cause is fixed on `main`, run the Release workflow from the Actions tab with that tag. The tag stays. -- `release.yml` refuses a tag that doesn't point at the tested commit or is older than the newest release (it would become "latest" and roll Homebrew back), and publishes one release at a time. A published version is never built again, since a newer Go would change binaries users may already have: a complete release only gets its Homebrew formula refreshed, and a partial one, from a failed upload, stops it. Release the next version instead: run CI on `main` from the Actions tab with bump `patch`. +- `release.yml` refuses a tag that doesn't point at the tested commit or is older than the newest release (it would become "latest" and roll Homebrew back), and publishes one release at a time. A published version is never built again, since a newer Go would change binaries users may already have: a complete release only gets its Homebrew formula refreshed. GoReleaser uploads to a draft and publishes it last, so a failed upload leaves an unpublished draft: delete the draft on the Releases page, then re-run. A published release with missing files stops the run; release the next version instead: run CI on `main` from the Actions tab with bump `patch`. - `.github/scripts/release-tag-test.py` tests `release-tag.sh` offline in scratch repos; CI runs it before the `tag` job. -- Never move, delete or reuse a published tag: Go's module proxy and checksum database keep the first content they saw for each version, so a moved tag never reaches most `go install` users and fails checksum verification for the rest. +- Never move, delete or reuse a published tag: Go's module proxy and checksum database keep the first content they saw for each version, so a moved tag never reaches most `go install` users and fails checksum verification for the rest. A repository ruleset blocks updating or deleting `v*` tags for everyone, admins included; creating them, as CI does, stays allowed. Releases are immutable once published, from v0.3.1 on: their tag and files are locked, while the title and notes stay editable. - v0.2.1 to v0.2.3 are tagged on `go-rewrite`, which `main` doesn't contain; `release-tag.sh` compares files with the latest release, not history. - To change a published release's notes: `gh release edit v0.3.0 -R serpapi/serpapi-cli --notes-file `. - Release binaries build with the latest stable Go (`go-version: stable`); the `go` line in `go.mod` is the oldest Go that `go install` users need.