From 2d19d2acb9b038d2ea871095061805756d0fe839 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 23 Mar 2026 23:45:10 +0000 Subject: [PATCH] ci: shorten main critical path --- .github/workflows/ci-bun.yml | 44 +++++++++++++++++ .github/workflows/ci.yml | 93 ++++++++++++++++++++++++------------ 2 files changed, 107 insertions(+), 30 deletions(-) create mode 100644 .github/workflows/ci-bun.yml diff --git a/.github/workflows/ci-bun.yml b/.github/workflows/ci-bun.yml new file mode 100644 index 00000000000..eba544c3cc5 --- /dev/null +++ b/.github/workflows/ci-bun.yml @@ -0,0 +1,44 @@ +name: CI Bun + +on: + push: + branches: [main] + +concurrency: + group: ci-bun-push-${{ github.ref_name }} + cancel-in-progress: true + +env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" + +jobs: + bun-checks: + runs-on: blacksmith-16vcpu-ubuntu-2404 + timeout-minutes: 20 + strategy: + fail-fast: false + matrix: + include: + - shard_index: 1 + shard_count: 2 + command: OPENCLAW_TEST_ISOLATE=1 bunx vitest run --config vitest.unit.config.ts --shard 1/2 + - shard_index: 2 + shard_count: 2 + command: OPENCLAW_TEST_ISOLATE=1 bunx vitest run --config vitest.unit.config.ts --shard 2/2 + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + submodules: false + + - name: Setup Node environment + uses: ./.github/actions/setup-node-env + with: + install-bun: "true" + use-sticky-disk: "false" + + - name: Build A2UI bundle + run: pnpm canvas:a2ui:bundle + + - name: Run Bun test shard + run: ${{ matrix.command }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5683a6fcaa1..5788b2e3728 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,8 +7,8 @@ on: types: [opened, reopened, synchronize, ready_for_review, converted_to_draft] concurrency: - group: ${{ github.event_name == 'pull_request' && format('ci-pr-{0}', github.event.pull_request.number) || format('ci-push-{0}', github.run_id) }} - cancel-in-progress: ${{ github.event_name == 'pull_request' }} + group: ${{ github.event_name == 'pull_request' && format('ci-pr-{0}', github.event.pull_request.number) || format('ci-push-{0}', github.ref_name) }} + cancel-in-progress: true env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" @@ -197,6 +197,14 @@ jobs: path: dist/ retention-days: 1 + - name: Upload A2UI bundle artifact + uses: actions/upload-artifact@v7 + with: + name: canvas-a2ui-bundle + path: src/canvas-host/a2ui/ + include-hidden-files: true + retention-days: 1 + # Validate npm pack contents after build (only on push to main, not PRs). release-check: needs: [preflight, build-artifacts] @@ -237,34 +245,31 @@ jobs: task: test shard_index: 1 shard_count: 2 - command: pnpm canvas:a2ui:bundle && pnpm test + command: pnpm test - runtime: node task: test shard_index: 2 shard_count: 2 - command: pnpm canvas:a2ui:bundle && pnpm test + command: pnpm test - runtime: node task: extensions command: pnpm test:extensions - runtime: node task: channels + shard_index: 1 + shard_count: 2 command: pnpm test:channels - runtime: node task: contracts command: pnpm test:contracts - runtime: node - task: protocol - command: pnpm protocol:check - - runtime: bun - task: test - shard_index: 1 - shard_count: 2 - command: pnpm canvas:a2ui:bundle && OPENCLAW_TEST_ISOLATE=1 bunx vitest run --config vitest.unit.config.ts --shard 1/2 - - runtime: bun - task: test + task: channels shard_index: 2 shard_count: 2 - command: pnpm canvas:a2ui:bundle && OPENCLAW_TEST_ISOLATE=1 bunx vitest run --config vitest.unit.config.ts --shard 2/2 + command: pnpm test:channels + - runtime: node + task: protocol + command: pnpm protocol:check - runtime: node task: compat-node22 node_version: "22.x" @@ -279,26 +284,26 @@ jobs: node --import tsx scripts/release-check.ts steps: - name: Skip compatibility lanes on pull requests - if: github.event_name == 'pull_request' && (matrix.runtime == 'bun' || matrix.task == 'compat-node22') + if: github.event_name == 'pull_request' && matrix.task == 'compat-node22' run: echo "Skipping push-only lane on pull requests." - name: Checkout - if: github.event_name != 'pull_request' || (matrix.runtime != 'bun' && matrix.task != 'compat-node22') + if: github.event_name != 'pull_request' || matrix.task != 'compat-node22' uses: actions/checkout@v6 with: submodules: false - name: Setup Node environment - if: github.event_name != 'pull_request' || (matrix.runtime != 'bun' && matrix.task != 'compat-node22') + if: github.event_name != 'pull_request' || matrix.task != 'compat-node22' uses: ./.github/actions/setup-node-env with: node-version: "${{ matrix.node_version || '24.x' }}" cache-key-suffix: "${{ matrix.cache_key_suffix || 'node24' }}" - install-bun: "${{ matrix.runtime == 'bun' }}" + install-bun: "false" use-sticky-disk: "false" - name: Configure Node test resources - if: (github.event_name != 'pull_request' || (matrix.runtime != 'bun' && matrix.task != 'compat-node22')) && matrix.runtime == 'node' && (matrix.task == 'test' || matrix.task == 'compat-node22') + if: (github.event_name != 'pull_request' || matrix.task != 'compat-node22') && matrix.runtime == 'node' && (matrix.task == 'test' || matrix.task == 'channels' || matrix.task == 'compat-node22') env: SHARD_COUNT: ${{ matrix.shard_count || '' }} SHARD_INDEX: ${{ matrix.shard_index || '' }} @@ -319,12 +324,23 @@ jobs: name: dist-build path: dist/ + - name: Download A2UI bundle artifact + if: github.event_name == 'push' && (matrix.task == 'test' || matrix.task == 'channels') + uses: actions/download-artifact@v8 + with: + name: canvas-a2ui-bundle + path: src/canvas-host/a2ui/ + + - name: Build A2UI bundle + if: github.event_name != 'push' && (matrix.task == 'test' || matrix.task == 'channels') + run: pnpm canvas:a2ui:bundle + - name: Build dist if: github.event_name != 'push' && matrix.task == 'test' && matrix.runtime == 'node' run: pnpm build - name: Run ${{ matrix.task }} (${{ matrix.runtime }}) - if: github.event_name != 'pull_request' || (matrix.runtime != 'bun' && matrix.task != 'compat-node22') + if: github.event_name != 'pull_request' || matrix.task != 'compat-node22' run: ${{ matrix.command }} extension-fast: @@ -585,32 +601,42 @@ jobs: - runtime: node task: test shard_index: 1 - shard_count: 6 + shard_count: 8 command: pnpm test - runtime: node task: test shard_index: 2 - shard_count: 6 + shard_count: 8 command: pnpm test - runtime: node task: test shard_index: 3 - shard_count: 6 + shard_count: 8 command: pnpm test - runtime: node task: test shard_index: 4 - shard_count: 6 + shard_count: 8 command: pnpm test - runtime: node task: test shard_index: 5 - shard_count: 6 + shard_count: 8 command: pnpm test - runtime: node task: test shard_index: 6 - shard_count: 6 + shard_count: 8 + command: pnpm test + - runtime: node + task: test + shard_index: 7 + shard_count: 8 + command: pnpm test + - runtime: node + task: test + shard_index: 8 + shard_count: 8 command: pnpm test steps: - name: Checkout @@ -683,10 +709,6 @@ jobs: echo "OPENCLAW_TEST_SHARDS=${{ matrix.shard_count }}" >> "$GITHUB_ENV" echo "OPENCLAW_TEST_SHARD_INDEX=${{ matrix.shard_index }}" >> "$GITHUB_ENV" - - name: Build A2UI bundle (Windows) - if: matrix.task == 'test' - run: pnpm canvas:a2ui:bundle - - name: Download dist artifact if: github.event_name == 'push' && matrix.task == 'test' uses: actions/download-artifact@v8 @@ -694,6 +716,17 @@ jobs: name: dist-build path: dist/ + - name: Download A2UI bundle artifact + if: github.event_name == 'push' && matrix.task == 'test' + uses: actions/download-artifact@v8 + with: + name: canvas-a2ui-bundle + path: src/canvas-host/a2ui/ + + - name: Build A2UI bundle (Windows) + if: github.event_name != 'push' && matrix.task == 'test' + run: pnpm canvas:a2ui:bundle + - name: Build dist (Windows) if: github.event_name != 'push' && matrix.task == 'test' run: pnpm build