Skip to content

QVAC-14347 infra: centralize CI runner labels in a shared catalog - #36

Open
GSServita wants to merge 1 commit into
masterfrom
infra/runner-label-catalog
Open

QVAC-14347 infra: centralize CI runner labels in a shared catalog#36
GSServita wants to merge 1 commit into
masterfrom
infra/runner-label-catalog

Conversation

@GSServita

Copy link
Copy Markdown

🎯 What problem does this PR solve?

  • The pinned Windows image (windows-2022) is hardcoded across build.yml's Windows jobs. A hosted-image migration (e.g. windows-2022windows-2025) means grepping and hand-editing every job, and it is easy to miss one.
  • This is the qvac-ext-stable-diffusion.cpp rollout of QVAC-14347's runner-label centralization (already landed in the monorepo, piloted on qvac-ext-ggml).

📝 How does it solve it?

  • Adds .github/runners.yaml as the single source of truth for specialized runner labels.
  • Generates .github/workflows/reusable-runner-names.yml (via .github/scripts/sync-runner-names.mjs) that exports each catalog entry as a job output. runs-on: evaluates before any step runs, so a reusable workflow's outputs are the only way to feed it a centrally-defined label.
  • Rewires build.yml's two Windows jobs to add a runner_names job and read runs-on: ${{ needs.runner_names.outputs.windows_2022 }}.
  • Rolling -latest aliases and matrix.os identities stay hardcoded — they are GitHub aliases / frozen logical identities, not fleet labels.
  • Adds runner-names-validate.yml + .github/scripts/validate-runner-names.mjs + unit tests that fail if the generated workflow drifts from the catalog or if a wired workflow hardcodes a catalog target. Docs: .github/RUNNERS.md.

🧪 How was it tested?

  • node .github/scripts/validate-runner-names.mjsok (1 target, 1 workflow)
  • node --test .github/scripts/test/runner-names.test.mjs → 9/9 pass
  • actionlint on the reusable + validate workflows → clean (the pre-existing actions/checkout@v3 / github-script@v3 warnings in build.yml are untouched by this PR and out of scope)

🛡️ Permissions changes

  • Scope: new runner_names caller job in build.yml, the new validate job in runner-names-validate.yml, and the reusable workflow reusable-runner-names.yml (top-level).
  • Before: n/a (new jobs / new workflow)
  • After: permissions: contents: read
  • Justification: least privilege — the export job needs nothing beyond read; the validate job only checks out and runs node.

Add .github/runners.yaml as the single source of truth for specialized CI runner labels, a generated reusable-runner-names workflow that exports them as job outputs, and sync/validate scripts with unit tests. Wire build.yml's Windows jobs to consume the output instead of hardcoding windows-2022. Rolling -latest aliases and matrix.os identities stay hardcoded.
@GSServita
GSServita requested review from a team as code owners September 1, 2026 15:01
@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown

Review Status

Current Status: ❌ PENDING
Approvals so far: none

Pending reviews: Needs 1 Management or Team Lead, and 1 more from Management, Team Lead, or Member.

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.

2 participants