From 854ce72c470809750b4b140ab88ee8d33ebada50 Mon Sep 17 00:00:00 2001 From: sprooty Date: Wed, 19 Aug 2026 03:47:47 +0000 Subject: [PATCH] ci: select runners by capability, not by location MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `runs-on` named `node-b`, `linux` and `x64`. The last two are advertised by every self-hosted runner and selected nothing. `node-b` is a *location*, and using it as a fleet selector is why proxmox-gha-public-rust and wsl2-gha-public-rust sat idle — both `busy: false` — while all three Node B workers were busy and jobs queued behind them at a p90 of 207s and a p99 of 1153s (2026-08-19 development-cycle review). Labels now name capabilities only. Jobs that need a Docker daemon keep `docker`/`publish`, which only the DinD-backed workers advertise; jobs needing Tailnet reachability keep `tailnet`. Every job in this repository was checked for Docker use before its label was dropped. The org policy gate is unaffected: it requires the literal `self-hosted` and rejects dynamic `runs-on`, both of which still hold. --- .github/workflows/build-deploy.yml | 4 ++-- .github/workflows/ci.yml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-deploy.yml b/.github/workflows/build-deploy.yml index ba74ca4..5c3259e 100644 --- a/.github/workflows/build-deploy.yml +++ b/.github/workflows/build-deploy.yml @@ -39,7 +39,7 @@ env: jobs: test-build-push: - runs-on: [self-hosted, node-b, linux, x64, docker, publish] + runs-on: [self-hosted, publish] steps: - uses: actions/checkout@v5 @@ -74,7 +74,7 @@ jobs: deploy: needs: test-build-push - runs-on: [self-hosted, node-b, linux, x64] + runs-on: [self-hosted] steps: - name: Bump the ops compose tag and trigger Komodo env: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6540d15..2e6a1b1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ jobs: # request forever, which is worse than running it. So the jobs always run and # always report; what changes is whether they do the expensive part. changes: - runs-on: [self-hosted, node-b, linux, x64] + runs-on: [self-hosted] outputs: code: ${{ steps.filter.outputs.code }} steps: @@ -47,7 +47,7 @@ jobs: lint: needs: changes - runs-on: [self-hosted, node-b, linux, x64] + runs-on: [self-hosted] steps: - uses: actions/checkout@v5 if: needs.changes.outputs.code == 'true' @@ -68,7 +68,7 @@ jobs: test: needs: changes - runs-on: [self-hosted, node-b, linux, x64] + runs-on: [self-hosted] steps: - uses: actions/checkout@v5 if: needs.changes.outputs.code == 'true'