From c8947561b3de122030131cab33376ee725c58c77 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 9 Aug 2026 11:24:32 +0200 Subject: [PATCH] feat(ci-check-app): run-label-light for jobs that never compile the workspace Formatting and Licenses inherited check-app's single run-label, so a consumer that sets a larger runner for the compile jobs (clippy, tests) pays the same 8x rate for jobs that cannot use it: `cargo fmt -- --check` only parses (the job's own comment notes it restores no cache for exactly this reason), and cargo-deny runs a prebuilt binary against cargo metadata. Measured in pay-core: the Check Formatting step is ~10s of rustfmt; the rest of the job is checkout + toolchain download, which is network-bound on any runner. Adds an optional `run-label-light` input (default ubuntu-latest) used by the Formatting and Licenses jobs, threaded through the ci.yml umbrella. Backward compatible: no consumer currently overrides these jobs' runner away from ubuntu-latest except pay-core, for which this is the fix (~$220/mo of larger- runner minutes across event_pr + event_release). Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/ci-check-app.yml | 8 ++++++-- .github/workflows/ci.yml | 5 +++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-check-app.yml b/.github/workflows/ci-check-app.yml index c1e0817..893e371 100644 --- a/.github/workflows/ci-check-app.yml +++ b/.github/workflows/ci-check-app.yml @@ -65,6 +65,10 @@ on: description: 'The run label to use for the actions' type: string default: 'ubuntu-latest' + run-label-light: + description: 'Runner for jobs that never compile the workspace (Formatting, Licenses). These jobs gain nothing from a larger runner: `cargo fmt -- --check` only parses, and cargo-deny runs a prebuilt binary against cargo metadata.' + type: string + default: 'ubuntu-latest' rust-cache-prefix: description: 'Prefix for Rust cache key (bump to invalidate all caches)' type: string @@ -115,7 +119,7 @@ jobs: formatting: name: Formatting - runs-on: ${{ inputs.run-label }} + runs-on: ${{ inputs.run-label-light }} steps: - name: Checkout uses: actions/checkout@v6 @@ -255,7 +259,7 @@ jobs: license: name: Licenses - runs-on: ${{ inputs.run-label }} + runs-on: ${{ inputs.run-label-light }} steps: - uses: actions/checkout@v6 with: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 20a7090..e13dbea 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -101,6 +101,10 @@ on: description: 'The run label to use for the actions' type: string default: 'ubuntu-latest' + run-label-light: + description: 'Runner for check-app jobs that never compile the workspace (Formatting, Licenses)' + type: string + default: 'ubuntu-latest' rust-cache-prefix: description: 'Prefix for Rust cache key (bump to invalidate all caches)' type: string @@ -141,6 +145,7 @@ jobs: use-postgresql: ${{ inputs.rust-use-postgresql }} test-env-vars: ${{ inputs.rust-test-env-vars }} run-label: ${{ inputs.run-label }} + run-label-light: ${{ inputs.run-label-light }} rust-cache-prefix: ${{ inputs.rust-cache-prefix }} rust-cache-save: ${{ inputs.rust-cache-save }}