chore(ci): consume standard runner image contract #873

Merged
pullings merged 1 commit from i/863-runner-image-contract into main 2026-08-25 18:03:03 +02:00
Owner

Summary

  • Refs #863.
  • Inventory the required gate tools against the actual go and playwright runner labels and images.
  • Remove runtime installers from the measured standard-image paths in tests.yml and build-c4.yml.
  • Keep reusable-release.yml's installer as an intentional fallback for external consumers with arbitrary runs_on labels.
  • Update README, integration, and operations runner requirements; link alcatraz-infra#528.
  • Add fail-loud preflights and an empty-PATH missing-tool regression control.

Measured contract

  • go -> git.frankenbit.de/frankenbit/forgejo-ci-go:latest, image sha256:ccb8a794b5880e217622e065ced1e359ad708562c78786b14b908216bb1d3f62.
    Provides bash, git, Go 1.26.2, golangci-lint 2.12.1, bats 1.11.1, shellcheck 0.10.0, jq 1.7, curl, Python yq, and node/npm.
  • playwright -> git.frankenbit.de/frankenbit/forgejo-ci-playwright:latest, image sha256:59f422091a2caf14df55df9a663508dd3aa279c2e6a4cf2ba4810eee03389f4c.
    Provides dot/unflatten from Graphviz 2.43.0, plus node/npm, bash, git, curl, and jq.
  • Both images are selected by the local runner label map with force_pull: true; neither includes sudo.

Verification artifact

  • bats --print-output-on-failure tests/: 1..53, all passed.
  • go test -count=1 ./...: all packages passed.
  • go vet ./...: passed.
  • find scripts ... | xargs shellcheck --severity=warning: passed.
  • go run ./cmd/rt fragment-check changelog.d: passed.
  • YAML parse, extracted workflow bash syntax, and git diff --check: passed.
  • Empty-PATH controls executed the exact preflight blocks:
    • bats: rc=1, names bats jq and forgejo-ci-go.
    • shellcheck: rc=1, names shellcheck and forgejo-ci-go.
    • build-c4: rc=1, names dot unflatten and forgejo-ci-playwright.
  • The same preflight blocks pass in the measured Docker images.

No reviewer was requested by this PR.

## Summary - Refs #863. - Inventory the required gate tools against the actual go and playwright runner labels and images. - Remove runtime installers from the measured standard-image paths in tests.yml and build-c4.yml. - Keep reusable-release.yml's installer as an intentional fallback for external consumers with arbitrary runs_on labels. - Update README, integration, and operations runner requirements; link alcatraz-infra#528. - Add fail-loud preflights and an empty-PATH missing-tool regression control. ## Measured contract - go -> git.frankenbit.de/frankenbit/forgejo-ci-go:latest, image sha256:ccb8a794b5880e217622e065ced1e359ad708562c78786b14b908216bb1d3f62. Provides bash, git, Go 1.26.2, golangci-lint 2.12.1, bats 1.11.1, shellcheck 0.10.0, jq 1.7, curl, Python yq, and node/npm. - playwright -> git.frankenbit.de/frankenbit/forgejo-ci-playwright:latest, image sha256:59f422091a2caf14df55df9a663508dd3aa279c2e6a4cf2ba4810eee03389f4c. Provides dot/unflatten from Graphviz 2.43.0, plus node/npm, bash, git, curl, and jq. - Both images are selected by the local runner label map with force_pull: true; neither includes sudo. ## Verification artifact - bats --print-output-on-failure tests/: 1..53, all passed. - go test -count=1 ./...: all packages passed. - go vet ./...: passed. - find scripts ... | xargs shellcheck --severity=warning: passed. - go run ./cmd/rt fragment-check changelog.d: passed. - YAML parse, extracted workflow bash syntax, and git diff --check: passed. - Empty-PATH controls executed the exact preflight blocks: - bats: rc=1, names bats jq and forgejo-ci-go. - shellcheck: rc=1, names shellcheck and forgejo-ci-go. - build-c4: rc=1, names dot unflatten and forgejo-ci-playwright. - The same preflight blocks pass in the measured Docker images. No reviewer was requested by this PR.
chore(ci): consume standard runner image contract
All checks were successful
check-self-bootstrap / check (pull_request) Successful in 5s
fragment-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 4s
fragment-check / changelog fragment-kind (pull_request) Successful in 6s
fragment-check / check (pull_request) Successful in 0s
go-ci / lint + build + test (pull_request) Successful in 23s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 6s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 6s
register-check / check (pull_request) Successful in 0s
tests / workflow-schema (pull_request) Successful in 3s
tests / bats (pull_request) Successful in 7s
tests / shellcheck (pull_request) Successful in 3s
check-self-bootstrap / check (push) Successful in 5s
go-ci / lint + build + test (push) Successful in 23s
release / decide + act (push) Successful in 7s
release / release (push) Successful in 0s
tests / workflow-schema (push) Successful in 10s
tests / bats (push) Successful in 7s
tests / shellcheck (push) Successful in 3s
a3bd7c56f6
lookout approved these changes 2026-08-25 18:02:13 +02:00
lookout left a comment

