ci: run hourly and daily dev builds on free hosted runners (#34585)

Hourly and daily builds publish unvetted dev channels on a schedule, so their
latency is not user-facing. Move the macOS build to hosted macos-15, the
Windows build to hosted windows-2022 (the release path), template
qualification to hosted lanes, and the small routing/publish jobs to
ubuntu-latest. Adhoc and release builds stay on Blacksmith.

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
OrcaWin
2026-10-27 16:02:46 -07:00
committed by GitHub
co-authored by OrcaWin Claude
parent eb7f4d9c31
commit f4d98b74e3
6 changed files with 14 additions and 13 deletions
+5 -5
View File
@@ -30,7 +30,7 @@ jobs:
# Why: the app and the orcad template it ships must come from one commit, so resolve main once.
resolve-main:
if: github.repository == 'stablyai/orca'
runs-on: blacksmith-2vcpu-ubuntu-2404
runs-on: ubuntu-latest
timeout-minutes: 5
outputs:
head_sha: ${{ steps.resolve.outputs.head_sha }}
@@ -56,7 +56,7 @@ jobs:
with:
ref: ${{ needs.resolve-main.outputs.head_sha }}
build_template: true
fast_runners: true
fast_runners: false
build-daily-mac:
needs:
@@ -68,7 +68,7 @@ jobs:
version: ${{ steps.daily.outputs.version }}
head_sha: ${{ steps.freshness.outputs.head_sha }}
published: ${{ steps.publish_live.outcome == 'success' && 'true' || 'false' }}
runs-on: blacksmith-6vcpu-macos-15
runs-on: macos-15
# Allow 150min for install 3×10 + publish 2×45 + ~25 setup/build/verify, so outer timeout cannot strand cleanup mid-retry.
timeout-minutes: 150
env:
@@ -427,7 +427,7 @@ jobs:
post-daily-e2e:
needs: build-daily-mac
if: ${{ needs.build-daily-mac.outputs.published == 'true' && needs.build-daily-mac.outputs.head_sha != '' }}
runs-on: blacksmith-2vcpu-ubuntu-2404
runs-on: ubuntu-latest
permissions:
actions: write
steps:
@@ -464,4 +464,4 @@ jobs:
ref: ${{ needs.build-daily-mac.outputs.head_sha }}
version: ${{ needs.build-daily-mac.outputs.version }}
orcad_template: true
fast_release: true
fast_release: false
@@ -28,7 +28,7 @@ jobs:
publish-win:
if: github.repository == 'stablyai/orca'
environment: adhoc-mac-build
runs-on: blacksmith-2vcpu-ubuntu-2404
runs-on: ubuntu-latest
timeout-minutes: 165
env:
CHANNEL: ${{ inputs.channel }}
+4 -4
View File
@@ -30,7 +30,7 @@ jobs:
# Avoid occupying the limited Mac pool when main has not moved.
preflight:
if: github.repository == 'stablyai/orca'
runs-on: blacksmith-2vcpu-ubuntu-2404
runs-on: ubuntu-latest
timeout-minutes: 5
outputs:
should_build: ${{ steps.freshness.outputs.should_build }}
@@ -92,7 +92,7 @@ jobs:
with:
ref: ${{ needs.preflight.outputs.head_sha }}
build_template: true
fast_runners: true
fast_runners: false
build-hourly-mac:
needs:
@@ -104,7 +104,7 @@ jobs:
version: ${{ steps.hourly.outputs.version }}
head_sha: ${{ needs.preflight.outputs.head_sha }}
published: ${{ steps.publish_live.outcome == 'success' && 'true' || 'false' }}
runs-on: blacksmith-6vcpu-macos-15
runs-on: macos-15
# Allow 150min for install 3×10 + publish 2×45 + ~25 setup/build/verify; outer timeout otherwise interrupts cleanup.
timeout-minutes: 150
env:
@@ -402,4 +402,4 @@ jobs:
ref: ${{ needs.build-hourly-mac.outputs.head_sha }}
version: ${{ needs.build-hourly-mac.outputs.version }}
orcad_template: true
fast_release: true
fast_release: false
@@ -35,7 +35,7 @@ describe.each(channels)('$name build ships the orcad template', (channel) => {
expect(template.with).toEqual({
ref: channel.pinnedSha,
build_template: true,
fast_runners: true
fast_runners: false
})
expect(template.permissions).toEqual({ contents: 'read', actions: 'read' })
expect(template.secrets).toBeUndefined()
@@ -57,7 +57,7 @@ async function checkFreshness(overrides = {}) {
describe('hourly build preflight', () => {
it('gates Mac allocation and pins the checkout and downstream identity', () => {
const build = workflow.jobs['build-hourly-mac']
expect(preflight['runs-on']).toBe('blacksmith-2vcpu-ubuntu-2404')
expect(preflight['runs-on']).toBe('ubuntu-latest')
expect(preflight.steps.some((step) => step.uses?.startsWith('actions/checkout'))).toBe(false)
expect(
preflight.steps.find((step) => step.id === 'app_token').with['permission-contents']
@@ -88,7 +88,8 @@ describe('macOS build workflow policy', () => {
job.steps?.some((step) => step.with?.command?.includes('electron-builder --config'))
)
expect(job['runs-on']).toBe(
channel === 'adhoc' ? 'blacksmith-12vcpu-macos-15' : 'blacksmith-6vcpu-macos-15'
{ adhoc: 'blacksmith-12vcpu-macos-15', release: 'blacksmith-6vcpu-macos-15' }[channel] ??
'macos-15'
)
const step = job.steps.find((step) =>
step.with?.command?.includes('electron-builder --config')