Skip to content

fix(e2e): pin act runner image to a Node 24 digest#399

Merged
joshua-temple merged 1 commit into
mainfrom
fix/act-image-node24-pin
Jun 27, 2026
Merged

fix(e2e): pin act runner image to a Node 24 digest#399
joshua-temple merged 1 commit into
mainfrom
fix/act-image-node24-pin

Conversation

@joshua-temple

Copy link
Copy Markdown
Collaborator

What

Replaces the rolling ghcr.io/catthehacker/ubuntu:act-latest in the e2e harness with a fixed digest (sha256:2f22a801...) that bundles Node 24, and adds a harness preflight that fails loudly if the configured image ever reports Node < 24.

Why

The harness runs generated workflows in act, which executes checkout. The upcoming checkout v7 / github-script v9 bumps require Node 24. The rolling tag is nondeterministic and could regress below Node 24 silently. Pinning by digest makes the runtime reproducible; the preflight turns any future drop into a clear repin signal.

Verification

  • docker run --rm <digest> node --version -> v24.17.0.
  • A real act scenario (No_Change_Skip, the cheapest act-invoking one) PASSED in Docker on the pinned digest.
  • parseNodeMajor / assertNodeMajorAtLeast unit tests pass; go build + golangci-lint clean (root and e2e module).

Note

catthehacker stopped publishing dated tags (newest is pre-Node-24), so a digest is the only deterministic Node-24 reference. An unanchored digest could eventually be GC'd from ghcr; the preflight catches that loudly. A durable follow-up (mirror under stablekernel, or a scheduled digest-refresh) is worth tracking separately.

Prerequisite for the checkout v7 / github-script v9 bumps in the action-pins-manifest goal.

The harness ran generated workflows on the rolling ghcr.io/catthehacker/ubuntu:act-latest tag, a nondeterministic reference whose Node runtime can change under us. Generated workflows run checkout through act, and the upcoming Node 24 actions need a Node 24 runtime in the job container.

Pin the image to a specific digest known to carry Node 24, defined once as actRunnerImage and reused in all three spots (container image, actrc -P mapping, and pre-pull). Add a startup preflight that execs node --version and fails fast with a repin pointer if the major is below 24, so a future image regression is a clear red rather than an obscure action crash.

Signed-off-by: Joshua Temple <[email protected]>
@joshua-temple joshua-temple enabled auto-merge (squash) June 27, 2026 17:11
@joshua-temple joshua-temple merged commit dad01a1 into main Jun 27, 2026
13 checks passed
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