Reviewed exact head a3bd7c56f6 and APPROVED.\n\nThe standard-image change is correctly scoped: tests.yml and build-c4.yml now fail loud when the measured go/playwright tools are absent, while reusable-release.yml retains its intentional installer fallback for arbitrary external runs_on labels. The workflow docs match the actual labels and image tool inventories.\n\nI ran the exact preflight blocks with an empty PATH: bats/jq, shellcheck, and dot/unflatten each failed non-zero with the expected missing-tool and image-contract diagnostics. I also ran those blocks inside the measured go and playwright images, where they passed and reported the expected tools.\n\nFull go test ./... -count=1, go vet ./..., go build ./..., 53 Bats arms, shellcheck, YAML parsing, fragment-check, and changed-file diff-check pass. Forgejo reports mergeable=true and all 12 contexts successful.

Reviewed exact head a3bd7c56f64e849e153f3241cb32a87fcb7c4bfe and APPROVED.\n\nThe standard-image change is correctly scoped: tests.yml and build-c4.yml now fail loud when the measured go/playwright tools are absent, while reusable-release.yml retains its intentional installer fallback for arbitrary external runs_on labels. The workflow docs match the actual labels and image tool inventories.\n\nI ran the exact preflight blocks with an empty PATH: bats/jq, shellcheck, and dot/unflatten each failed non-zero with the expected missing-tool and image-contract diagnostics. I also ran those blocks inside the measured go and playwright images, where they passed and reported the expected tools.\n\nFull go test ./... -count=1, go vet ./..., go build ./..., 53 Bats arms, shellcheck, YAML parsing, fragment-check, and changed-file diff-check pass. Forgejo reports mergeable=true and all 12 contexts successful.
lookout approved these changes 2026-08-25 18:02:13 +02:00
lookout left a comment

Reviewed exact head a3bd7c56f6 and APPROVED.\n\nThe standard-image change is correctly scoped: tests.yml and build-c4.yml now fail loud when the measured go/playwright tools are absent, while reusable-release.yml retains its intentional installer fallback for arbitrary external runs_on labels. The workflow docs match the actual labels and image tool inventories.\n\nI ran the exact preflight blocks with an empty PATH: bats/jq, shellcheck, and dot/unflatten each failed non-zero with the expected missing-tool and image-contract diagnostics. I also ran those blocks inside the measured go and playwright images, where they passed and reported the expected tools.\n\nFull go test ./... -count=1, go vet ./..., go build ./..., 53 Bats arms, shellcheck, YAML parsing, fragment-check, and changed-file diff-check pass. Forgejo reports mergeable=true and all 12 contexts successful.

Reviewed exact head a3bd7c56f64e849e153f3241cb32a87fcb7c4bfe and APPROVED.\n\nThe standard-image change is correctly scoped: tests.yml and build-c4.yml now fail loud when the measured go/playwright tools are absent, while reusable-release.yml retains its intentional installer fallback for arbitrary external runs_on labels. The workflow docs match the actual labels and image tool inventories.\n\nI ran the exact preflight blocks with an empty PATH: bats/jq, shellcheck, and dot/unflatten each failed non-zero with the expected missing-tool and image-contract diagnostics. I also ran those blocks inside the measured go and playwright images, where they passed and reported the expected tools.\n\nFull go test ./... -count=1, go vet ./..., go build ./..., 53 Bats arms, shellcheck, YAML parsing, fragment-check, and changed-file diff-check pass. Forgejo reports mergeable=true and all 12 contexts successful.
Sign in to join this conversation.
No description provided.