contract job red on the forge: glab missing from CI image + mill show dashboard.assembly shape mismatch #407

Open
opened 2026-07-13 12:00:50 +00:00 by mph · 0 comments
Owner

Summary

The nightly contract job (tool contract suite, test/contract/*.bats) is failing on the Forgejo runner — run #31 (schedule, 2026-07-13 03:17 UTC): 6 failing tests from two independent root causes, both environmental (the CI image), not the code under test. gh, git, scala-cli (4/4) pass; tmux is skipped by design.

Root cause 1 — glab not installed in the CI image (5 failures)

not ok 1 glab: binary on PATH
  glab --version exited with code 127 → 'Command not found'
not ok 2 glab --version exits 0
not ok 3 glab issue view --help advertises --output and --repo flags
not ok 4 glab issue list --help advertises --output flag
not ok 5 glab issue create --help advertises --repo, --title, --description, --label

glab (the GitLab CLI) isn't present in ghcr.io/iterative-works/iw-cli-ci:latest. The binary on PATH guard fails and the other four cascade from the same missing binary (test/contract/glab_adapter_contract.bats).

Fix: add glab to the iw-cli-ci image build, or gate the glab contract behind an env flag (as tmux already is with IW_CONTRACT_TMUX) if glab coverage on the forge runner isn't wanted yet.

Root cause 2 — mill show dashboard.assembly output isn't the expected JSON (1 failure)

not ok 4 mill show dashboard.assembly returns a ref-prefixed jar path that exists
  (test/contract/mill_contract.bats, line 34)
  `decoded="$(jq -r '.' <<<"$output")"` failed with status 5
  jq: parse error: Invalid numeric literal at line 1, column 2

mill show dashboard.assembly emitted output that jq can't parse as the expected JSON string (parse error at the first token). This is the contract suite doing its job — flagging that mill's output shape in this environment no longer matches the adapter's assumption (likely a mill-version/output difference in the container, or show printing something non-JSON alongside the value).

Fix: capture what mill show dashboard.assembly actually prints in the CI image, then either pin/adjust the mill version in iw-cli-ci or update mill_contract.bats (and the adapter, if the real parsing depends on the same shape) to the current output.

Notes

  • Nightly + contract-label gated, so it does not block ordinary CI (compile/test/lint/format/dashboard-build are green on the forge).
  • Surfaced during the forge Maven-registry cutover; unrelated to that work — iw-cli's only works.iterative dep (scalatags-webawesome:3.2.1.1) resolves from Maven Central.
## Summary The nightly `contract` job (tool contract suite, `test/contract/*.bats`) is failing on the Forgejo runner — run [#31](https://code.iterative.works/iterative-works/iw-cli/actions/runs/31) (`schedule`, 2026-07-13 03:17 UTC): **6 failing tests from two independent root causes**, both environmental (the CI image), not the code under test. `gh`, `git`, `scala-cli` (4/4) pass; `tmux` is skipped by design. ## Root cause 1 — `glab` not installed in the CI image (5 failures) ``` not ok 1 glab: binary on PATH glab --version exited with code 127 → 'Command not found' not ok 2 glab --version exits 0 not ok 3 glab issue view --help advertises --output and --repo flags not ok 4 glab issue list --help advertises --output flag not ok 5 glab issue create --help advertises --repo, --title, --description, --label ``` `glab` (the GitLab CLI) isn't present in `ghcr.io/iterative-works/iw-cli-ci:latest`. The `binary on PATH` guard fails and the other four cascade from the same missing binary (`test/contract/glab_adapter_contract.bats`). **Fix:** add `glab` to the `iw-cli-ci` image build, or gate the glab contract behind an env flag (as `tmux` already is with `IW_CONTRACT_TMUX`) if glab coverage on the forge runner isn't wanted yet. ## Root cause 2 — `mill show dashboard.assembly` output isn't the expected JSON (1 failure) ``` not ok 4 mill show dashboard.assembly returns a ref-prefixed jar path that exists (test/contract/mill_contract.bats, line 34) `decoded="$(jq -r '.' <<<"$output")"` failed with status 5 jq: parse error: Invalid numeric literal at line 1, column 2 ``` `mill show dashboard.assembly` emitted output that `jq` can't parse as the expected JSON string (parse error at the first token). This is the contract suite doing its job — flagging that mill's output shape in this environment no longer matches the adapter's assumption (likely a mill-version/output difference in the container, or `show` printing something non-JSON alongside the value). **Fix:** capture what `mill show dashboard.assembly` actually prints in the CI image, then either pin/adjust the mill version in `iw-cli-ci` or update `mill_contract.bats` (and the adapter, if the real parsing depends on the same shape) to the current output. ## Notes - Nightly + `contract`-label gated, so it does not block ordinary CI (compile/test/lint/format/dashboard-build are green on the forge). - Surfaced during the forge Maven-registry cutover; unrelated to that work — iw-cli's only `works.iterative` dep (`scalatags-webawesome:3.2.1.1`) resolves from Maven Central.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
iterative-works/iw-cli#407
No description provided.