From ca2154945b1b968ebac3a652cf281113aa31a427 Mon Sep 17 00:00:00 2001 From: OrcaWin Date: Tue, 27 Oct 2026 22:08:17 -0700 Subject: [PATCH] ci: run advisory e2e lanes on free hosted runners (#34725) The layout oracle merge gate keeps Blacksmith via fast_runners: true; the advisory e2e call, nightly schedule and layout-owner dispatch run on ubuntu-24.04. Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com> --- .github/workflows/e2e.yml | 18 ++++++++++++------ .github/workflows/pr.yml | 1 + config/scripts/pr-e2e-route-contracts.test.mjs | 7 ++++++- docs/readme/ci-runners.md | 3 ++- 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 25b5779a11c..e263d7046a8 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -45,6 +45,12 @@ on: type: string default: '' # Why: the app, orcad and its test template (--dark-test-template) build with it; releases refuse it. + # Why: only required gates pay for Blacksmith; advisory lanes run on free hosted runners. + fast_runners: + description: Run on Blacksmith instead of free GitHub-hosted runners + required: false + type: boolean + default: false layout_owner: description: Set to main to build with ORCA_LAYOUT_OWNER=main and record save-divergence reports required: false @@ -74,7 +80,7 @@ jobs: build: name: build e2e app if: inputs.test_files == '' || github.event_name != 'pull_request' || inputs.needs_build - runs-on: blacksmith-8vcpu-ubuntu-2404 + runs-on: ${{ inputs.fast_runners && 'blacksmith-8vcpu-ubuntu-2404' || 'ubuntu-24.04' }} timeout-minutes: 15 outputs: changed_e2e_shards: ${{ steps.changed-e2e-shards.outputs.shards }} @@ -223,7 +229,7 @@ jobs: name: e2e ${{ matrix.shard_name }} needs: [build] if: inputs.test_files == '' - runs-on: blacksmith-4vcpu-ubuntu-2404 + runs-on: ${{ inputs.fast_runners && 'blacksmith-4vcpu-ubuntu-2404' || 'ubuntu-24.04' }} timeout-minutes: 30 strategy: fail-fast: false @@ -339,7 +345,7 @@ jobs: name: changed e2e specs (${{ matrix.shard }}) needs: [build] if: inputs.test_files != '' && (github.event_name != 'pull_request' || inputs.run_changed_e2e) - runs-on: blacksmith-4vcpu-ubuntu-2404 + runs-on: ${{ inputs.fast_runners && 'blacksmith-4vcpu-ubuntu-2404' || 'ubuntu-24.04' }} timeout-minutes: 45 strategy: fail-fast: false @@ -470,7 +476,7 @@ jobs: ssh-browser-network-route: name: ssh browser network route if: inputs.test_files == '' || contains(inputs.test_files, 'tests/e2e/ssh-browser-network-execution-route.docker.unit.test.ts') - runs-on: blacksmith-4vcpu-ubuntu-2404 + runs-on: ${{ inputs.fast_runners && 'blacksmith-4vcpu-ubuntu-2404' || 'ubuntu-24.04' }} timeout-minutes: 15 steps: - uses: actions/checkout@v6 @@ -494,7 +500,7 @@ jobs: inputs.test_files == '' || contains(inputs.test_files, 'tests/e2e/orcad-serve-mode-switch.spec.ts') || contains(inputs.test_files, 'tests/e2e/workspace-layout-oracle-headless.spec.ts') - runs-on: blacksmith-4vcpu-ubuntu-2404 + runs-on: ${{ inputs.fast_runners && 'blacksmith-4vcpu-ubuntu-2404' || 'ubuntu-24.04' }} timeout-minutes: 45 env: ORCA_BACKGROUND_LAUNCH: '1' @@ -594,7 +600,7 @@ jobs: name: ssh on managed orcad (Docker ${{ matrix.shard }}) needs: [build] if: inputs.test_files == '' || contains(inputs.test_files, 'tests/e2e/ssh-orcad-') - runs-on: blacksmith-4vcpu-ubuntu-2404 + runs-on: ${{ inputs.fast_runners && 'blacksmith-4vcpu-ubuntu-2404' || 'ubuntu-24.04' }} timeout-minutes: 60 strategy: fail-fast: false diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index d76f7063a51..cf330430661 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -1452,6 +1452,7 @@ jobs: run_changed_e2e: true needs_build: true artifact_suffix: -layout-oracle + fast_runners: true # Keep native IME advisory while PR reliability is established (nightly 20/20, 2026-08-09..29, p50 3m25s); do not hide red via continue-on-error. To gate, add verify.needs, TERMINAL_IME_NATIVE env and separate success-or-skipped validation. terminal_ime_native: diff --git a/config/scripts/pr-e2e-route-contracts.test.mjs b/config/scripts/pr-e2e-route-contracts.test.mjs index 74b17ac471c..117600fba1c 100644 --- a/config/scripts/pr-e2e-route-contracts.test.mjs +++ b/config/scripts/pr-e2e-route-contracts.test.mjs @@ -268,6 +268,9 @@ describe('pr-e2e-layout-oracle-routing', () => { // Two calls of the reusable workflow in one run must not share artifact names. expect(prWorkflow.jobs.layout_oracle.with.artifact_suffix).toBeTruthy() expect(prWorkflow.jobs.e2e.with.artifact_suffix).toBeUndefined() + // The merge gate keeps Blacksmith speed; the advisory lane runs free. + expect(prWorkflow.jobs.layout_oracle.with.fast_runners).toBe(true) + expect(prWorkflow.jobs.e2e.with.fast_runners).toBeUndefined() }) }) }) @@ -284,7 +287,9 @@ describe('ssh-browser-e2e-routing', () => { const run = job.steps.find( (step) => step.name === 'Run Docker SSH browser network route journeys' ) - expect(job['runs-on']).toBe('blacksmith-4vcpu-ubuntu-2404') + expect(job['runs-on']).toBe( + "${{ inputs.fast_runners && 'blacksmith-4vcpu-ubuntu-2404' || 'ubuntu-24.04' }}" + ) expect(job.if).toContain("inputs.test_files == ''") expect(job.if).toContain(spec) expect(install.with['native-runtime']).toBe('node') diff --git a/docs/readme/ci-runners.md b/docs/readme/ci-runners.md index 4ec372a43e9..c6dd386389b 100644 --- a/docs/readme/ci-runners.md +++ b/docs/readme/ci-runners.md @@ -3,7 +3,8 @@ Default to free GitHub-hosted standard runners: the repository is public and the Enterprise plan allows 500 concurrent jobs (50 macOS). Use Blacksmith only for: -- PR critical-path jobs: unit test shards, preflight and typecheck, and `e2e.yml`. +- PR critical-path jobs: unit test shards, preflight and typecheck, and the layout + oracle gate (`e2e.yml` with `fast_runners: true`). Advisory e2e lanes run hosted. - `pr.yml` Git compatibility: its parallel real-Git lanes, two through Docker, exceed test timeouts on 4-vCPU hosted runners. - macOS packaging: adhoc, hourly, daily and `release-mac-build.yml`. Hosted