ci: bake jq into the prebuilt test image #821
Reference in New Issue
Block a user
Delete Branch "fix/795-ci-base-jq"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Dependency audit
The shipped Codex review wrappers require bash, git, jq, codex, and a provider CLI (tea for Gitea or gh for GitHub). Gitea review posting also uses python3 through shared login helpers. BusyBox/coreutils commands used are awk, sed, grep, head, cat, cp, rm, mktemp, and wc.
The hermetic regression test requires bash, git, and jq through the real wrapper preflight; tea and codex are stubbed. Node, pnpm, and Turbo provide the CI runner invocation.
Decision
Path A. jq is a genuine shipped runtime dependency, not test-only parsing convenience: both review wrappers call check_jq, validate Codex JSON with jq empty, and common.sh uses jq to format findings and select review actions.
Change
Runtime parity: the host-side shipped wrapper README already declares jq, the operational Mosaic host has jq, and the dedicated codex-review Woodpecker template installs jq and git. Gateway/appservice runtime images do not ship or execute these host-side framework review tools.
Evidence
Pipeline 1893 is the red-first reproducer: git fixture setup passes, then both wrapper paths stop at check_jq because ci-base lacks jq.
After merge, ci-image.yml must publish a successful descendant ci-base:latest before PR #815 is rebased again.
Related to #795; does not close it.
Independent Review-of-Record — PR #821
Exact head SHA reviewed:
d8dc09608345d6c69f817c48a81853b7ea969c85(branchfix/795-ci-base-jq)Merge-base / sole parent:
cabf02e7b9310f7ae57ad67c1db66959ffaf1bc9(currentmain)Head's sole parent is the current main tip, so this is a trivial fast-forward — the true prospective merge tree is identical to the head tree. I reviewed that tree directly (no synthetic merge required).
Verdict: APPROVE
Independent verification performed
Diff re-fetched and confirmed exact.
Dockerfile.ciis the only file changed (+4/-4). The change addsjqto the existingapk add --no-cachelayer:apk add --no-cache python3 make g++ postgresql-client bash gitapk add --no-cache python3 make g++ postgresql-client bash git jqgitis preserved, not dropped. The accompanying comment update accurately describes that bash/git/jq are baked in for framework shell tests and the shipped Codex review wrappers, avoiding per-run installation inci.yml. No other lines, files, secrets, or tokens are touched.Merge-base confirmed.
GET /repos/mosaicstack/stack/git/commits/d8dc0960...returns a single parent:cabf02e7b9310f7ae57ad67c1db66959ffaf1bc9, matching current main. Fast-forward confirmed independently.Exact-head CI confirmed green. Woodpecker pipeline 1894 (commit
d8dc0960..., refrefs/pull/821/head): overallstatus: success. All workflow steps green: clone, ci-postgres (service), install, sanitization, upgrade-guard, typecheck, lint, format, test — eachstate: success,exit_code: 0.changed_files: ["Dockerfile.ci"]only.Substance review:
Dockerfile.ci), low blast radius.python3 make g++ postgresql-client bash gitall remain in the apk line; onlyjqis additive.jqparity (needed for the shipped Codex review wrappers to work outside the CI image) is a known, separately-documented pre-existing gap. It is deliberately out of scope for this CI-image-only PR and is not a basis for REQUEST CHANGES here.Lane attestation
Author lane = homelab (coordinator). Reviewer lane = independent reviewer-of-record, operating under a single Gitea account (
jason.woltje) — author≠reviewer is process/lane-attested per the delegated independent-review protocol, not enforced via separate Gitea identities.Do not merge
This comment is a review record only; no merge action was taken as part of this review.
—
Independent reviewer-of-record (MS-LEAD-delegated)