Skip to content

ci(eng-prod): publish container images to public GHCR [CLK-1148049]#3

Merged
avadhanij merged 2 commits into
mainfrom
CLK-1148049/ci/setup-ci
Jun 2, 2026
Merged

ci(eng-prod): publish container images to public GHCR [CLK-1148049]#3
avadhanij merged 2 commits into
mainfrom
CLK-1148049/ci/setup-ci

Conversation

@avadhanij
Copy link
Copy Markdown
Contributor

What

Fixes the broken CI publishing path so this repo (now time-loop/ci-storage, a mirror of dimikot/ci-storage) publishes its three container images — ci-storage, ci-scaler, ci-runner — to GHCR under the org.

Why it was broken

  • The three push-ci-* jobs logged in to Docker Hub as dimikot with secrets.DOCKERHUB_PAT, which doesn't exist in this org — every publish step failed.
  • They also needs: the self-hosted integration tests (ci-scaler-test, build-and-boot-containers, spawn-job-test), which fail immediately because secrets.CI_PAT is unset. So publishing never even started.

Changes

  • Collapse the three duplicated push-ci-* jobs into one push-images matrix job over [ci-storage, ci-scaler, ci-runner].
  • Publish only to ghcr.io/${{ github.repository_owner }}/<image> using the built-in GITHUB_TOKEN with permissions: packages: write — no registry PAT needed. All Docker Hub login and dockerhub-description steps removed.
  • Decouple publishing from the self-hosted integration tests: needs: is now just [ci-storage-tool-test, ci-storage-action-test].
  • PRs build all three images across linux/amd64,linux/arm64,linux/arm64/v8 (validating the Dockerfiles) but do not push; GHCR login is skipped on PRs. Merges to main / v* tags build and push.
  • Docs: rewrite PUBLISH.md for the GHCR flow; repoint consumer image refs in the docker READMEs ghcr.io/dimikot/*ghcr.io/time-loop/*.

Required manual follow-ups (cannot be done in CI)

  1. After the first publish to main/a tag, switch each of the 3 GHCR packages to public (Org → Packages → package → settings → change visibility). New packages are private by default; there is no REST API for visibility, so this is a one-time UI step and may need org admin.
  2. Separate PR in time-loop/sd to repoint ghcr.io/dimikot/*ghcr.io/time-loop/* once the public packages exist. (sd keeps working off dimikot's public images until then.)

Out of scope

The self-hosted integration test jobs stay red until CI_PAT + runner infra are set up — tracked separately.

Replace the three duplicated push-ci-* jobs with a single push-images
matrix job that publishes ci-storage, ci-scaler, and ci-runner only to
ghcr.io/<owner>/<image> via the built-in GITHUB_TOKEN (packages: write),
dropping all Docker Hub login and dockerhub-description steps.

Publishing is decoupled from the self-hosted integration tests (which
need CI_PAT and runner infra) so a missing secret no longer blocks
images. PRs build the images across the platform matrix without pushing;
merges to main and v* tags build and push.

Docs updated for the GHCR flow, including the one-time manual step to
make each package public.
@avadhanij avadhanij requested a review from a team as a code owner June 2, 2026 18:50
@avadhanij avadhanij merged commit 7271226 into main Jun 2, 2026
9 of 10 checks passed
@avadhanij avadhanij deleted the CLK-1148049/ci/setup-ci branch June 2, 2026 20:10
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.

3 participants