Track CrocoDash main: rebuild, gate, then publish - #8
Open
manishvenu wants to merge 1 commit into
Open
manishvenu wants to merge 1 commit into
manishvenu wants to merge 1 commit into
Conversation
Adds crocodash-main.yml, which keeps the published container in step with
CrocoDash's main branch.
The image bakes CrocoDash in -- the Dockerfile does COPY CrocoDash/ -- so a
plain rebuild produces a byte-identical image. Picking up new CrocoDash
means moving the submodule to main's tip and rebuilding from that. Each
daily run:
1. compares the submodule pointer against CrocoDash main's tip, and stops
if they match;
2. checks that tip out in the working tree and builds an amd64-only image,
pushed as crocodash-<sha>-amd64;
3. runs the smoke test, the domain sweep and the MOM6 runs against that tag;
4. only on a green suite, retags it to latest-amd64 and opens a PR bumping
the pointer.
A CrocoDash commit therefore cannot publish itself. A broken main leaves
latest-amd64 untouched, and the pointer ends up recording the newest
CrocoDash main that is known to work in the container rather than merely the
newest that exists.
The three test workflows gain an optional `image` input via workflow_call to
make step 3 possible; every podman invocation now reads $IMAGE, which
defaults to the published latest-amd64, so their behaviour on a PR is
unchanged.
Two deliberate limits, both documented in the README:
- amd64 only. Every CI consumer pulls latest-amd64, and arm64 under QEMU has
taken upwards of four hours -- recent build.yml runs are 26m, 4h39m, 31m,
40m, 43m, 3h50m. build.yml's weekly run stays multi-arch and keeps arm64
and the merged `latest` manifest current, which is also why promote/
retags only latest-amd64 and leaves `latest` alone.
- The pointer-bump PR shows no checks of its own, because PRs opened with
GITHUB_TOKEN do not start workflow runs. The gate that matters already ran
in the tracker, and the PR body links to it.
Polls daily rather than being pushed to by CrocoDash: a repository_dispatch
would be faster but needs a PAT with write access to this repo stored as a
secret in CrocoDash, and daily is fine for something whose rebuild alone
takes half an hour.
manishvenu
force-pushed
the
crocodash-main-tracker
branch
from
August 25, 2026 16:37
f25cd57 to
d8ebdce
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Keeps the published container in step with CrocoDash's
mainbranch, without letting a CrocoDash commit publish itself.Stacked on #7 (base
regional-create-test-suite), which is where the three test workflows this reuses are defined. Merge that first.Why a rebuild alone isn't enough
The image bakes CrocoDash in —
COPY CrocoDash/ /workspace/CrocoDash/in the Dockerfile — so rebuilding without moving the submodule pointer produces a byte-identical image. Picking up new CrocoDash means moving the submodule tomain's tip and rebuilding from that.What
crocodash-main.ymldoesDaily at 3am UTC, and on demand:
CrocoDashsubmodule pointer against CrocoDashmain's tip. Stops if they match.crocodash-<sha>-amd64.latest-amd64and opens a PR bumping the submodule pointer.The ordering is the point. A broken CrocoDash
mainleaveslatest-amd64untouched, and the pointer ends up recording the newest CrocoDashmainthat is known to work in the container rather than merely the newest that exists.Changes to the existing workflows
container-test.yml,domain-sweep.ymlandmom6-runs.ymlgain an optionalimageinput viaworkflow_call. All 9 previously hardcoded image references now read$IMAGE, which defaults toghcr.io/crocodile-cesm/crocontainer:latest-amd64— so their behaviour on a pull request is unchanged. Verified: the full 20-check suite passed on this refactor before the split.Deliberate limits
latest-amd64, and arm64 under QEMU has taken upwards of four hours — recentbuild.ymlruns are 26m, 4h39m, 31m, 40m, 43m, 3h50m. Far too much to spend daily.build.yml's weekly run stays multi-arch and keeps arm64 and the mergedlatestmanifest current, which is also whypromoteretags onlylatest-amd64and leaveslatestalone: republishing the manifest here would pair a new amd64 with a stale arm64.repository_dispatchfrom CrocoDash would be immediate, but needs a PAT with write access to this repo stored as a secret over there. Daily is fine for something whose rebuild alone takes half an hour.GITHUB_TOKENdo not start workflow runs. The gate that matters already ran; the PR body links to that run.Not yet exercised
workflow_dispatchresolves against the default branch, so this workflow cannot be triggered until it is onmain— the same limitationmom6-runs.ymlhas. Itschecklogic was run by hand against the real repos (correctly reportschanged=truetoday) and every shell block parses, but the workflow-level plumbing — theworkflow_callfan-out, the retag, the PR creation — is untested by construction. Worth aforce: truedispatch immediately after merge rather than discovering a problem at 3am.