Skip to content

ci: move eight light required jobs and rivet-delta to self-hosted light runners - #241

Merged
avrabe merged 3 commits into
mainfrom
ci/light-jobs-self-hosted
Nov 14, 2026
Merged

avrabe merged 3 commits into
mainfrom
ci/light-jobs-self-hosted

Conversation

@avrabe

@avrabe avrabe commented Nov 14, 2026

Copy link
Copy Markdown
Contributor

The org's GitHub-hosted queue is stalled: about 50 jobs queued for up to 2.5 h, with 5 hosted jobs running org-wide. Owner decision 2026-11-14: move light jobs now.

Job (name unchanged) Tool install, before → after
Format dtolnay rustfmt (unchanged)
Rivet artifact validation cargo install --git rivet (HEAD) → rivet v0.42.2 release binary
Commit traceability (rivet) same as above
Required checks track CI jobs (scry#130) setup-python + pyyaml (unchanged)
Doc claims (claim-check) setup-python + pyyaml (unchanged)
AADL model (spar parse) cargo install --git spar (HEAD) → spar v0.49.0 release binary
WIT round-trip (wasm-tools) cargo install wasm-tools → taiki-e/install-action
cargo-deny (licenses, advisories, bans) cargo install cargo-deny → taiki-e/install-action
Rivet artifact delta (not required) rivet and spar → release binaries

Clippy, Test, Bazel build, MC/DC, the proof workflows, release and publish stay on hosted runners: each compiles the workspace or runs Bazel.

Forks: every moved job runs on pull_request. The runs-on expression sends fork PRs to ubuntu-latest and everything else to [self-hosted, linux, x64, light], so fork code never reaches our runners. The install steps work on both.

Behaviour change: rivet and spar move from git HEAD to pinned releases. Version bumps now need an edit here.

Verified locally:

  • Both workflow files parse.
  • The 13 job names match main, and check-required-checks.py --against-file passes (12 required contexts).
  • check-gate-coverage.py passes, and the commit trailer guard passes (Trace: skip).
  • install-release-bin.sh downloads and installs spar v0.49.0 and fails with exit 56 on a bad tag.

Not verified: a run on the light runners themselves. This PR's own CI is that test.

🤖 Generated with Claude Code

https://claude.ai/code/session_01KEjmjcVaTucsMZy5Fubas7

avrabe and others added 3 commits November 14, 2026 11:28
…ht runners

The org's GitHub-hosted queue is stalled (owner decision 2026-11-14,
"move light jobs now"). These jobs only lint, validate or check text,
so they move to `light`; job names are unchanged so the required
contexts still match:

  Format, Rivet artifact validation, Commit traceability (rivet),
  Required checks track CI jobs (scry#130), Doc claims (claim-check),
  AADL model (spar parse), WIT round-trip (wasm-tools),
  cargo-deny (licenses, advisories, bans); plus Rivet artifact delta.

runs-on keeps fork PRs on ubuntu-latest:
  ${{ github.event.pull_request.head.repo.fork && 'ubuntu-latest' || fromJSON('[...light]') }}

Tools are no longer compiled in the job: rivet v0.42.2 and spar v0.49.0
come from release tarballs via tools/ci/install-release-bin.sh (was
`cargo install --git`, i.e. HEAD), wasm-tools and cargo-deny from
taiki-e/install-action. The rust toolchain and rust-cache steps are
dropped where nothing compiles; cargo-deny keeps the toolchain for
cargo metadata. Clippy, Test, Bazel build, MC/DC, proofs, release and
publish stay on hosted runners.

Trace: skip

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KEjmjcVaTucsMZy5Fubas7
`head.repo.fork && 'ubuntu-latest' || <self-hosted>` sends a job to the
self-hosted runner whenever `.fork` is not true, including when
`head.repo` is null (a deleted fork) or the field is missing. Select
self-hosted only for non-PR events or a PR whose head repo is this
repository; every other case gets ubuntu-latest.

Trace: skip

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KEjmjcVaTucsMZy5Fubas7
tools/check_selfhosted_fork_guard.py (same script as
bazel-file-ops-component#126, adapted from ordeal) fails on any
self-hosted runs-on without the fail-closed guard, on any self-hosted
job in a pull_request_target workflow (ordeal#322), and when it finds
no self-hosted job. It runs in the required-checks drift job, so no new
check name.

This tree: 9 self-hosted jobs, exit 0. Planted guarded job in a
pull_request_target workflow: exit 1.

Trace: skip

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KEjmjcVaTucsMZy5Fubas7
@github-actions

Copy link
Copy Markdown

📐 rivet artifact delta

PR: #241 Base SHA: 4edc93cd

Validation

head — `rivet validate` result
  SR-11 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-12 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-13 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-2 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-3 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-4 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-5 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-6 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-7 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-8 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-9 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SYS-1 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-2 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-3 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-4 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-5 (system-req, status: accepted) — missing: sys-integration-verification
  → run `rivet validate --explain SR-1` to see which link type and source types satisfy a gap

Result: PASS (199 warnings)
Schemas: common@0.4.0 (embedded), dev@0.6.0 (embedded), research@0.1.0 (embedded), research-ext@0.1.0 (on-disk), dev-ext@0.1.0 (on-disk), safety-case@0.1.0 (embedded), aspice@0.3.0 (embedded)
base — `rivet validate` result (for comparison)
  SR-11 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-12 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-13 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-2 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-3 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-4 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-5 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-6 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-7 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-8 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-9 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SYS-1 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-2 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-3 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-4 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-5 (system-req, status: accepted) — missing: sys-integration-verification
  → run `rivet validate --explain SR-1` to see which link type and source types satisfy a gap

Result: PASS (199 warnings)
Schemas: common@0.4.0 (embedded), dev@0.6.0 (embedded), research@0.1.0 (embedded), research-ext@0.1.0 (on-disk), dev-ext@0.1.0 (on-disk), safety-case@0.1.0 (embedded), aspice@0.3.0 (embedded)

Artifact stats

base head
Total artifacts 273 273
full stats — head
Artifact summary:
  academic-reference               24
  competitive-analysis             11
  design-decision                  23
  feature                         102
  market-finding                    7
  requirement                      21
  safety-context                    3
  safety-goal                       5
  safety-justification              4
  safety-solution                   6
  safety-strategy                   1
  stakeholder-req                   3
  sw-req                           13
  sw-verification                  13
  sys-verification                  5
  system-req                        5
  technology-evaluation            12
  verification                     15
  TOTAL                           273

Orphan artifacts (no links): 12
  CA-001
  CA-002
  CA-003
  CA-004
  CA-005
  CA-006
  CA-007
  CA-008
  CA-009
  CA-010
  CA-011
  FEAT-078

Diagnostics: 0 error(s), 199 warning(s), 11 info(s)

Diff (base → head)


0 added, 0 removed, 0 modified, 273 unchanged

AADL model — head

spar/scry.aadl: OK

Posted by the rivet-delta workflow. Informational only — does not gate the PR.

@avrabe
avrabe merged commit 75fd030 into main Nov 14, 2026
13 checks passed
@avrabe
avrabe deleted the ci/light-jobs-self-hosted branch November 14, 2026 16:47
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