From be95ad1b257054f4bc53f8080008f548944f5ed3 Mon Sep 17 00:00:00 2001 From: Zeke Foppa Date: Thu, 24 Sep 2026 13:27:54 -0700 Subject: [PATCH 1/3] [bfops/ci-warm]: CI - cache warm subcommand --- Cargo.lock | 10 ++++++++++ Cargo.toml | 1 + tools/ci/src/main.rs | 4 ++++ 3 files changed, 15 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index a297e69263d..d9acc3528f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -930,6 +930,16 @@ dependencies = [ "duct", ] +[[package]] +name = "ci-cache-warm" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap 4.5.50", + "duct", + "tempfile", +] + [[package]] name = "ci-check-release-deps" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index e679f9d8c4a..6a139819c5c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -88,6 +88,7 @@ members = [ "tools/ci/commands/workflow-coordinator", "tools/ci/commands/workflow-watch", "tools/ci/commands/check-release-deps", + "tools/ci/commands/cache-warm", "tools/ci/common", "tools/keynote-bench-harness", "tools/license-check", diff --git a/tools/ci/src/main.rs b/tools/ci/src/main.rs index 4859363bc7c..ff70d345031 100644 --- a/tools/ci/src/main.rs +++ b/tools/ci/src/main.rs @@ -88,6 +88,10 @@ const COMMANDS: &[Command] = &[ path: &["other-workflows", "check-release-deps"], package: "ci-check-release-deps", }, + Command { + path: &["other-workflows", "cache-warm"], + package: "ci-cache-warm", + }, ]; fn print_help() { From bdee714a05181367e3d977385aeef91caa8a71ab Mon Sep 17 00:00:00 2001 From: Zeke Foppa Date: Fri, 25 Sep 2026 14:38:31 -0700 Subject: [PATCH 2/3] [bfops/ci-warm]: Run Linux CI jobs on staging fleet --- .github/workflows/ci.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c2cd75fb205..04c606fb2bf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -95,7 +95,7 @@ jobs: needs: [merge_queue_noop, lints] if: ${{ needs.merge_queue_noop.outputs.skip != 'true' }} name: Upload build artifacts (Linux) - runs-on: spacetimedb-linux + runs-on: spacetimedb-new-runner-2-staging timeout-minutes: 15 env: RUST_BACKTRACE: full @@ -295,7 +295,7 @@ jobs: smoketest_build_linux: needs: [upload-build-artifacts-linux] name: Build smoketests (Linux) - runs-on: spacetimedb-linux + runs-on: spacetimedb-new-runner-2-staging timeout-minutes: 15 env: RUST_BACKTRACE: full @@ -386,7 +386,7 @@ jobs: fail-fast: false matrix: partition: [1] - runs-on: spacetimedb-linux + runs-on: spacetimedb-new-runner-2-staging timeout-minutes: 30 env: RUST_BACKTRACE: full @@ -579,7 +579,7 @@ jobs: needs: [merge_queue_noop, lints, upload-build-artifacts-linux] if: ${{ needs.merge_queue_noop.outputs.skip != 'true' }} name: Test Suite - runs-on: spacetimedb-linux + runs-on: spacetimedb-new-runner-2-staging env: RUST_BACKTRACE: full @@ -725,7 +725,7 @@ jobs: needs: [merge_queue_noop] if: ${{ needs.merge_queue_noop.outputs.skip != 'true' }} name: Lints - runs-on: spacetimedb-linux + runs-on: spacetimedb-new-runner-2-staging env: RUST_BACKTRACE: full steps: @@ -807,7 +807,7 @@ jobs: needs: [merge_queue_noop, upload-build-artifacts-linux] if: ${{ needs.merge_queue_noop.outputs.skip != 'true' }} name: Build and test wasm bindings - runs-on: spacetimedb-linux + runs-on: spacetimedb-new-runner-2-staging env: RUST_BACKTRACE: full ARTIFACT_SUFFIX: linux @@ -928,7 +928,7 @@ jobs: name: Unreal Engine Tests # This can't go on e.g. ubuntu-latest because that runner runs out of disk space. ChatGPT suggested that the general solution tends to be to use # a custom runner. - runs-on: spacetimedb-linux + runs-on: spacetimedb-new-runner-2-staging # Disable the tests because they are very flaky at the moment. # TODO: Remove this line and re-enable the `if` line just below here. if: false @@ -1025,7 +1025,7 @@ jobs: if: ${{ needs.merge_queue_noop.outputs.skip != 'true' }} name: Check CLI docs permissions: read-all - runs-on: spacetimedb-linux + runs-on: spacetimedb-new-runner-2-staging env: RUST_BACKTRACE: full steps: @@ -1281,7 +1281,7 @@ jobs: permissions: contents: read # The .NET packaging, Godot project build, and integration test make this too heavy for a small runner. - runs-on: spacetimedb-linux + runs-on: spacetimedb-new-runner-2-staging env: ARTIFACT_SUFFIX: linux UseLocalBsatnRuntime: true @@ -1384,7 +1384,7 @@ jobs: needs: [merge_queue_noop, lints, upload-build-artifacts-linux] if: ${{ needs.merge_queue_noop.outputs.skip != 'true' }} # The C# SDK build and tests saturated the small runner's CPU, so keep this on the main runner. - runs-on: spacetimedb-linux + runs-on: spacetimedb-new-runner-2-staging timeout-minutes: 30 env: RUST_BACKTRACE: full @@ -1584,7 +1584,7 @@ jobs: if: ${{ needs.merge_queue_noop.outputs.skip != 'true' }} name: Docs build # Building the documentation site nearly saturated a small runner and used substantial memory. - runs-on: spacetimedb-linux + runs-on: spacetimedb-new-runner-2-staging env: RUST_BACKTRACE: full steps: @@ -1624,7 +1624,7 @@ jobs: needs: [merge_queue_noop, upload-build-artifacts-linux] if: ${{ needs.merge_queue_noop.outputs.skip != 'true' }} name: TypeScript - Tests - runs-on: spacetimedb-linux + runs-on: spacetimedb-new-runner-2-staging env: RUST_BACKTRACE: full ARTIFACT_SUFFIX: linux From 1ef48c1d98a366f336bee2dbd69ae14b552cf7da Mon Sep 17 00:00:00 2001 From: Zeke Foppa Date: Sat, 26 Sep 2026 05:21:06 -0700 Subject: [PATCH 3/3] [bfops/ci-warm]: ci: restore production Linux runners --- .github/workflows/ci.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 04c606fb2bf..c2cd75fb205 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -95,7 +95,7 @@ jobs: needs: [merge_queue_noop, lints] if: ${{ needs.merge_queue_noop.outputs.skip != 'true' }} name: Upload build artifacts (Linux) - runs-on: spacetimedb-new-runner-2-staging + runs-on: spacetimedb-linux timeout-minutes: 15 env: RUST_BACKTRACE: full @@ -295,7 +295,7 @@ jobs: smoketest_build_linux: needs: [upload-build-artifacts-linux] name: Build smoketests (Linux) - runs-on: spacetimedb-new-runner-2-staging + runs-on: spacetimedb-linux timeout-minutes: 15 env: RUST_BACKTRACE: full @@ -386,7 +386,7 @@ jobs: fail-fast: false matrix: partition: [1] - runs-on: spacetimedb-new-runner-2-staging + runs-on: spacetimedb-linux timeout-minutes: 30 env: RUST_BACKTRACE: full @@ -579,7 +579,7 @@ jobs: needs: [merge_queue_noop, lints, upload-build-artifacts-linux] if: ${{ needs.merge_queue_noop.outputs.skip != 'true' }} name: Test Suite - runs-on: spacetimedb-new-runner-2-staging + runs-on: spacetimedb-linux env: RUST_BACKTRACE: full @@ -725,7 +725,7 @@ jobs: needs: [merge_queue_noop] if: ${{ needs.merge_queue_noop.outputs.skip != 'true' }} name: Lints - runs-on: spacetimedb-new-runner-2-staging + runs-on: spacetimedb-linux env: RUST_BACKTRACE: full steps: @@ -807,7 +807,7 @@ jobs: needs: [merge_queue_noop, upload-build-artifacts-linux] if: ${{ needs.merge_queue_noop.outputs.skip != 'true' }} name: Build and test wasm bindings - runs-on: spacetimedb-new-runner-2-staging + runs-on: spacetimedb-linux env: RUST_BACKTRACE: full ARTIFACT_SUFFIX: linux @@ -928,7 +928,7 @@ jobs: name: Unreal Engine Tests # This can't go on e.g. ubuntu-latest because that runner runs out of disk space. ChatGPT suggested that the general solution tends to be to use # a custom runner. - runs-on: spacetimedb-new-runner-2-staging + runs-on: spacetimedb-linux # Disable the tests because they are very flaky at the moment. # TODO: Remove this line and re-enable the `if` line just below here. if: false @@ -1025,7 +1025,7 @@ jobs: if: ${{ needs.merge_queue_noop.outputs.skip != 'true' }} name: Check CLI docs permissions: read-all - runs-on: spacetimedb-new-runner-2-staging + runs-on: spacetimedb-linux env: RUST_BACKTRACE: full steps: @@ -1281,7 +1281,7 @@ jobs: permissions: contents: read # The .NET packaging, Godot project build, and integration test make this too heavy for a small runner. - runs-on: spacetimedb-new-runner-2-staging + runs-on: spacetimedb-linux env: ARTIFACT_SUFFIX: linux UseLocalBsatnRuntime: true @@ -1384,7 +1384,7 @@ jobs: needs: [merge_queue_noop, lints, upload-build-artifacts-linux] if: ${{ needs.merge_queue_noop.outputs.skip != 'true' }} # The C# SDK build and tests saturated the small runner's CPU, so keep this on the main runner. - runs-on: spacetimedb-new-runner-2-staging + runs-on: spacetimedb-linux timeout-minutes: 30 env: RUST_BACKTRACE: full @@ -1584,7 +1584,7 @@ jobs: if: ${{ needs.merge_queue_noop.outputs.skip != 'true' }} name: Docs build # Building the documentation site nearly saturated a small runner and used substantial memory. - runs-on: spacetimedb-new-runner-2-staging + runs-on: spacetimedb-linux env: RUST_BACKTRACE: full steps: @@ -1624,7 +1624,7 @@ jobs: needs: [merge_queue_noop, upload-build-artifacts-linux] if: ${{ needs.merge_queue_noop.outputs.skip != 'true' }} name: TypeScript - Tests - runs-on: spacetimedb-new-runner-2-staging + runs-on: spacetimedb-linux env: RUST_BACKTRACE: full ARTIFACT_SUFFIX: linux