ci: run off-critical-path PR jobs on free GitHub-hosted runners (#34566)

Keep preflight and the unit-test matrix (the PR critical path) on Blacksmith; move routing, aggregation, contract, packaging and mobile checks to hosted standard runners, which are free for public repos under Enterprise concurrency.

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
This commit is contained in:
OrcaWin
2026-10-27 15:19:23 -07:00
committed by GitHub
co-authored by OrcaWin
parent f3adb8f85a
commit 9cc555e2de
8 changed files with 21 additions and 22 deletions
+2 -2
View File
@@ -105,7 +105,7 @@ jobs:
name: Mobile verify
if: github.event_name == 'pull_request' && github.event.pull_request.draft != true
# Use ARM for pure Vitest; no x86 native toolchain is needed and Gemfile.lock’s ruby platform supports frozen install.
runs-on: blacksmith-4vcpu-ubuntu-2404-arm
runs-on: ubuntu-24.04-arm
env:
# Freeze bundler to reject Gemfile drift before release jobs resolve different fastlane versions.
@@ -240,7 +240,7 @@ jobs:
native-fingerprint:
name: Mobile native fingerprint
if: github.event_name == 'pull_request' && github.event.pull_request.draft != true
runs-on: blacksmith-2vcpu-ubuntu-2404
runs-on: ubuntu-24.04
timeout-minutes: 15
continue-on-error: true
+1 -1
View File
@@ -19,7 +19,7 @@ jobs:
loc:
name: test vs non-test LoC
# API calls and a small Node script fit the free single-CPU container runner.
runs-on: blacksmith-2vcpu-ubuntu-2404
runs-on: ubuntu-slim
timeout-minutes: 2
steps:
# Read file counts through API without checkout; execute only default-branch scripts because GITHUB_TOKEN has write scope. PR edits take effect after merge.
+12 -13
View File
@@ -22,8 +22,8 @@ jobs:
code_paths:
if: github.event_name != 'pull_request' || github.event.pull_request.draft != true
name: detect changes and check repository guards
# Start routing without waiting behind the GitHub-hosted test queue.
runs-on: blacksmith-2vcpu-ubuntu-2404
# Hosted runners start faster than Blacksmith's (~5s vs ~13s) and this sparse checkout fits one vCPU.
runs-on: ubuntu-slim
timeout-minutes: 5
permissions:
contents: read
@@ -579,7 +579,7 @@ jobs:
needs.code_paths.result == 'success' &&
needs.code_paths.outputs.git_compatibility == 'true' &&
needs.preflight.result == 'success'
runs-on: blacksmith-4vcpu-ubuntu-2404
runs-on: ubuntu-24.04
steps:
- name: Checkout
@@ -645,7 +645,7 @@ jobs:
needs.code_paths.outputs.codex_index_heal_contract == 'true' &&
needs.preflight.result == 'success'
# Why ARM: @openai/codex ships @openai/codex-linux-arm64.
runs-on: blacksmith-4vcpu-ubuntu-2404-arm
runs-on: ubuntu-24.04-arm
env:
CODEX_CLI_VERSION: '0.150.1'
# Why a second pin: --no-daemon only exists from 0.156, and Orca's codex wrapper relies on it.
@@ -740,7 +740,7 @@ jobs:
needs.code_paths.outputs.xterm_patch_sync == 'true' &&
needs.preflight.result == 'success'
# Use ARM for four-package pristine/patched rebuild byte comparison: output generated on Linux x64 reproduces on darwin-arm64.
runs-on: blacksmith-4vcpu-ubuntu-2404-arm
runs-on: ubuntu-24.04-arm
steps:
- name: Checkout
@@ -772,7 +772,7 @@ jobs:
needs.code_paths.outputs.shell_contracts == 'true' &&
needs.preflight.result == 'success'
# Exercise Linux ARM with the standalone aarch64 release and Ubuntu's zsh.
runs-on: blacksmith-4vcpu-ubuntu-2404-arm
runs-on: ubuntu-24.04-arm
# Bound stalled prerequisite downloads instead of waiting for GitHub's 6-hour default.
timeout-minutes: 15
env:
@@ -901,7 +901,7 @@ jobs:
name: mobile web app bundle
needs: [code_paths]
if: needs.code_paths.outputs.mobile_web_app == 'true'
runs-on: blacksmith-8vcpu-ubuntu-2404
runs-on: ubuntu-24.04
steps:
- name: Checkout
@@ -969,7 +969,7 @@ jobs:
needs.code_paths.outputs.cross-version-wire == 'true' &&
needs.preflight.result == 'success'
# Why ARM: source-only: tagged checkout plus in-process vitest, no docker or browser.
runs-on: blacksmith-4vcpu-ubuntu-2404-arm
runs-on: ubuntu-24.04-arm
steps:
# Fetch tags/full history for newest-release skew; shallow unit shards cannot supply it.
@@ -1012,7 +1012,7 @@ jobs:
needs.code_paths.outputs.managed_hook_node18 == 'true' &&
needs.preflight.result == 'success'
# Retain the required check while sharing preflight's checkout and built packages.
runs-on: blacksmith-2vcpu-ubuntu-2404
runs-on: ubuntu-slim
timeout-minutes: 5
steps:
@@ -1029,7 +1029,7 @@ jobs:
name: package
needs: [code_paths, preflight]
if: needs.code_paths.outputs.package == 'true'
runs-on: blacksmith-4vcpu-ubuntu-2404
runs-on: ubuntu-24.04
# Let the serial Docker gates reach their own deadlines and report cleanup failures.
timeout-minutes: 90
@@ -1460,7 +1460,7 @@ jobs:
!cancelled() &&
needs.code_paths.result == 'success' &&
needs.code_paths.outputs.dependency_isolation == 'true'
runs-on: blacksmith-4vcpu-ubuntu-2404
runs-on: ubuntu-24.04
timeout-minutes: 30
env:
ORCA_PNPM_FORCE_GLOBAL_VIRTUAL_STORE_IN_CI: '1'
@@ -1527,8 +1527,7 @@ jobs:
- package_windows
- layout_oracle
- dependency_isolation
# Report settled results without competing with the GitHub-hosted test queue.
runs-on: blacksmith-2vcpu-ubuntu-2204
runs-on: ubuntu-slim
timeout-minutes: 5
steps:
+1 -1
View File
@@ -20,7 +20,7 @@ permissions:
jobs:
plan:
runs-on: blacksmith-2vcpu-ubuntu-2404
runs-on: ubuntu-24.04
timeout-minutes: 5
outputs:
shards: ${{ steps.plan.outputs.shards }}
@@ -11,7 +11,7 @@ jobs:
selection_evidence:
if: ${{ !cancelled() }}
continue-on-error: true
runs-on: blacksmith-2vcpu-ubuntu-2404
runs-on: ubuntu-slim
steps:
- uses: actions/checkout@v6
with:
@@ -490,7 +490,7 @@ describe('CI dependency download caches', () => {
)
const linux = release.strategy.matrix.include.find((entry) => entry.platform === 'linux-x64')
expect([linux.os, 'blacksmith-4vcpu-ubuntu-2404']).toContain(packaging['runs-on'])
expect([linux.os, 'ubuntu-24.04']).toContain(packaging['runs-on'])
expect(writer.if).toBe("matrix.platform == 'linux-x64' && github.ref == 'refs/heads/main'")
expect(writer.uses).toBe('actions/cache@v5')
expect(writer.with.path).toBe(consumer.with.path)
+1 -1
View File
@@ -361,7 +361,7 @@ it('runs the unchanged Node 18 smoke after every Node 24 step and preserves its
expect(joined, background.id).toBeLessThan(steps.indexOf(smoke))
}
expect(receipt.name).toBe('managed hooks on Node 18')
expect(receipt['runs-on']).toBe('blacksmith-2vcpu-ubuntu-2404')
expect(receipt['runs-on']).toBe('ubuntu-slim')
expect(receipt.steps).toHaveLength(1)
expect(receipt.steps[0].uses).toBeUndefined()
expect(receipt.steps[0].env.MANAGED_HOOK_NODE18).toBe(
+2 -2
View File
@@ -245,8 +245,8 @@ describe('PR test LoC summary', () => {
expect(result.stderr).toContain('--from-pr')
})
it('is a no-checkout PR workflow on an ephemeral Blacksmith runner', () => {
expect(locJob['runs-on']).toBe('blacksmith-2vcpu-ubuntu-2404')
it('is a no-checkout PR workflow on the single-CPU hosted runner', () => {
expect(locJob['runs-on']).toBe('ubuntu-slim')
expect(locJob.steps).toHaveLength(1)
expect(locStep.run).toContain('gh api')
expect(locStep.run).toContain('pr-test-loc-table.mjs')