Skip to content

🤖 ci: diagnose and restore verified main image publishing #98

Closed

Description

@ThomasK33

Problem

The latest CI run for current main failed while publishing ghcr.io/coder/coder-k8s:main:

  • Commit: b1d48e3a64b42a23cb0cfaee8c30f3f21b761424.
  • CI run 22223215157.
  • Failed publishing job.
  • The check annotation reports GoReleaser 2.13.3 exiting with code 1.
  • Historical logs now return HTTP 410. The annotation does not establish the underlying cause.

Other validation jobs were skipped in that run. This is not evidence that the current source fails its tests, nor proof that its current image is broken. Image provenance and the publishing path need verification.

Decision and scope

Accepted for bounded diagnosis and the smallest evidence-backed repair, if needed. Maintainer-owned delivery will first reproduce the relevant publishing configuration in an isolated, non-publishing environment. Distinguish configuration/build failure from infrastructure or registry failure. Do not change unrelated dependencies or CI settings merely to obtain a green run.

Do not rerun the publisher just to recover logs: that can overwrite the mutable :main image. Do not create a release, change branch protections, or deploy to a shared cluster for diagnosis.

Acceptance criteria

  1. Record source SHA, tool versions, exact commands, native exit codes, and current image provenance where accessible. Explain any inaccessible historical evidence.
  2. Reproduce the failure or document the precise remaining blocker; do not invent a root cause from the expired logs.
  3. If a source fix is necessary, add focused regression coverage and make the smallest coherent change. Preserve release and main-channel behavior.
  4. Run the required local test, build, lint, vendor and relevant workflow/docs checks. Validate non-publishing release/main-channel behavior with screenshots and video of the hands-on check.
  5. Bind CI, normal Codex review, security Codex review, and an independent final recommendation to the candidate head. Keep the lifetime review ledger within six completed assessments, reserving the final slot.
  6. After an authorized merge, verify main CI and the resulting image revision/digests. Until then, report readiness separately from restored publishing.

Execution and verification

First investigate and record a minimal plan. Prove the reproduction before editing. Then validate locally, complete review, and hand off the ready PR for the repository's human-only merge step. Post-merge verification remains maintainer-owned.


Generated with xum • Model: coder:openai/gpt-6-astra • Thinking: xhigh

Activity

  1. ThomasK33 commented on Sep 18, 2026

    @ThomasK33
    MemberAuthor

    Readiness: blocked

    PR #99, exact head 8aa69887a61ccca0d21964eebc98d552c0a764bc, implements the demonstrated main-channel preparation repair. Publication is not yet verified.

    1. Passed: exact-head make test, make build, make verify-vendor, make lint, and actionlint v1.7.10. Pinned Go 1.25.7 / GoReleaser 2.13.3 main and release-fixture non-publishing packaging both exited 0. Screenshots and recordings are attached to the PR and their downloaded hashes match the original evidence.
    2. Reviews: explicit normal review found no major issues; separate security review found no security issues in this PR. Both identify 8aa69887a6. There are zero review threads. The fresh independent assessor found no source defect and recommends blocked because required CI is not green. Lifetime count: 4/6 assessments (automatic normal, explicit normal, explicit security, independent final); two slots remain. No failed review requests or retries were needed.
    3. Required CI blockers: lint fails govulncheck with 55 called vulnerability IDs. The exact same 55 IDs reproduce on unchanged main b1d48e3a64b42a23cb0cfaee8c30f3f21b761424, exit 3. Terraform (fmt/validate/tflint/trivy) fails while installing Trivy v0.65.0, before scanning; one targeted PR-job retry failed at the same point. A read-only request for that upstream release returns HTTP 404. The logs do not establish why it is unavailable. Filesystem and image scans fail at the same installer boundary.
    4. Additional CI compatibility blocker: Codex Comments treats the bot's completed summary and explicit clean security verdict as unresolved regular comments. A fresh local helper run returns 1 while reporting zero unresolved review threads. These comments were not hidden or deleted. Required test, workflow lint, and changed-path checks passed. The successful PR E2E check follows the workflow's documented skip; it is not full cluster E2E evidence.

    Decision and stopping reason: the source repair is validated, but PR #99 is not ready to merge. Do not bypass the failing checks, broaden this repair into unrelated dependency upgrades, or reset the review budget. The maintainer desk owns follow-up coordination under issue #98: scope the baseline security and scanner/helper compatibility work, then revalidate this PR within its remaining review capacity. Any head change invalidates head-bound evidence and must be reconciled within that capacity.

    Issue #98 remains open. Human owns every merge/enqueue/auto-merge operation. After an authorized merge, the delivery workspace and maintainer desk retain responsibility for main CI and image revision/digest verification. No publisher rerun, GHCR push, release, deployment, infrastructure change, or merge was performed for this diagnosis.


    Generated with xum • Model: coder:openai/gpt-6-astra • Thinking: xhigh

  2. ThomasK33 commented on Sep 21, 2026

    @ThomasK33
    MemberAuthor

    Verified recovery — completed

    PR #99 landed as cd378781a116dac8c68f908bdc74d8425413677f after required merge-group CI, including full Kind/CNPG/template E2E. The normal main CI publisher run 35605551335 succeeded with GoReleaser 2.18.2. Its published-image HIGH/CRITICAL Trivy gate passed.

    The maintainer independently fetched and SHA256-verified the registry index, each platform manifest, and each image config. The index digest matches the publisher's output:

    ghcr.io/coder/coder-k8s@sha256:3e70115126612f8c3a283705f691dface651a4ddad3675c6aaeb860161418135

    Platform Image manifest digest Verified revision
    linux/amd64 sha256:e50d6a90348d7f366b9b5a5e8f076b8c35b4b1ec3e2a8ef2bacefcae2df60fb4 cd378781a116dac8c68f908bdc74d8425413677f
    linux/arm64 sha256:b377e06e6f733c03daa18b6106d74a90c82a0287a0aaefa7eb871fde71574e08 cd378781a116dac8c68f908bdc74d8425413677f

    The mutable :main tag was unchanged across the verification reads. This replaces the previously observed stale index sha256:90b505ac03d7f5862d25dd955a74957c8fcc9d344f69c42ebd1f841111a2fa18.

    All six acceptance criteria are satisfied. PR #99 used five of six lifetime assessments. Required validation ran in the merge group; skipped jobs in the subsequent push run are not represented as reruns. Actual publication and registry provenance are verified, not inferred from private packaging alone.

    Limits: this registry check did not execute the published containers or independently scan both architectures. The expired original failure logs remain unavailable; the later reproduced and observed synthetic-tag failure is not retroactive proof of every historical cause. Tagged release publication was not performed.


    Generated with xum • Model: coder:bedrock-mantle-us-west-2/openai.gpt-6-astra • Thinking: xhigh

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is not working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions