Repository navigation
ci: read custom runner labels from repo variables - #3573
Conversation
The E2E and image-build jobs run on org-level larger runners that don't move with the repo. Reading the labels from repo variables, defaulting to today's labels, lets us point them at whatever runners the new org has without a PR on transfer day. E2E_WORKERS is passed through so a smaller E2E runner can drop the Playwright worker count the same way.
|
🔴 Tier 4 — CriticalTouches authentication, tenancy data models, the public API or shipped database config — or substantially changes the query rendering engine, background tasks, the OTel pipeline, image build, or release CI. Why this tier:
Review process: Deep review from a domain expert. Synchronous walkthrough may be required. Stats
|
PR Review✅ No issues found. |
Duplicate code analysisNo new duplicate code introduced by this PR. jscpd compared this branch against |
Deep Review✅ No critical issues found. This is a CI-only change making GitHub Actions runner labels configurable via repo variables with fallback to the current hardcoded labels. The 🟡 P2 -- recommended
🔵 P3 nitpicks (1)
Reviewers (3): correctness, reliability, project-standards. Testing gaps:
No finding blocks merge automatically. A maintainer will expect P0/P1 findings in code this PR changes to be fixed; P2/P3 are your call -- fix or reply. Never fix findings about surrounding code here; reply instead. Do not widen the PR. How to respond |
E2E Test Results✅ All tests passed • 462 passed • 1 skipped • 1440s
Tests ran across 4 shards in parallel. |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Self-hosted runners in the ClickHouse org are targeted by label sets like [dataplane, self-hosted, linux, x64, xlarge], which a single-label variable can't express. The variables now hold JSON: a quoted label or an array.
fromJSON on a plain label like 8-core-playwright errors, so the E2E jobs were never created once the variables were set without quotes. Parse the value as JSON only when it is an array.
Summary
E2E and the image-build jobs run on org-level larger runners (
8-core-playwright,Large-Runner-x64-32,Large-Runner-ARM64-32,ubuntu-latest-arm64). Those don't move with the repo when it transfers to the ClickHouse org. If nothing in the new org has those labels, the jobs don't fail; they sit queued waiting for a runner.This reads each label from a repo variable and falls back to today's label, so nothing changes until a variable is set. A value is either a plain label (
ubuntu-24.04) or a JSON array of labels (["self-hosted","linux","x64"]), so the variables can also target self-hosted runners that are selected by a label set. On transfer day we can point the jobs at whatever runners ClickHouse has, or at standard GitHub runners, from Settings → Secrets and variables → Actions → Variables, without a PR.RUNNER_E2E8-core-playwrighte2e-tests.yml(every PR)RUNNER_LARGE_X64Large-Runner-x64-32release.yml,release-nightly.ymlRUNNER_LARGE_ARM64Large-Runner-ARM64-32release.yml,release-nightly.ymlRUNNER_ARM64ubuntu-latest-arm64release.yml,release-nightly.ymlE2E_WORKERSe2e-tests.ymlE2E_WORKERSis already read byplaywright.config.ts. It's passed through because 4 workers timed out on the 4-vCPU runner before; set it to2ifRUNNER_E2Epoints at a smaller machine.Standard-runner fallback:
RUNNER_E2E=ubuntu-24.04+E2E_WORKERS=2,RUNNER_LARGE_X64=ubuntu-24.04,RUNNER_LARGE_ARM64=ubuntu-24.04-arm,RUNNER_ARM64=ubuntu-24.04-arm. Image builds will be slower.No changeset: CI only.
How to reproduce
8-core-playwrightas before (check the "Set up job" log for the runner name).RUNNER_E2E=ubuntu-24.04andE2E_WORKERS=2, re-run E2E, and confirm it picks up the standard runner and 2 workers. Unset both afterwards.Not run: actionlint. I checked that the YAML parses and passes Prettier.
varsis a documented context for bothruns-onandstrategy; the first CI run on this PR confirms the E2E path, and the release paths only run onmain/nightly.🤖 Generated with Claude Code