From 6f14506dea571e5486dbdd2cdeef31d86de96e5e Mon Sep 17 00:00:00 2001 From: Aaron Elijah Mars <61592645+aaronjmars@users.noreply.github.com> Date: Fri, 16 Oct 2026 10:51:42 -0400 Subject: [PATCH] ci: run on Blacksmith runners Swap GitHub-hosted runner labels for Blacksmith (2 vCPU x64, 4 vCPU for the slowest build jobs). actions/cache and setup-* caches move to Blacksmith's colocated cache with no code change. --- .claude/skills/aeon/references/secrets.md | 1 + .github/workflows/aeon.yml | 2 +- .github/workflows/chain-runner.yml | 2 +- .github/workflows/ci-aeon-skill-sync.yml | 2 +- .github/workflows/ci-agents-md.yml | 2 +- .github/workflows/ci-apps.yml | 10 +++++----- .github/workflows/ci-capabilities-parity.yml | 2 +- .github/workflows/ci-gate.yml | 2 +- .github/workflows/ci-harness-cli.yml | 2 +- .github/workflows/ci-harnesses-json.yml | 2 +- .github/workflows/ci-packs-json.yml | 2 +- .github/workflows/ci-readme-catalog.yml | 2 +- .github/workflows/ci-shellcheck.yml | 2 +- .github/workflows/ci-skill-category.yml | 2 +- .github/workflows/ci-skill-integrity.yml | 2 +- .github/workflows/ci-skill-packs.yml | 2 +- .github/workflows/ci-skills-json.yml | 2 +- .github/workflows/ci-tests.yml | 6 +++--- .github/workflows/messages.yml | 6 +++--- .github/workflows/scheduler.yml | 2 +- .github/workflows/setup-commands.yml | 2 +- plugin/skills/aeon/references/secrets.md | 1 + 22 files changed, 30 insertions(+), 28 deletions(-) diff --git a/.claude/skills/aeon/references/secrets.md b/.claude/skills/aeon/references/secrets.md index 57e62e05d1a..216767b3d0b 100644 --- a/.claude/skills/aeon/references/secrets.md +++ b/.claude/skills/aeon/references/secrets.md @@ -122,6 +122,7 @@ Set with `gh variable set NAME "value"`. | `GLM_REASONING_EFFORT` | GLM gateway reasoning depth: `low` / `high` / `max` (default `high`) | | `STATE_BACKEND` | `file` (default) · `dual` · `issues` - where run state lives | | `HEALTH_ISSUES` | `0` disables the votable per-skill health Issues | +| `AEON_RUNNER` | Runner label for every workflow job (default `ubuntu-24.04`), e.g. `blacksmith-2vcpu-ubuntu-2404` | | `NOTIFY_MIN_SEVERITY` | Suppress notifications below this level | | `NOTIFY_EMAIL_FROM` | Default `aeon@notifications.aeon.bot` - **must be a Resend-verified sender** | | `NOTIFY_EMAIL_SUBJECT_PREFIX` | Default `[Aeon]` | diff --git a/.github/workflows/aeon.yml b/.github/workflows/aeon.yml index c78ee9f00a1..a47f483957a 100644 --- a/.github/workflows/aeon.yml +++ b/.github/workflows/aeon.yml @@ -166,7 +166,7 @@ concurrency: jobs: run: if: github.event_name != 'issues' || github.event.label.name == 'ai-build' - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} timeout-minutes: 50 steps: diff --git a/.github/workflows/chain-runner.yml b/.github/workflows/chain-runner.yml index 2176c1dfd91..42adb6a4f63 100644 --- a/.github/workflows/chain-runner.yml +++ b/.github/workflows/chain-runner.yml @@ -26,7 +26,7 @@ concurrency: jobs: run: - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} # Each step waits up to wait_for_runs' cap (60 min) for one aeon.yml run, and # dev-loop chains five of them back to back (feature, review, repair, # re-review, proof). 60 here killed any chain mid-wait; 360 is the hosted diff --git a/.github/workflows/ci-aeon-skill-sync.yml b/.github/workflows/ci-aeon-skill-sync.yml index 6cade89d7eb..89c71ed7ac8 100644 --- a/.github/workflows/ci-aeon-skill-sync.yml +++ b/.github/workflows/ci-aeon-skill-sync.yml @@ -36,7 +36,7 @@ concurrency: jobs: check: - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: .claude/skills/aeon and plugin/skills/aeon are in sync diff --git a/.github/workflows/ci-agents-md.yml b/.github/workflows/ci-agents-md.yml index 34c1bb403b8..95fd60ea542 100644 --- a/.github/workflows/ci-agents-md.yml +++ b/.github/workflows/ci-agents-md.yml @@ -38,7 +38,7 @@ concurrency: jobs: check: - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Check AGENTS.md is regenerated from STRATEGY.md diff --git a/.github/workflows/ci-apps.yml b/.github/workflows/ci-apps.yml index 245423b452c..df42086c31e 100644 --- a/.github/workflows/ci-apps.yml +++ b/.github/workflows/ci-apps.yml @@ -51,7 +51,7 @@ concurrency: jobs: format: name: format - biome - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 @@ -66,7 +66,7 @@ jobs: dashboard: name: dashboard — typecheck, test, build - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} defaults: run: working-directory: apps/dashboard @@ -94,7 +94,7 @@ jobs: cli: name: cli — typecheck - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 @@ -130,7 +130,7 @@ jobs: mcp-server: name: mcp-server — build - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} defaults: run: working-directory: apps/mcp-server @@ -156,7 +156,7 @@ jobs: webhook: name: webhook — worker bundle - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} defaults: run: working-directory: apps/webhook diff --git a/.github/workflows/ci-capabilities-parity.yml b/.github/workflows/ci-capabilities-parity.yml index 59494c0e243..04d492e4573 100644 --- a/.github/workflows/ci-capabilities-parity.yml +++ b/.github/workflows/ci-capabilities-parity.yml @@ -42,7 +42,7 @@ concurrency: jobs: check: - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Check capabilities taxonomy parity diff --git a/.github/workflows/ci-gate.yml b/.github/workflows/ci-gate.yml index 1c59794d1d2..b87d6cd1fbb 100644 --- a/.github/workflows/ci-gate.yml +++ b/.github/workflows/ci-gate.yml @@ -11,7 +11,7 @@ concurrency: jobs: # The job id `gate` is the required status check on main - do not rename it. gate: - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} timeout-minutes: 30 steps: - name: Require all CI checks to pass diff --git a/.github/workflows/ci-harness-cli.yml b/.github/workflows/ci-harness-cli.yml index 8e6743ef562..8cb56ddea1a 100644 --- a/.github/workflows/ci-harness-cli.yml +++ b/.github/workflows/ci-harness-cli.yml @@ -61,7 +61,7 @@ concurrency: jobs: smoke: name: smoke (${{ matrix.harness }}) - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} timeout-minutes: 15 strategy: fail-fast: false diff --git a/.github/workflows/ci-harnesses-json.yml b/.github/workflows/ci-harnesses-json.yml index ccd97df0bbb..22a57e71b1f 100644 --- a/.github/workflows/ci-harnesses-json.yml +++ b/.github/workflows/ci-harnesses-json.yml @@ -40,7 +40,7 @@ concurrency: jobs: check: - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Regenerate harnesses.json + gateways.json and diff (ignoring generated timestamp) diff --git a/.github/workflows/ci-packs-json.yml b/.github/workflows/ci-packs-json.yml index 03b3151ab41..52adabd2099 100644 --- a/.github/workflows/ci-packs-json.yml +++ b/.github/workflows/ci-packs-json.yml @@ -40,7 +40,7 @@ concurrency: jobs: check: - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Regenerate packs.json and diff (ignoring timestamp) diff --git a/.github/workflows/ci-readme-catalog.yml b/.github/workflows/ci-readme-catalog.yml index ca073a7103d..3658271aefc 100644 --- a/.github/workflows/ci-readme-catalog.yml +++ b/.github/workflows/ci-readme-catalog.yml @@ -60,7 +60,7 @@ concurrency: jobs: check: - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Validate the README skill tables against the first-party catalog diff --git a/.github/workflows/ci-shellcheck.yml b/.github/workflows/ci-shellcheck.yml index ea708a27375..2137b133b00 100644 --- a/.github/workflows/ci-shellcheck.yml +++ b/.github/workflows/ci-shellcheck.yml @@ -49,7 +49,7 @@ concurrency: jobs: shellcheck: name: shellcheck (error-severity gate) - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: shellcheck the tracked shell surface diff --git a/.github/workflows/ci-skill-category.yml b/.github/workflows/ci-skill-category.yml index 7b93bb8bddb..370effaf623 100644 --- a/.github/workflows/ci-skill-category.yml +++ b/.github/workflows/ci-skill-category.yml @@ -39,7 +39,7 @@ concurrency: jobs: check: - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Every SKILL.md declares a valid category diff --git a/.github/workflows/ci-skill-integrity.yml b/.github/workflows/ci-skill-integrity.yml index 2cf033c98fd..d6d394aefff 100644 --- a/.github/workflows/ci-skill-integrity.yml +++ b/.github/workflows/ci-skill-integrity.yml @@ -61,7 +61,7 @@ concurrency: jobs: verify: - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 # A skill added without regenerating the lockfile would otherwise be diff --git a/.github/workflows/ci-skill-packs.yml b/.github/workflows/ci-skill-packs.yml index 5d7c5034880..00534b41f8e 100644 --- a/.github/workflows/ci-skill-packs.yml +++ b/.github/workflows/ci-skill-packs.yml @@ -56,7 +56,7 @@ concurrency: jobs: check: - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Validate the community pack registry and its docs table parity diff --git a/.github/workflows/ci-skills-json.yml b/.github/workflows/ci-skills-json.yml index 7fd2d101b3a..e85b8f29e2b 100644 --- a/.github/workflows/ci-skills-json.yml +++ b/.github/workflows/ci-skills-json.yml @@ -63,7 +63,7 @@ concurrency: jobs: check: - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Regenerate skills.json and diff (ignoring timestamp + per-skill sha/updated) diff --git a/.github/workflows/ci-tests.yml b/.github/workflows/ci-tests.yml index 921c2636e4d..9287dce1b52 100644 --- a/.github/workflows/ci-tests.yml +++ b/.github/workflows/ci-tests.yml @@ -58,9 +58,9 @@ jobs: # Blacksmith, not GitHub: ~50 short serial test steps, so single-core speed # decides. Median job 51s vs 64.5s on GitHub's public 4 vCPU runner (queue 7s # vs 2s), live bwrap checks pass; Blacksmith 4 vCPU was no faster (50s). - # Bench: runs 38823788873 + 38825096928. Back to ubuntu-24.04 if Blacksmith - # is down, since this job gates every PR through CI Gate. - runs-on: blacksmith-2vcpu-ubuntu-2404 + # Bench: runs 38823788873 + 38825096928. The label comes from the + # AEON_RUNNER repo variable like every other job; unset = ubuntu-24.04. + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install deps diff --git a/.github/workflows/messages.yml b/.github/workflows/messages.yml index 119006b68e5..a653161f050 100644 --- a/.github/workflows/messages.yml +++ b/.github/workflows/messages.yml @@ -42,7 +42,7 @@ concurrency: jobs: poll: if: github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && inputs.message == '') || (github.event_name == 'repository_dispatch' && github.event.action == 'cron-tick') - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} timeout-minutes: 5 steps: @@ -289,7 +289,7 @@ jobs: # mirroring what the poller does inline. See scripts/telegram-route.sh. if: >- github.event_name == 'repository_dispatch' && contains(fromJSON('["telegram-command","telegram-callback","telegram-reply"]'), github.event.action) - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} timeout-minutes: 5 steps: - name: Checkout repo @@ -356,7 +356,7 @@ jobs: if: >- (github.event_name == 'repository_dispatch' && contains(fromJSON('["telegram-message","discord-message","slack-message"]'), github.event.action)) || (github.event_name == 'workflow_dispatch' && inputs.message != '') - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} timeout-minutes: 30 steps: diff --git a/.github/workflows/scheduler.yml b/.github/workflows/scheduler.yml index 08660f5cba8..9f26f1556d3 100644 --- a/.github/workflows/scheduler.yml +++ b/.github/workflows/scheduler.yml @@ -37,7 +37,7 @@ concurrency: jobs: schedule: - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} # 10 min: a big catch-up tick (many owed slots after a delivery gap) does one # gh call + a 1s spacer per dispatch and persists state once at the end, so a # 5-min cap could cancel it mid-way and lose every stamp (all re-fire). diff --git a/.github/workflows/setup-commands.yml b/.github/workflows/setup-commands.yml index 37aa312f5df..ccaa488ec87 100644 --- a/.github/workflows/setup-commands.yml +++ b/.github/workflows/setup-commands.yml @@ -24,7 +24,7 @@ permissions: jobs: setup: - runs-on: ubuntu-24.04 + runs-on: ${{ vars.AEON_RUNNER || 'ubuntu-24.04' }} timeout-minutes: 5 steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 diff --git a/plugin/skills/aeon/references/secrets.md b/plugin/skills/aeon/references/secrets.md index 57e62e05d1a..216767b3d0b 100644 --- a/plugin/skills/aeon/references/secrets.md +++ b/plugin/skills/aeon/references/secrets.md @@ -122,6 +122,7 @@ Set with `gh variable set NAME "value"`. | `GLM_REASONING_EFFORT` | GLM gateway reasoning depth: `low` / `high` / `max` (default `high`) | | `STATE_BACKEND` | `file` (default) · `dual` · `issues` - where run state lives | | `HEALTH_ISSUES` | `0` disables the votable per-skill health Issues | +| `AEON_RUNNER` | Runner label for every workflow job (default `ubuntu-24.04`), e.g. `blacksmith-2vcpu-ubuntu-2404` | | `NOTIFY_MIN_SEVERITY` | Suppress notifications below this level | | `NOTIFY_EMAIL_FROM` | Default `aeon@notifications.aeon.bot` - **must be a Resend-verified sender** | | `NOTIFY_EMAIL_SUBJECT_PREFIX` | Default `[Aeon]` |