fix(release): include GoReleaser config in release paths - #26
Conversation
monit-reviewer
left a comment
There was a problem hiding this comment.
Automated PR Review
Reviewed commit: f0535ddf0b76
Profile: claude-reviewer-gh - Posting as: monit-reviewer
Summary
| Reviewer | Findings |
|---|---|
| automation:ci-release | 0 |
| documentation:docs | 1 |
| policies:conventions | 0 |
| structure:repo-health | 1 |
documentation:docs (1 finding)
Major - docs/development.md:66
"Packaging-only changes therefore ship too" overstates what the gate actually covers. The configured
release-pathsin.github/workflows/auto-release.ymlare**.go,go.mod,go.sum,version.txt,.goreleaser.yaml— nothing underpackaging/. This repo has a realpackaging/tree (packaging/identity.yml,packaging/winget/*,packaging/chocolatey/*), so a maintainer reading this sentence would reasonably expect afix:merge touching only a WinGet/Chocolatey manifest oridentity.ymlto cut a release, when it would be skipped withpath=false.Suggested fix: scope the claim to what the paths list actually says, e.g. "Changes to the GoReleaser config alone therefore ship; changes only under
packaging/do not." Alternatively, if packaging manifests are meant to qualify, addpackaging/**torelease-pathsso the doc and the workflow agree. It would also help to name.github/workflows/auto-release.ymlas the place the path list is configured, since this prose now duplicates that list and will drift from it silently.
structure:repo-health (1 finding)
Major - .github/workflows/auto-release.yml:21
The stated invariant in the adjacent comment is "packaging changes must ship even when no Go source changed", but the new path list only covers
.goreleaser.yaml. This repo's packaging surface is larger:packaging/identity.yml,packaging/chocolatey/**, andpackaging/winget/**are all versioned and, perdocs/development.md, drive Chocolatey/WinGet/Homebrew/Linux publication. Afix:/feat:squash merge touching onlypackaging/winget/OpenCLICollective.google-readwrite.installer.yamlorpackaging/identity.ymlwill still logrelease gate: skip (path=false commit=true)— the exact failure mode #25 hit and this PR exists to fix, reintroduced one directory over.Second, structural cost: overriding
release-pathshere forks a local copy of the upstream default list. Any future path the shared workflow adds to its default (a new manifest, a new lockfile) will silently not apply to this repo, and nothing fails loudly when that drift happens.Concrete fix: extend the list to cover the whole packaging surface, e.g.
release-paths: "**.go,go.mod,go.sum,version.txt,.goreleaser.yaml,packaging/**". If some packaging files are deliberately excluded (for instance generated WinGet manifests that the release itself rewrites, which would otherwise create a release-triggers-release loop), say so in the comment so the omission is a recorded decision rather than an oversight.
Reviewer Coverage
automation:ci-release— complete (constrained); skipped: none; constraints: The reusable workflow open-cli-collective/.github/.github/workflows/auto-release.yml@v1 is not checked out here, so the default value ofrelease-paths, its accepted separator/glob syntax, and whether**.gomatches nested packages under its matcher could not be verified directly. Findings rely...documentation:docs— complete (constrained); skipped: none; constraints: The shared reusable workflow open-cli-collective/.github/.github/workflows/auto-release.yml@v1 is not checked out here, so the exact glob semantics ofrelease-pathswere verified only against the path list configured in this repo, not against the gate implementation.policies:conventions— complete (constrained); skipped: none; constraints: No local convenience copies of../.githubor../cli-common/docsare checked out in this workbench, so the sharedauto-release.ymlinput namerelease-paths, its default value, and its glob-matching semantics could not be verified against the source of truth. Review limited to the two assigned changed files; the shared workflow's path-gate implementation was not inspectable.structure:repo-health— complete (constrained); skipped: none; constraints: Scope limited to the two assigned changed files; the release gate's runtime behavior was not executed. The shared reusable workflow (open-cli-collective/.github@v1) is not available in this checkout, so the upstream default value and validation semantics of therelease-pathsinput could not be verified directly.
Inspected files (2)
.github/workflows/auto-release.ymldocs/development.md
0 PR discussion threads considered. 0 summarized; 0 resolved.
Completed in 2m 57s | ~$2.05 (est.) | claude-opus-5 | cr 0.10.302
| Field | Value |
|---|---|
| Model | claude-opus-5 |
| Reviewers | automation:ci-release, documentation:docs, policies:conventions, structure:repo-health |
| Engine | claude_cli · claude-opus-5 |
| Reviewed by | cr · monit-reviewer |
| Duration | 2m 57s wall · 5m 50s compute |
| Cost | ~$2.05 (est.) |
| Pricing basis | anthropic-public-2026-09-02 |
| Tokens | 68 in / 19.3k out |
Per-workstream usage
orchestrator-selection— claude-opus-5- In: 6
- Out: 2.3k
- Cache read: 41.3k
- Cache create: 22.9k
- Cost: ~$0.31 (est.)
- Duration: 34s
automation:ci-release— claude-opus-5- In: 18
- Out: 5.1k
- Cache read: 198.1k
- Cache create: 24.2k
- Cost: ~$0.47 (est.)
- Duration: 1m 32s
documentation:docs— claude-opus-5- In: 12
- Out: 2.6k
- Cache read: 115.5k
- Cache create: 22.4k
- Cost: ~$0.35 (est.)
- Duration: 55s
policies:conventions— claude-opus-5- In: 14
- Out: 3.7k
- Cache read: 135.4k
- Cache create: 22.1k
- Cost: ~$0.38 (est.)
- Duration: 1m 04s
structure:repo-health— claude-opus-5- In: 12
- Out: 3.5k
- Cache read: 116.8k
- Cache create: 20.7k
- Cost: ~$0.35 (est.)
- Duration: 1m 03s
orchestrator-rollup— claude-opus-5- In: 6
- Out: 2.2k
- Cache read: 88.9k
- Cache create: 9.4k
- Cost: ~$0.19 (est.)
- Duration: 38s
monit-reviewer
left a comment
There was a problem hiding this comment.
Automated PR Review
Reviewed commit: 087cc8e2889e
Profile: claude-reviewer-gh - Posting as: monit-reviewer
Summary
| Reviewer | Findings |
|---|---|
| automation:ci-release | 0 |
| documentation:docs | 1 |
| policies:conventions | 0 |
| structure:repo-health | 0 |
documentation:docs (1 finding)
Nits - docs/development.md:66
The prose is now accurate: the path list (
**.go,go.mod,go.sum,version.txt,.goreleaser.yaml) matchesrelease-pathsin.github/workflows/auto-release.ymlexactly,.goreleaser.yamlexists at the repo root with that spelling, and "GoReleaser configuration changes therefore ship too" no longer overstates coverage ofpackaging/**.Remaining small issue: the list is now duplicated in prose with no pointer to where it is configured, and the next paragraph tells readers to follow the shared release/distribution standards "rather than duplicating workflow policy here." When the gate paths change, nothing links the two copies, so the guide drifts silently.
Suggested fix: name the source in the sentence, e.g. "...as configured by
release-pathsin.github/workflows/auto-release.yml."
Reviewer Coverage
automation:ci-release— complete (constrained); skipped: none; constraints: Both prior inline threads are settled. Thepackaging/**gap (identity.yml, winget, chocolatey manifests still outside the release-path set) was explicitly scoped out by the author, and the workflow comment and docs no longer claim broader packaging coverage, so it is not re-raised. The reusable workflow open-cli-collective/.github/.github/workflows/auto-release.yml@v1 is not checked out here, so the defaultrelease-pathsvalue and its exact separator/glob semantics (including whether**.gomatches nested packages) could not be verified directly; the PR documents exercis...documentation:docs— complete (constrained); skipped: none; constraints: The shared reusable workflow open-cli-collective/.github/.github/workflows/auto-release.yml@v1 is not checked out here, sorelease-pathsglob semantics were verified only against the repo's configured value and file tree, not the gate implementation.policies:conventions— complete (constrained); skipped: none; constraints: No local convenience copies of../.githubor../cli-common/docsare checked out in this workbench, so the sharedauto-release.ymlinput namerelease-paths, its default value, and its glob-matching semantics could not be verified against the source of truth. Review limited to the two assigned changed files; the shared workflow's path-gate implementation was not inspectable.structure:repo-health— complete (constrained); skipped: none; constraints: Scope limited to the two assigned changed files; the release gate's runtime behavior was not executed. The shared reusable workflow (open-cli-collective/.github@v1) is not present in this checkout, so the upstream default value and validation semantics of therelease-pathsinput could not be verified directly.
Inspected files (2)
.github/workflows/auto-release.ymldocs/development.md
0 PR discussion threads considered. 0 summarized; 0 resolved.
Completed in 1m 19s | ~$1.23 (est.) | claude-opus-5 | cr 0.10.302
| Field | Value |
|---|---|
| Model | claude-opus-5 |
| Reviewers | automation:ci-release, documentation:docs, policies:conventions, structure:repo-health |
| Engine | claude_cli · claude-opus-5 |
| Reviewed by | cr · monit-reviewer |
| Duration | 1m 19s wall · 2m 20s compute |
| Cost | ~$1.23 (est.) |
| Pricing basis | anthropic-public-2026-09-02 |
| Tokens | 38 in / 6.3k out |
Per-workstream usage
automation:ci-release— claude-opus-5- In: 8
- Out: 1.3k
- Cache read: 140.4k
- Cache create: 9.4k
- Cost: ~$0.20 (est.)
- Duration: 30s
documentation:docs— claude-opus-5- In: 8
- Out: 1.7k
- Cache read: 127.7k
- Cache create: 9.9k
- Cost: ~$0.21 (est.)
- Duration: 34s
policies:conventions— claude-opus-5- In: 8
- Out: 1.2k
- Cache read: 124.4k
- Cache create: 8.3k
- Cost: ~$0.18 (est.)
- Duration: 27s
structure:repo-health— claude-opus-5- In: 8
- Out: 1.3k
- Cache read: 125.9k
- Cache create: 9.0k
- Cost: ~$0.18 (est.)
- Duration: 30s
orchestrator-rollup— claude-opus-5- In: 6
- Out: 801
- Cache read: 76.1k
- Cache create: 41.2k
- Cost: ~$0.47 (est.)
- Duration: 18s
| ## Releases | ||
|
|
||
| There is one release stream for both binaries. `version.txt` contains the major/minor line (`1.2`), and automatic releases create `v1.2.N` tags. A squash merge to `main` whose final commit begins with `feat:` or `fix:` triggers the automatic release decision; documentation, test, CI, and chore-only merges do not cut a release. | ||
| There is one release stream for both binaries. `version.txt` contains the major/minor line (`1.2`), and automatic releases create `v1.2.N` tags. A squash merge to `main` whose final commit begins with `feat:` or `fix:` triggers the automatic release decision when it changes Go source, `go.mod`, `go.sum`, `version.txt`, or `.goreleaser.yaml`. GoReleaser configuration changes therefore ship too; documentation, test, CI, and chore-only merges do not cut a release. |
There was a problem hiding this comment.
The prose is now accurate: the path list (**.go, go.mod, go.sum, version.txt, .goreleaser.yaml) matches release-paths in .github/workflows/auto-release.yml exactly, .goreleaser.yaml exists at the repo root with that spelling, and "GoReleaser configuration changes therefore ship too" no longer overstates coverage of packaging/**.
Remaining small issue: the list is now duplicated in prose with no pointer to where it is configured, and the next paragraph tells readers to follow the shared release/distribution standards "rather than duplicating workflow policy here." When the gate paths change, nothing links the two copies, so the guide drifts silently.
Suggested fix: name the source in the sentence, e.g. "...as configured by release-paths in .github/workflows/auto-release.yml."
Reply inline to this comment.
Summary
.goreleaser.yamlto the release-worthy paths while retaining every default Go/version path.Evidence
Arch support in #25 changed only
.goreleaser.yaml. Its push workflow succeeded but loggedrelease gate: skip (path=false commit=true):https://github.com/open-cli-collective/google-cli/actions/runs/33845702271
The later manual dry-run failed for a separate reason: the shared workflow expected a push-only commit-message payload. That fix is in open-cli-collective/.github#44 and must be promoted to
v1after merge.Validation
.goreleaser.yaml, Go source,go.mod,go.sum, andversion.txtqualify; README and workflow-only changes still skip.make test build— race-enabled tests and both binary builds passed.git diff --check— passed.make check: module tidiness passed; lint could not run because the installed golangci-lint was built with Go 1.25, below the repo’s Go 1.26.4 target. CI uses the shared pinned linter.Release note
This PR changes only workflow/docs files and therefore does not itself trigger a release. Arch packages will ship on the next qualifying feat/fix commit. Neither this PR nor the shared fix bypasses the release gates or creates a release tag.