@@ -33,17 +33,34 @@ permissions:
3333
3434jobs :
3535 bench :
36- name : Run Benchmarks
36+ name : Bench ${{ matrix.provider }}
3737 runs-on : namespace-profile-default
38- timeout-minutes : 180
38+ timeout-minutes : 60
39+ strategy :
40+ fail-fast : false
41+ matrix :
42+ provider :
43+ - e2b
44+ - daytona
45+ - blaxel
46+ - just-bash
47+ - modal
48+ - vercel
49+ - hopx
50+ - codesandbox
51+ - runloop
52+ - namespace
53+ - cloudflare
3954 steps :
4055 - uses : actions/checkout@v4
4156 - uses : actions/setup-node@v4
4257 with :
4358 node-version : 24
4459 cache : ' npm'
4560 - run : npm ci
46- - name : Run benchmarks
61+ - name : Clear stale results from checkout
62+ run : rm -rf results/
63+ - name : Run benchmark
4764 env :
4865 COMPUTESDK_API_KEY : ${{ secrets.COMPUTESDK_API_KEY }}
4966 E2B_API_KEY : ${{ secrets.E2B_API_KEY }}
@@ -55,24 +72,50 @@ jobs:
5572 MODAL_TOKEN_ID : ${{ secrets.MODAL_TOKEN_ID }}
5673 MODAL_TOKEN_SECRET : ${{ secrets.MODAL_TOKEN_SECRET }}
5774 DAYTONA_API_KEY : ${{ secrets.DAYTONA_API_KEY }}
58- RAILWAY_API_KEY : ${{ secrets.RAILWAY_API_KEY }}
59- RAILWAY_PROJECT_ID : ${{ secrets.RAILWAY_PROJECT_ID }}
60- RAILWAY_ENVIRONMENT_ID : ${{ secrets.RAILWAY_ENVIRONMENT_ID }}
6175 NSC_TOKEN : ${{ secrets.NSC_TOKEN }}
62- RENDER_API_KEY : ${{ secrets.RENDER_API_KEY }}
63- RENDER_OWNER_ID : ${{ secrets.RENDER_OWNER_ID }}
64- HOPX_API_KEY : ${{ secrets.HOPX_API_KEY }}
65- CSB_API_KEY : ${{ secrets.CSB_API_KEY }}
66- RUNLOOP_API_KEY : ${{ secrets.RUNLOOP_API_KEY }}
76+ HOPX_API_KEY : ${{ secrets.HOPX_API_KEY }}
77+ CSB_API_KEY : ${{ secrets.CSB_API_KEY }}
78+ RUNLOOP_API_KEY : ${{ secrets.RUNLOOP_API_KEY }}
79+ CLOUDFLARE_SANDBOX_URL : ${{ secrets.CLOUDFLARE_SANDBOX_URL }}
80+ CLOUDFLARE_SANDBOX_SECRET : ${{ secrets.CLOUDFLARE_SANDBOX_SECRET }}
6781 run : |
6882 MODE_FLAG=""
6983 if [ -n "${{ github.event.inputs.mode }}" ]; then
7084 MODE_FLAG="--mode ${{ github.event.inputs.mode }}"
7185 fi
7286 npm run bench -- \
87+ --provider ${{ matrix.provider }} \
7388 --iterations ${{ github.event.inputs.iterations || '100' }} \
7489 --concurrency ${{ github.event.inputs.concurrency || '100' }} \
7590 $MODE_FLAG
91+ - name : Upload results
92+ if : always()
93+ uses : actions/upload-artifact@v4
94+ with :
95+ name : results-${{ matrix.provider }}
96+ path : results/
97+ if-no-files-found : ignore
98+ retention-days : 7
99+
100+ collect :
101+ name : Collect Results
102+ runs-on : namespace-profile-default
103+ needs : bench
104+ if : always()
105+ steps :
106+ - uses : actions/checkout@v4
107+ - uses : actions/setup-node@v4
108+ with :
109+ node-version : 24
110+ cache : ' npm'
111+ - run : npm ci
112+ - name : Download all artifacts
113+ uses : actions/download-artifact@v4
114+ with :
115+ path : artifacts/
116+ pattern : results-*
117+ - name : Merge results
118+ run : npx tsx src/merge-results.ts --input artifacts
76119 - run : npm run generate-svg
77120 - name : Commit and push
78121 run : |
0 commit comments