Skip to content

Automate the harness refresh pipeline - #197

Merged
vu1n merged 1 commit into
mainfrom
ci/harness-refresh-pipeline
Oct 15, 2026
Merged

vu1n merged 1 commit into
mainfrom
ci/harness-refresh-pipeline

Conversation

@vu1n

@vu1n vu1n commented Oct 15, 2026 •

Copy link
Copy Markdown
Owner

Closes the process gaps today's manual refresh exposed. Three pieces:

  1. harness-refresh (daily cron, 21:17 UTC) — runs build-runner.sh --update --dry-run; if any pin moved, rewrites pins via the new --pins-only flag and opens ONE rolling PR (bot/harness-refresh) with the version table + qualification checklist. No automerge: merging stays the deliberate act. Cadence: daily (per call — amp alone releases near-daily, so the PR body is what stays quiet).
  2. runner-image on PRs touching runner/** — builds both architectures without publishing; refresh PRs are image-tested before merge. Fork PRs skip (read-only token can't push digests). Publish job gated to non-PR events.
  3. :dev republished on every push to main (was: manual dispatch) — auto-publish on merge as decided. Failed verify still fails closed before dev moves. Tag pushes → vX.Y.Z + latest, exactly as before.

Notes:

  • New build-runner.sh --pins-only flag: resolve + rewrite without building (the bot has no docker; CI is the builder). Respects --dry-run; errors without --update.
  • Bot-authored PRs don't trigger pull_request workflows (GitHub's recursion rule). Set a REFRESH_PAT secret if you want PR-time image CI on bot PRs; without it the publish-time verify gate is the backstop.
  • ubuntu-latest→26.04 migration: deliberately not addressed; the image is built inside debian:bookworm containers, so the runner OS doesn't enter the artifact.
  • Renovate's harness custom manager is documented as superseded (app isn't installed anyway); keep Renovate for cargo if that ever gets installed, and prune the harness manager then.

This PR itself exercises piece 2 — it touches scripts/build-runner.sh, so the runner-image build-only jobs appear on it.

Three pieces, replacing remember-to-run-it + manual dispatch:

1. harness-refresh workflow (daily cron): build-runner.sh --update --dry-run;
   if any pin moved, rewrite pins (--pins-only, new flag: resolve + rewrite
   without building) on the rolling bot/harness-refresh branch and open/update
   one PR carrying the version table and a qualification checklist. Merging
   stays the deliberate act - adapters record the harness versions they
   observe and docs record what each catalog was qualified against.

2. runner-image on PRs touching runner/**: builds both architectures without
   publishing, so a refresh PR is image-tested before merge. Fork PRs skip
   (read-only token cannot push digests). Publish job gated to non-PR events.

3. dev republished on every push to main (was: manual dispatch) - a refresh
   merge publishes mechanically; failed verify still fails closed before dev
   moves. Tag pushes publish vX.Y.Z + latest exactly as before.

Bot-authored PRs don't trigger PR workflows (GitHub recursion rule); set a
REFRESH_PAT secret for PR-time image CI on bot PRs - without it the publish
verify gate is the backstop. Runner-image guide records the pipeline.
@vu1n
vu1n merged commit 4a2b201 into main Oct 15, 2026
8 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