ci: shorten main critical path

This commit is contained in:
Peter Steinberger
2026-03-23 23:45:10 +00:00
parent 36de481541
commit 2d19d2acb9
2 changed files with 107 additions and 30 deletions

44
.github/workflows/ci-bun.yml vendored Normal file
View File

@@ -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 }}

View File

@@ -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