🤖 ci: repair main-channel GoReleaser preparation - #99
Conversation
Create the synthetic main tag only in the CI checkout and skip its GitHub changelog. Keep tagged releases unchanged. The historical GoReleaser version rejects the missing local tag; GitHub cannot compare that local-only tag. Cover both channel boundaries with focused regression tests. Signed-off-by: Thomas Kosiewski <tk@coder.com> --- _Generated with [`xum`](https://github.com/coder/xum) • Model: `coder:openai/gpt-6-astra` • Thinking: `xhigh`_ Change-Id: I8bc997ac716a5082b9d5f15f1a4d9f833d7ef5a2
Use a missing-key-safe lookup for the main-only changelog condition. Match GoReleaser strict template evaluation in the regression test. Signed-off-by: Thomas Kosiewski <tk@coder.com> --- _Generated with [`xum`](https://github.com/coder/xum) • Model: `coder:openai/gpt-6-astra` • Thinking: `xhigh`_ Change-Id: I699b7faf0a94b10c6bc6a2a1351bf56e36e4f856
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
@codex review |
|
Codex Review: Didn't find any major issues. Another round soon, please! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
|
@codex security review |
🛡️ Codex Security ReviewSecurity review completed. No security issues were found in this pull request. Reviewed commit: Only the user who started this review can view the report in Codex. ℹ️ About Codex security reviews in GitHubThis is an experimental Codex feature. Security reviews are triggered when:
Once complete, Codex will leave suggestions, or a comment if no findings are found. |
|
PR #92 has landed at This is an event refresh, not a source rewrite or a readiness verdict. Four lifetime assessments remain counted. I will reconcile any automatic review before commissioning the fresh final assessment, within the two remaining slots. Prior packaging evidence and the final input-equivalence binding remain labeled with their original trees; fresh job checkout and tool receipts will establish what this new CI run tests. Issue #98 stays open through actual publishing and image-provenance verification. Generated with |
Current-tool packaging validationNative non-snapshot packaging passes with GoReleaser 2.18.2 and Go 1.26.8 on the actual CI-tested merge commit
Limits: The screenshot shows the captured final screen. The video is a 1× replay of the unchanged native terminal capture, with no idle shortening—not a second packaging run. Final readiness assessment and merge-group checks remain separate gates. Generated with dogfood-native-capture-replay-1x.mp4 |
Maintainer queue-readiness decisionReady at unchanged head Fresh CI 35601729507 passed. Actual GoReleaser 2.18.2 native packaging passed on the same tested merge tree. Exact-head normal/security verdicts and the fresh independent final recommendation are complete; 5/6 lifetime assessments, 0 pending. Review iteration stops because no blocking findings remain, not because the last slot excuses defects. The desk will submit through the required queue and verify full E2E, actual landing, then the normal main publisher and both platform image revisions. Issue #98 remains open until publishing/provenance verification; issue #100 tracks baseline/advisory follow-ups. Private non-publishing validation does not establish Docker publication, registry auth, or production readiness. Generated with |
Integrates current main (#99 GoReleaser main-channel tag preparation, #104 OpenTelemetry 1.45.0) into the PR101 dependency update (github.com/google/cel-go 0.26.0 -> 0.29.0, github.com/antlr4-go/antlr/v4 4.13.0 -> 4.13.1, github.com/stoewer/go-strcase removed). Conflict-free three-way merge: tree 8ae4553 equals `git merge-tree` of both parents. Precommit gates (verify-vendor, reference docs, build, test, lint, govulncheck, Trivy fs, actionlint, publish-tag tests) passed on the staged merged tree. --- _Generated with [`xum`](https://github.com/coder/xum) • Model: `coder:anthropic/claude-fable-5-1` • Thinking: `xhigh`_ Change-Id: Icf79c67651e68f6f75ff450615572ee43b55f2de Signed-off-by: Thomas Kosiewski <tk@coder.com>

Readiness: ready for required merge queue
Head:
8aa69887a61ccca0d21964eebc98d552c0a764bc; base:277b70be1568ce61442da05fb94dba0434dc4aee. Fresh CI run 35601729507 passed on actual merged source3bc80c4a639d33db611101794be66373373ae7ac/ tree891aa048e167254636dc8173803746e736779635. Old failed runs in the combined check rollup are retained history, not this new execution.Normal and security Codex reviews remain clean on the unchanged head. The fresh independent final assessment rechecked their assumptions against the new base and recommends ready with tracked follow-ups. 5/6 lifetime assessments complete, none pending. No further review round is needed.
Current-tool native packaging evidence passed with official GoReleaser 2.18.2 / Go 1.26.8, both channels and both architectures, with expected-failure controls. Non-publishing mode skipped Docker build/push; actual GHCR authorization and publishing remain unverified. The release fixture used an explicit local tag and supplied notes. PR CI skipped full E2E; the required merge queue must run it.
The maintainer owns queue admission and post-merge publishing/per-platform provenance verification. Issue #98 stays open until those outcomes are verified. This is readiness for the queue, not a claim that publishing is already restored.
Summary
Prepare GoReleaser's synthetic
v0.0.0-maintag in the CI checkout, without pushing it. Skip GitHub changelog generation for that local-only tag. Keep the release workflow, image tags, publishing arguments, permissions, and validation gates unchanged.Part of #98. The issue remains open for post-merge main CI and image-provenance verification. This PR does not claim that publication is restored.
Evidence and implementation
b1d48e3a64b42a23cb0cfaee8c30f3f21b761424, checksum-verified Go 1.25.7 and GoReleaser 2.13.3 passedgoreleaser check, but non-snapshotrelease --clean --skip=publish,announceexited 1 before building: the synthetic tag did not point at HEAD. The tag was absent locally and remotely; using branchmainproduced the same failure.The historical publishing logs return HTTP 410. These are reproduced source-path defects, not proof of the inaccessible historical failure's exact cause.
Validation
Candidate:
8aa69887a61ccca0d21964eebc98d552c0a764bc.make test,make build,make verify-vendor,make lint: all native exit 0 on this commit, using Go 1.25.7.go run github.com/rhysd/actionlint/cmd/actionlint@v1.7.10: exit 0.--skip=publish,announce, no--snapshotor--skip=validate. The release fixture uses a localv98.0.0tag and supplied release notes; its remote changelog API is not exercised.:mainindexsha256:90b505ac03d7f5862d25dd955a74957c8fcc9d344f69c42ebd1f841111a2fa18, with recorded revision8cb24dd6f4fd4b53f7a99b6bdfdda41405b7f22f, not current main.Risks and limits
Only the CI-local synthetic tag moves. Nothing pushes that Git tag. No publisher rerun, container push, release, deployment, infrastructure change, or merge was performed. Non-publishing packaging does not validate Docker publishing or registry write credentials. Human merge is required; main CI and the resulting image revision/digests still need post-merge verification.
Recorded hands-on evidence
These are actual terminal captures, exported with idle gaps shortened. They are not a live publisher run. The recordings show source identity, pinned tools, commands, and native exits.
Original-source failure
original-reproduction.webm
Candidate: main and release-fixture packaging pass
candidate-dogfood.webm
📋 Implementation Plan
Issue 98: bounded main image publishing diagnosis
Scope and acceptance
Investigate source
b1d48e3a64b42a23cb0cfaee8c30f3f21b761424, initially identical to origin/main. Reproduce the non-publishing path with declared Go 1.25.7 and historical GoReleaser 2.13.3 before attributing any source defect. Current tool versions, if used, are separate evidence. Historical job logs are unavailable (HTTP 410); its annotation establishes exit 1 only.Deliver one small coherent repair only if demonstrated necessary, with a focused regression that fails before the repair and passes after. Preserve main and release behavior. Otherwise deliver a precise evidence-backed blocker, not a speculative fix. No publisher rerun, image push, release, shared deployment, infrastructure change, CI-policy change, unrelated dependency upgrade, merge, enqueue, or auto-merge.
Phases and gates
--skip=publish,announceand explicit non-publishing controls. Gate: exact source/tool/command/native-exit receipts, no registry writes, and a classified failure or success. Snapshot mode is a separate check, not evidence that normal git validation passes.Demonstrated repair boundary
The historical-tool reproduction rejects the absent synthetic
v0.0.0-maintag before building. Creating that tag locally passes git validation and builds both architectures, then reaches GitHub changelog generation. A read-only authenticated GitHub comparison against the synthetic tag returns 404 while comparison against the real source SHA succeeds. The repair therefore creates the tag only in the main checkout and disables changelog generation only for the main channel, whose GitHub release is already disabled. Tagged-release changelog behavior and all validation/publishing controls remain unchanged. Regression coverage executes the workflow's tag preparation in temporary Git repositories (absent/stale tags, release-tag preservation, clean worktree) and checks the strict changelog template across main, empty, release and unset channel values.Offline tagged-release packaging will use an explicit local fixture tag and supplied release notes, because an unpublished candidate has no remote release tag and the isolated environment has no GitHub credentials. This is a documented test-only input, not a source change or proof of the remote changelog API. No non-publishing run proves registry write credentials, Docker publishing, or restored main publication.
Hands-on dogfood and evidence
Use an isolated source copy under this delivery directory, pinned checksum-verified tools, sanitized environment with no publishing token or Docker credential config, and explicit skip-publish arguments. Preserve original configuration before any test-only variation. If image build is reached, use only an owned named builder/local output; no pushed mutable tag. Record the actual terminal session with agent-tty, capture a screenshot and video, and keep source SHA, tool versions, command lines, timestamps and native exit codes alongside it. Label any replay accurately. Inspect semantic frames rather than accepting successful encoding alone. Upload evidence to the relevant issue/PR with
/usr/local/bin/gh --attachand verify the published body. Clean up only exactly owned processes/builders/tags.Control and storage
Read maintainer status before every wake/resume and consequential external mutation. Stop unless active. All private notes, tools, evidence and scratch sources stay under
/home/coder/.local/state/coder-k8s-maintainer/delivery/issue98/; only the designated per-PR review ledger is outside it. Preserve co-driven changes by checking live refs before mutation. Notify the desk of reproduction, head/PR, blockers and final state. No replacement PR to reset review capacity.Generated with
xum• Model:coder:openai/gpt-6-astra• Thinking:xhigh