Skip to content

Fix red CI: lowercase GHCR tags; stop gating release check on local Tier A#6

Merged
jvogan merged 1 commit into
mainfrom
fix/ci-ghcr-lowercase-and-capability-gate
May 29, 2026
Merged

Fix red CI: lowercase GHCR tags; stop gating release check on local Tier A#6
jvogan merged 1 commit into
mainfrom
fix/ci-ghcr-lowercase-and-capability-gate

Conversation

@jvogan
Copy link
Copy Markdown
Member

@jvogan jvogan commented May 29, 2026

Why

All three CI workflows were failing on main:

Workflow Root cause
Build GeneCluster runner image tag ghcr.io/BioSymphony/... — GHCR requires lowercase repo names
Build GeneCluster Superpowers image same uppercase-owner tag bug (+ DEFAULT_BASE_IMAGE)
Public release check make capability exits 1 — probe gates on local Tier A tooling absent in CI

What changed

Image builds (both workflows): IMAGE_NAME was derived from ${{ github.repository_owner }}, which is BioSymphony (mixed case), so buildx aborted with invalid tag ... repository name must be lowercase. A new Normalize image name step now computes IMAGE_NAME=${OWNER,,}/genecluster-… (the owner passed via env: and lowercased in-shell — the GitHub-recommended injection-safe pattern). The Superpowers DEFAULT_BASE_IMAGE owner is lowercased the same way so it can pull the runner base image.

Public release check: make public-audit → capability ran capability_probe.py, which ends with return 0 if tier_a_ready else 1. Tier A needs local macOS GUIs (PyMOL/ChimeraX), conda, and the ValarTTS server on :8787 — the CI log showed Connection refused. A hosted runner can never satisfy this. Added a --no-fail (report-only) flag to the probe and pass it from the capability Make target. Direct invocation without the flag keeps the exit-1 local-readiness signal, so local readiness checks are unchanged.

Verification

  • make public-release-check exits 0 locally (101 unit tests pass; all audits clean) — this is the exact chain the Public release check workflow runs.
  • capability_probe.py --json --no-fail exits 0; --help lists the flag.
  • All three workflow YAMLs parse.

Note on CI coverage for this PR

The two image-build workflows trigger on push to main (and their own paths:), not on pull_request, so they won't run on this PR. Because this PR edits those workflow files (which are in the path filter), they'll re-run automatically on merge. They can also be exercised pre-merge via gh workflow run / workflow_dispatch on this branch if desired — those runs do a full Docker build (~minutes for the runner, up to the 120-min timeout for Superpowers).

🤖 Generated with Claude Code

…ier A

Three workflows were failing on main.

Build GeneCluster runner image / Build GeneCluster Superpowers image:
Both derived IMAGE_NAME from ${{ github.repository_owner }} ("BioSymphony"),
producing tags like ghcr.io/BioSymphony/... which GHCR rejects with
"repository name must be lowercase". Compute IMAGE_NAME in a new
"Normalize image name" step via ${OWNER,,}, and lowercase the Superpowers
DEFAULT_BASE_IMAGE owner the same way so it can pull the runner base image.

Public release check (runs on every push + PR):
make public-audit -> capability ran capability_probe.py, which exits 1
unless Tier A local tooling (PyMOL/ChimeraX GUIs, conda, the ValarTTS
server on :8787) is present. A hosted runner never has these, so the gate
could not pass in CI. Add a --no-fail (report-only) flag to the probe and
pass it from the `capability` Make target; direct invocation without the
flag keeps the exit-1 local-readiness signal.

Verified: `make public-release-check` now exits 0 locally (101 unit tests
pass, all audits clean). The image-build workflows trigger on push to main
(and their own paths), so they re-run on merge.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@jvogan jvogan merged commit bf66e80 into main May 29, 2026
1 check passed
@jvogan jvogan deleted the fix/ci-ghcr-lowercase-and-capability-gate branch May 29, 2026 01:12
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.

1 participant