Phase 2 base image was missing two binaries that consumer composite
actions hard-depend on:
- `unzip` is required by oven-sh/setup-bun@v1, used during the setup
phase of anthropics/claude-code-action@v1. Without it the action
fails with "Unable to locate executable file: unzip" before the
review body even runs (observed on PR #191 after #193 merged).
- `gh` is invoked at 14+ call sites across pr-review/, apply-fix/,
lint-failure/, ci-failure/, and tag-claude/ composite actions
(PR diff fetching, status creation, comment posting, dedup). The
AI itself shells out to gh via --allowedTools.
Refs #194. PR-B will follow with digest-pin updates in the 5
container-pinned reusable workflows once the post-merge
runtime-build run on main produces the new digests.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Summary
PR-A of the two-PR sequence described in issue #194 (#193 was the immediately-prior hotfix that exposed this failure layer).
One file changed:
runtime/base/DockerfileThe Phase 2 base image was missing two binaries that consumer composite actions hard-depend on:
unzip— added to the existingapt-get installstep (alphabetically betweenjqand the cleanup line). Required byoven-sh/setup-bun@v1, which is invoked during the setup phase ofanthropics/claude-code-action@v1to extract its tarball. Without it the action fails withUnable to locate executable file: unzipbefore the review body even runs (observed on PR feat(ci): periodic overlay-image-pull smoke test #191 after fix(ci): add packages:read to container-pinned workflows #193 merged).gh— added as a separateRUNstep using the canonicalcli.github.com/packageskeyring +sources.listpattern (no deprecatedapt-key add). Required by composite actions at 14+ call sites acrosspr-review/,apply-fix/,lint-failure/,ci-failure/, andtag-claude/(PR diff fetching, status creation, comment posting, dedup).claude-code-action@v1also exposesghsubcommands to the AI via--allowedTools.Both layers are placed before
COPY shared/andnpm install -gso they cache independently of manifest content churn.Overlay Dockerfiles (
runtime/overlays/{review,fix,explain}/Dockerfile) are not modified — they all inherit from base, so this single change covers all three overlays.Local verification output
docker buildexited 0. Both binaries verified present in the built image.Test plan
runtime-buildworkflow validates rebuilt image)actionlintpasses (no workflow files changed in this PR)runtime-buildon main produces new overlay digests for PR-BClosing note
This PR uses
Refs #194, NOTCloses #194— issue #194 closes when PR-B lands with the updated digest pins in the 5 container-pinned reusable workflows.🤖 Generated by Claude Code on behalf of @cbeaulieu-gt