Skip to content

ci: extract wait-for-vercel-project to vercel/wait-for-deployment-action#2065

Merged
TooTallNate merged 6 commits into
mainfrom
ci/extract-wait-for-deployment-action
May 22, 2026
Merged

ci: extract wait-for-vercel-project to vercel/wait-for-deployment-action#2065
TooTallNate merged 6 commits into
mainfrom
ci/extract-wait-for-deployment-action

Conversation

@TooTallNate
Copy link
Copy Markdown
Member

@TooTallNate TooTallNate commented May 21, 2026

Summary

Moved .github/actions/wait-for-vercel-project to a standalone repository so it can be shared with other repos.

Changes

  • Delete .github/actions/wait-for-vercel-project/ (action.yml, src, dist, package.json, pnpm-lock.yaml, LICENSE.md).
  • Update the five workflows that consume it to point at the external action:
    • benchmarks.yml
    • dispatch-front-workflow-release-pr.yml
    • docs-checks.yml
    • tarballs-checks.yml
    • tests.yml

All with: inputs are unchanged — the new action's contract is backwards-compatible with the inputs we already pass (project-slug, environment, timeout, check-interval, github-token).

What's different in the new action

  • ESM-only, targets Node 24 (the GitHub Actions JS runtime).
  • ~12KB bundle (was ~830KB) — dropped @actions/core in favor of a tiny in-tree replacement, which also eliminates the transitive undici dependency surface that Wiz/Snyk regularly flag.
  • Unit-tested (37 tests covering config parsing, the GitHub API client, and the workflow-command shim).
  • Same defaults: bare Preview / Production env and Vercel commit status when project-slug is omitted; suffixed Preview – <slug> / Vercel – <slug> when set. Multi-project repos like this one keep working unchanged.

The action's logic was duplicated between this repo and
vercel/workflow-server, which is annoying to keep in sync. Move it to
a standalone repository so both can consume the same pinned build.

Changes:

- Delete .github/actions/wait-for-vercel-project entirely.
- Replace all five `uses: ./.github/actions/wait-for-vercel-project`
  references with `uses: vercel/wait-for-deployment-action@<sha>` in:
    benchmarks.yml, dispatch-front-workflow-release-pr.yml,
    docs-checks.yml, tarballs-checks.yml, tests.yml
- All `with:` inputs (project-slug, environment, timeout,
  check-interval, github-token) are unchanged — the new action's
  input contract is backwards-compatible.

The new action is ESM-only, targets Node 24, ships a ~12KB bundle
(down from ~830KB in the old in-repo version) by dropping
@actions/core and its transitive undici dependency, and is
unit-tested. See https://github.com/vercel/wait-for-deployment-action.
@TooTallNate TooTallNate requested a review from a team as a code owner May 21, 2026 21:21
Copilot AI review requested due to automatic review settings May 21, 2026 21:21
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented May 21, 2026

⚠️ No Changeset found

Latest commit: debd7c8

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented May 21, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
example-nextjs-workflow-turbopack Ready Ready Preview, Comment May 22, 2026 12:19am
example-nextjs-workflow-webpack Ready Ready Preview, Comment May 22, 2026 12:19am
example-workflow Ready Ready Preview, Comment May 22, 2026 12:19am
workbench-astro-workflow Ready Ready Preview, Comment May 22, 2026 12:19am
workbench-express-workflow Ready Ready Preview, Comment May 22, 2026 12:19am
workbench-fastify-workflow Ready Ready Preview, Comment May 22, 2026 12:19am
workbench-hono-workflow Ready Ready Preview, Comment May 22, 2026 12:19am
workbench-nitro-workflow Ready Ready Preview, Comment May 22, 2026 12:19am
workbench-nuxt-workflow Ready Ready Preview, Comment May 22, 2026 12:19am
workbench-sveltekit-workflow Ready Ready Preview, Comment May 22, 2026 12:19am
workbench-tanstack-start-workflow Ready Ready Preview, Comment May 22, 2026 12:19am
workbench-vite-workflow Ready Ready Preview, Comment May 22, 2026 12:19am
workflow-docs Ready Ready Preview, Comment, Open in v0 May 22, 2026 12:19am
workflow-swc-playground Ready Ready Preview, Comment May 22, 2026 12:19am
workflow-tarballs Ready Ready Preview, Comment May 22, 2026 12:19am
workflow-web Ready Ready Preview, Comment May 22, 2026 12:19am

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 21, 2026

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
❌ ▲ Vercel Production 1217 5 219 1441
✅ 💻 Local Development 1615 0 219 1834
✅ 📦 Local Production 1615 0 219 1834
✅ 🐘 Local Postgres 1615 0 219 1834
✅ 🪟 Windows 131 0 0 131
✅ 📋 Other 741 0 176 917
Total 6934 5 1052 7991

❌ Failed Tests

▲ Vercel Production (5 failed)

astro (1 failed):

example (1 failed):

hono (1 failed):

sveltekit (1 failed):

  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KS6H41C3GWQC621AD3E7G0QM | 🔍 observability

vite (1 failed):

  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KS6H41C3GWQC621AD3E7G0QM | 🔍 observability

Details by Category

❌ ▲ Vercel Production
App Passed Failed Skipped
❌ astro 104 1 26
❌ example 104 1 26
✅ express 105 0 26
✅ fastify 105 0 26
❌ hono 104 1 26
✅ nextjs-turbopack 129 0 2
✅ nextjs-webpack 129 0 2
✅ nitro 105 0 26
✅ nuxt 105 0 26
❌ sveltekit 123 1 7
❌ vite 104 1 26
✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 106 0 25
✅ express-stable 106 0 25
✅ fastify-stable 106 0 25
✅ hono-stable 106 0 25
✅ nextjs-turbopack-canary 112 0 19
✅ nextjs-turbopack-stable-lazy-discovery-disabled 131 0 0
✅ nextjs-turbopack-stable-lazy-discovery-enabled 131 0 0
✅ nextjs-webpack-canary 112 0 19
✅ nextjs-webpack-stable-lazy-discovery-disabled 131 0 0
✅ nextjs-webpack-stable-lazy-discovery-enabled 131 0 0
✅ nitro-stable 106 0 25
✅ nuxt-stable 106 0 25
✅ sveltekit-stable 125 0 6
✅ vite-stable 106 0 25
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 106 0 25
✅ express-stable 106 0 25
✅ fastify-stable 106 0 25
✅ hono-stable 106 0 25
✅ nextjs-turbopack-canary 112 0 19
✅ nextjs-turbopack-stable-lazy-discovery-disabled 131 0 0
✅ nextjs-turbopack-stable-lazy-discovery-enabled 131 0 0
✅ nextjs-webpack-canary 112 0 19
✅ nextjs-webpack-stable-lazy-discovery-disabled 131 0 0
✅ nextjs-webpack-stable-lazy-discovery-enabled 131 0 0
✅ nitro-stable 106 0 25
✅ nuxt-stable 106 0 25
✅ sveltekit-stable 125 0 6
✅ vite-stable 106 0 25
✅ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 106 0 25
✅ express-stable 106 0 25
✅ fastify-stable 106 0 25
✅ hono-stable 106 0 25
✅ nextjs-turbopack-canary 112 0 19
✅ nextjs-turbopack-stable-lazy-discovery-disabled 131 0 0
✅ nextjs-turbopack-stable-lazy-discovery-enabled 131 0 0
✅ nextjs-webpack-canary 112 0 19
✅ nextjs-webpack-stable-lazy-discovery-disabled 131 0 0
✅ nextjs-webpack-stable-lazy-discovery-enabled 131 0 0
✅ nitro-stable 106 0 25
✅ nuxt-stable 106 0 25
✅ sveltekit-stable 125 0 6
✅ vite-stable 106 0 25
✅ 🪟 Windows
App Passed Failed Skipped
✅ nextjs-turbopack 131 0 0
✅ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 106 0 25
✅ e2e-local-dev-tanstack-start- 106 0 25
✅ e2e-local-postgres-nest-stable 106 0 25
✅ e2e-local-postgres-tanstack-start- 106 0 25
✅ e2e-local-prod-nest-stable 106 0 25
✅ e2e-local-prod-tanstack-start- 106 0 25
✅ e2e-vercel-prod-tanstack-start 105 0 26

📋 View full workflow run


Some E2E test jobs failed:

  • Vercel Prod: failure
  • Local Dev: success
  • Local Prod: success
  • Local Postgres: success
  • Windows: success

Check the workflow run for details.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 21, 2026

📊 Benchmark Results

📈 Comparing against baseline from main branch. Green 🟢 = faster, Red 🔺 = slower.

workflow with no steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 0.029s (-33.6% 🟢) 1.005s (~) 0.975s 10 1.00x
💻 Local Nitro 0.032s (-26.2% 🟢) 1.006s (~) 0.974s 10 1.08x
🐘 Postgres Express 0.042s (-28.4% 🟢) 1.010s (~) 0.968s 10 1.41x
🐘 Postgres Nitro 0.044s (-53.7% 🟢) 1.011s (-3.0%) 0.967s 10 1.50x
💻 Local Next.js (Turbopack) 0.048s 1.005s 0.958s 10 1.62x
🐘 Postgres Next.js (Turbopack) 0.059s 1.013s 0.954s 10 2.02x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 0.230s (-2.2%) 1.882s (-11.9% 🟢) 1.652s 10 1.00x
▲ Vercel Nitro 0.386s (-5.7% 🟢) 2.092s (-16.6% 🟢) 1.706s 10 1.68x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Express | Nitro

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 1.065s (-5.4% 🟢) 2.005s (~) 0.940s 10 1.00x
💻 Local Nitro 1.077s (-4.8%) 2.006s (~) 0.929s 10 1.01x
🐘 Postgres Express 1.080s (-5.8% 🟢) 2.009s (~) 0.930s 10 1.01x
🐘 Postgres Nitro 1.084s (-4.9%) 2.010s (~) 0.926s 10 1.02x
💻 Local Next.js (Turbopack) 1.115s 2.005s 0.890s 10 1.05x
🐘 Postgres Next.js (Turbopack) 1.118s 2.008s 0.889s 10 1.05x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.564s (-16.6% 🟢) 4.195s (+10.2% 🔺) 2.631s 10 1.00x
▲ Vercel Nitro 2.138s (-45.1% 🟢) 4.139s (-29.9% 🟢) 2.002s 10 1.37x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Express | Nitro

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 10.410s (-4.9%) 11.022s (~) 0.612s 3 1.00x
🐘 Postgres Express 10.415s (-5.0% 🟢) 11.012s (~) 0.597s 3 1.00x
💻 Local Express 10.422s (-4.6%) 11.021s (~) 0.599s 3 1.00x
🐘 Postgres Nitro 10.449s (-3.9%) 11.019s (~) 0.570s 3 1.00x
💻 Local Next.js (Turbopack) 10.651s 11.020s 0.369s 3 1.02x
🐘 Postgres Next.js (Turbopack) 10.787s 11.018s 0.231s 3 1.04x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 13.848s (-41.6% 🟢) 16.154s (-35.7% 🟢) 2.306s 2 1.00x
▲ Vercel Express 15.254s (-10.2% 🟢) 18.055s (-9.8% 🟢) 2.801s 2 1.10x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro | Express

workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 13.418s (-10.4% 🟢) 14.026s (-6.7% 🟢) 0.608s 5 1.00x
🐘 Postgres Express 13.442s (-7.8% 🟢) 14.014s (-6.7% 🟢) 0.571s 5 1.00x
💻 Local Nitro 13.465s (-10.6% 🟢) 14.026s (-12.5% 🟢) 0.561s 5 1.00x
🐘 Postgres Nitro 13.523s (-7.3% 🟢) 14.020s (-6.7% 🟢) 0.497s 5 1.01x
💻 Local Next.js (Turbopack) 14.056s 15.029s 0.973s 4 1.05x
🐘 Postgres Next.js (Turbopack) 14.159s 15.018s 0.859s 4 1.06x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 22.043s (-56.2% 🟢) 23.970s (-54.4% 🟢) 1.926s 3 1.00x
▲ Vercel Nitro 22.177s (-65.6% 🟢) 24.378s (-63.4% 🟢) 2.202s 3 1.01x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Express | Nitro

workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 11.854s (-28.6% 🟢) 12.022s (-29.4% 🟢) 0.168s 8 1.00x
💻 Local Nitro 11.908s (-29.0% 🟢) 12.022s (-29.4% 🟢) 0.114s 8 1.00x
🐘 Postgres Express 12.009s (-14.3% 🟢) 12.515s (-14.2% 🟢) 0.506s 8 1.01x
🐘 Postgres Nitro 12.027s (-13.9% 🟢) 12.518s (-12.5% 🟢) 0.491s 8 1.01x
💻 Local Next.js (Turbopack) 13.043s 13.596s 0.553s 7 1.10x
🐘 Postgres Next.js (Turbopack) 13.209s 14.016s 0.807s 7 1.11x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 29.616s (-93.0% 🟢) 31.630s (-92.5% 🟢) 2.013s 3 1.00x
▲ Vercel Express 32.163s (-73.5% 🟢) 34.051s (-72.5% 🟢) 1.889s 3 1.09x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro | Express

Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.146s (-9.1% 🟢) 2.007s (~) 0.861s 15 1.00x
🐘 Postgres Nitro 1.154s (-9.5% 🟢) 2.007s (~) 0.853s 15 1.01x
💻 Local Express 1.169s (-21.5% 🟢) 2.006s (~) 0.837s 15 1.02x
💻 Local Nitro 1.172s (-28.1% 🟢) 2.006s (-3.3%) 0.833s 15 1.02x
🐘 Postgres Next.js (Turbopack) 1.207s 2.007s 0.800s 15 1.05x
💻 Local Next.js (Turbopack) 1.261s 2.007s 0.745s 15 1.10x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.550s (-10.8% 🟢) 4.052s (-12.3% 🟢) 1.503s 8 1.00x
▲ Vercel Nitro 2.963s (+5.2% 🔺) 4.443s (+2.8%) 1.479s 8 1.16x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Express | Nitro

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.178s (-50.1% 🟢) 2.007s (-33.3% 🟢) 0.828s 15 1.00x
🐘 Postgres Nitro 1.256s (-46.6% 🟢) 2.073s (-31.1% 🟢) 0.817s 15 1.07x
🐘 Postgres Next.js (Turbopack) 1.335s 2.006s 0.671s 15 1.13x
💻 Local Express 1.685s (-42.9% 🟢) 2.006s (-41.9% 🟢) 0.321s 15 1.43x
💻 Local Nitro 1.721s (-45.3% 🟢) 2.005s (-48.4% 🟢) 0.285s 15 1.46x
💻 Local Next.js (Turbopack) 1.925s 2.391s 0.467s 13 1.63x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 3.649s (+0.8%) 5.680s (+11.1% 🔺) 2.030s 6 1.00x
▲ Vercel Nitro 3.909s (-3.5%) 5.752s (-2.8%) 1.843s 6 1.07x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Express | Nitro

Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.273s (-63.5% 🟢) 2.007s (-50.0% 🟢) 0.734s 15 1.00x
🐘 Postgres Nitro 1.389s (-60.1% 🟢) 2.075s (-48.2% 🟢) 0.686s 15 1.09x
🐘 Postgres Next.js (Turbopack) 1.604s 2.007s 0.403s 15 1.26x
💻 Local Express 4.337s (-48.0% 🟢) 5.011s (-44.5% 🟢) 0.674s 6 3.41x
💻 Local Next.js (Turbopack) 5.252s 5.679s 0.427s 6 4.13x
💻 Local Nitro 5.753s (-31.1% 🟢) 6.014s (-33.3% 🟢) 0.260s 6 4.52x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 4.860s (+37.9% 🔺) 6.407s (+15.8% 🔺) 1.546s 5 1.00x
▲ Vercel Express 5.350s (+26.2% 🔺) 6.921s (+13.0% 🔺) 1.571s 5 1.10x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro | Express

Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.130s (-10.1% 🟢) 2.007s (~) 0.877s 15 1.00x
🐘 Postgres Nitro 1.167s (-7.1% 🟢) 2.008s (~) 0.840s 15 1.03x
🐘 Postgres Next.js (Turbopack) 1.199s 2.006s 0.807s 15 1.06x
💻 Local Next.js (Turbopack) 1.295s 2.006s 0.711s 15 1.15x
💻 Local Express 1.362s (-28.1% 🟢) 2.006s (-15.1% 🟢) 0.644s 15 1.20x
💻 Local Nitro 1.417s (-24.1% 🟢) 2.006s (-14.3% 🟢) 0.590s 15 1.25x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.656s (+8.0% 🔺) 4.552s (+9.2% 🔺) 1.896s 7 1.00x
▲ Vercel Express 2.725s (+5.5% 🔺) 4.559s (+4.8%) 1.835s 7 1.03x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro | Express

Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.193s (-49.1% 🟢) 2.007s (-33.3% 🟢) 0.814s 15 1.00x
🐘 Postgres Nitro 1.198s (-48.8% 🟢) 2.007s (-33.3% 🟢) 0.809s 15 1.00x
🐘 Postgres Next.js (Turbopack) 1.328s 2.009s 0.680s 15 1.11x
💻 Local Express 1.811s (-42.2% 🟢) 2.222s (-40.9% 🟢) 0.412s 14 1.52x
💻 Local Nitro 2.026s (-33.9% 🟢) 2.471s (-36.4% 🟢) 0.445s 13 1.70x
💻 Local Next.js (Turbopack) 2.125s 2.917s 0.792s 11 1.78x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 3.585s (+12.3% 🔺) 5.361s (+11.9% 🔺) 1.776s 6 1.00x
▲ Vercel Nitro 3.641s (+12.6% 🔺) 5.273s (+3.9%) 1.632s 6 1.02x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Express | Nitro

Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.280s (-63.4% 🟢) 2.006s (-50.0% 🟢) 0.726s 15 1.00x
🐘 Postgres Nitro 1.293s (-62.8% 🟢) 2.008s (-49.9% 🟢) 0.715s 15 1.01x
🐘 Postgres Next.js (Turbopack) 1.614s 2.009s 0.395s 15 1.26x
💻 Local Express 4.981s (-43.4% 🟢) 5.511s (-40.6% 🟢) 0.530s 6 3.89x
💻 Local Next.js (Turbopack) 5.653s 6.214s 0.561s 5 4.42x
💻 Local Nitro 5.749s (-37.1% 🟢) 6.013s (-40.0% 🟢) 0.264s 5 4.49x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 5.154s (-19.7% 🟢) 7.106s (-13.1% 🟢) 1.952s 5 1.00x
▲ Vercel Nitro 5.375s (+5.5% 🔺) 7.184s (+5.4% 🔺) 1.810s 5 1.04x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Express | Nitro

workflow with 10 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.430s (-48.7% 🟢) 1.006s (-1.7%) 0.576s 60 1.00x
🐘 Postgres Nitro 0.434s (-47.1% 🟢) 1.006s (~) 0.572s 60 1.01x
💻 Local Express 0.458s (-53.4% 🟢) 1.004s (-6.7% 🟢) 0.546s 60 1.06x
💻 Local Nitro 0.529s (-46.0% 🟢) 1.022s (-6.6% 🟢) 0.492s 59 1.23x
🐘 Postgres Next.js (Turbopack) 0.667s 1.006s 0.339s 60 1.55x
💻 Local Next.js (Turbopack) 0.732s 1.021s 0.289s 59 1.70x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 4.763s (-78.4% 🟢) 6.762s (-71.9% 🟢) 2.000s 9 1.00x
▲ Vercel Express 4.952s (-74.0% 🟢) 6.689s (-68.6% 🟢) 1.737s 9 1.04x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro | Express

workflow with 25 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.065s (-44.8% 🟢) 1.826s (-13.0% 🟢) 0.762s 50 1.00x
💻 Local Express 1.166s (-61.3% 🟢) 2.006s (-44.1% 🟢) 0.839s 45 1.10x
🐘 Postgres Express 1.196s (-39.5% 🟢) 1.882s (-16.7% 🟢) 0.686s 48 1.12x
💻 Local Nitro 1.199s (-60.5% 🟢) 2.006s (-46.6% 🟢) 0.806s 45 1.13x
🐘 Postgres Next.js (Turbopack) 1.601s 2.008s 0.406s 45 1.50x
💻 Local Next.js (Turbopack) 1.754s 2.006s 0.252s 45 1.65x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 13.618s (-65.5% 🟢) 15.510s (-62.4% 🟢) 1.892s 6 1.00x
▲ Vercel Express 13.836s (-59.9% 🟢) 16.115s (-56.2% 🟢) 2.278s 6 1.02x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro | Express

workflow with 50 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.077s (-48.0% 🟢) 2.477s (-43.3% 🟢) 0.400s 49 1.00x
🐘 Postgres Nitro 2.196s (-46.5% 🟢) 3.008s (-34.7% 🟢) 0.811s 40 1.06x
💻 Local Express 2.664s (-71.1% 🟢) 3.032s (-69.7% 🟢) 0.368s 40 1.28x
💻 Local Nitro 2.686s (-71.1% 🟢) 3.008s (-70.0% 🟢) 0.321s 40 1.29x
🐘 Postgres Next.js (Turbopack) 3.145s 4.009s 0.864s 30 1.51x
💻 Local Next.js (Turbopack) 3.734s 4.041s 0.307s 30 1.80x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 41.160s (-68.3% 🟢) 43.331s (-67.2% 🟢) 2.170s 3 1.00x
▲ Vercel Nitro 43.072s (-55.6% 🟢) 45.119s (-54.2% 🟢) 2.047s 3 1.05x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Express | Nitro

workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.163s (-42.2% 🟢) 1.005s (~) 0.842s 60 1.00x
🐘 Postgres Nitro 0.171s (-39.5% 🟢) 1.006s (~) 0.834s 60 1.05x
🐘 Postgres Next.js (Turbopack) 0.235s 1.006s 0.771s 60 1.44x
💻 Local Express 0.380s (-32.3% 🟢) 1.004s (~) 0.624s 60 2.33x
💻 Local Nitro 0.392s (-35.2% 🟢) 1.004s (-1.7%) 0.612s 60 2.40x
💻 Local Next.js (Turbopack) 0.516s 1.004s 0.488s 60 3.16x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.671s (+60.8% 🔺) 4.550s (+35.8% 🔺) 1.878s 15 1.00x
▲ Vercel Express 3.023s (+54.7% 🔺) 5.040s (+38.6% 🔺) 2.018s 13 1.13x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro | Express

workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.269s (-47.3% 🟢) 1.005s (~) 0.737s 90 1.00x
🐘 Postgres Nitro 0.289s (-41.7% 🟢) 1.006s (~) 0.717s 90 1.08x
🐘 Postgres Next.js (Turbopack) 0.439s 1.006s 0.567s 90 1.63x
💻 Local Express 2.091s (-16.8% 🟢) 2.580s (-14.3% 🟢) 0.490s 35 7.78x
💻 Local Nitro 2.150s (-15.3% 🟢) 2.767s (-8.1% 🟢) 0.617s 33 8.00x
💻 Local Next.js (Turbopack) 2.187s 2.945s 0.757s 31 8.14x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 8.661s (+168.5% 🔺) 10.709s (+122.1% 🔺) 2.048s 9 1.00x
▲ Vercel Express 9.505s (+212.0% 🔺) 11.510s (+139.4% 🔺) 2.005s 8 1.10x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Nitro | Express

workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.554s (-32.4% 🟢) 1.005s (-1.2%) 0.452s 120 1.00x
🐘 Postgres Nitro 0.595s (-24.7% 🟢) 1.005s (~) 0.411s 120 1.07x
🐘 Postgres Next.js (Turbopack) 0.907s 1.108s 0.201s 109 1.64x
💻 Local Express 9.856s (-11.9% 🟢) 10.360s (-13.2% 🟢) 0.504s 12 17.80x
💻 Local Nitro 10.127s (-9.5% 🟢) 10.696s (-8.3% 🟢) 0.569s 12 18.29x
💻 Local Next.js (Turbopack) 10.503s 11.208s 0.706s 11 18.97x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 23.644s (+218.6% 🔺) 25.496s (+175.8% 🔺) 1.851s 5 1.00x
▲ Vercel Nitro 26.618s (+244.7% 🔺) 28.803s (+206.4% 🔺) 2.185s 5 1.13x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - -

🔍 Observability: Express | Nitro

Stream Benchmarks (includes TTFB metrics)
workflow with stream

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 1.127s (+466.0% 🔺) 2.005s (+99.6% 🔺) 0.010s (-14.0% 🟢) 2.017s (+98.1% 🔺) 0.890s 10 1.00x
🐘 Postgres Express 1.130s (+450.8% 🔺) 2.001s (+100.4% 🔺) 0.001s (-31.3% 🟢) 2.009s (+98.7% 🔺) 0.880s 10 1.00x
💻 Local Nitro 1.137s (+432.3% 🔺) 2.005s (+99.6% 🔺) 0.012s (-2.4%) 2.019s (+98.2% 🔺) 0.882s 10 1.01x
🐘 Postgres Nitro 1.150s (+461.1% 🔺) 2.002s (+100.2% 🔺) 0.001s (-20.0% 🟢) 2.010s (+98.7% 🔺) 0.859s 10 1.02x
💻 Local Next.js (Turbopack) 1.176s 2.004s 0.012s 2.020s 0.844s 10 1.04x
🐘 Postgres Next.js (Turbopack) 1.208s 2.000s 0.002s 2.010s 0.802s 10 1.07x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.223s (-42.0% 🟢) 3.527s (-33.2% 🟢) 1.746s (+135.3% 🔺) 5.748s (-11.3% 🟢) 3.525s 10 1.00x
▲ Vercel Express 2.532s (+1.1%) 3.630s (-11.3% 🟢) 1.750s (+82.2% 🔺) 6.077s (+8.7% 🔺) 3.546s 10 1.14x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - - -

🔍 Observability: Nitro | Express

stream pipeline with 5 transform steps (1MB)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.502s (+138.4% 🔺) 2.003s (+99.0% 🔺) 0.004s (-8.6% 🟢) 2.023s (+97.8% 🔺) 0.521s 30 1.00x
💻 Local Express 1.520s (+100.8% 🔺) 2.011s (+95.4% 🔺) 0.010s (+5.5% 🔺) 2.023s (+94.5% 🔺) 0.502s 30 1.01x
🐘 Postgres Nitro 1.544s (+147.3% 🔺) 2.007s (+99.3% 🔺) 0.004s (-15.4% 🟢) 2.023s (+97.8% 🔺) 0.479s 30 1.03x
💻 Local Next.js (Turbopack) 1.652s 2.010s 0.011s 2.024s 0.371s 30 1.10x
🐘 Postgres Next.js (Turbopack) 1.668s 2.017s 0.004s 2.032s 0.363s 30 1.11x
💻 Local Nitro 1.718s (+104.8% 🔺) 2.013s (+98.9% 🔺) 0.010s (+8.6% 🔺) 2.199s (+97.0% 🔺) 0.481s 29 1.14x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 5.771s (-80.4% 🟢) 7.604s (-75.3% 🟢) 0.220s (+96.8% 🔺) 8.388s (-73.6% 🟢) 2.618s 8 1.00x
▲ Vercel Express 5.862s (-9.9% 🟢) 7.546s (-5.8% 🟢) 0.227s (-44.5% 🟢) 8.567s (-3.0%) 2.706s 8 1.02x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - - -

🔍 Observability: Nitro | Express

10 parallel streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.638s (-33.6% 🟢) 1.015s (-20.5% 🟢) 0.000s (+58.6% 🔺) 1.036s (-20.7% 🟢) 0.398s 58 1.00x
🐘 Postgres Nitro 0.682s (-29.6% 🟢) 1.016s (-18.5% 🟢) 0.000s (-18.6% 🟢) 1.031s (-18.0% 🟢) 0.349s 59 1.07x
🐘 Postgres Next.js (Turbopack) 0.784s 1.053s 0.000s 1.064s 0.280s 57 1.23x
💻 Local Express 1.359s (+10.9% 🔺) 2.017s (~) 0.000s (+10.0% 🔺) 2.019s (~) 0.660s 30 2.13x
💻 Local Nitro 1.364s (+11.6% 🔺) 2.014s (~) 0.000s (+300.0% 🔺) 2.017s (~) 0.652s 30 2.14x
💻 Local Next.js (Turbopack) 1.415s 2.014s 0.000s 2.017s 0.602s 30 2.22x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.478s (+14.0% 🔺) 5.001s (+13.8% 🔺) 0.001s (+1200.0% 🔺) 5.525s (+14.9% 🔺) 2.047s 11 1.00x
▲ Vercel Express ⚠️ missing - - - - -
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - - -

🔍 Observability: Nitro

fan-out fan-in 10 streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.256s (-29.1% 🟢) 1.848s (-15.1% 🟢) 0.000s (NaN%) 1.857s (-15.6% 🟢) 0.600s 33 1.00x
🐘 Postgres Nitro 1.309s (-26.9% 🟢) 2.000s (-6.6% 🟢) 0.000s (-100.0% 🟢) 2.009s (-7.6% 🟢) 0.699s 30 1.04x
🐘 Postgres Next.js (Turbopack) 1.539s 2.106s 0.000s 2.113s 0.574s 29 1.23x
💻 Local Next.js (Turbopack) 2.740s 3.362s 0.000s 3.365s 0.626s 18 2.18x
💻 Local Express 3.130s (-9.7% 🟢) 3.905s (-3.2%) 0.001s (-37.5% 🟢) 3.907s (-3.2%) 0.777s 16 2.49x
💻 Local Nitro 3.135s (-7.4% 🟢) 3.967s (-1.6%) 0.001s (+28.9% 🔺) 3.969s (-1.7%) 0.834s 16 2.50x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 5.254s (+28.3% 🔺) 7.026s (+30.7% 🔺) 0.000s (-100.0% 🟢) 7.583s (+30.9% 🔺) 2.329s 8 1.00x
▲ Vercel Express 5.511s (+20.1% 🔺) 6.861s (+13.9% 🔺) 0.000s (+Infinity% 🔺) 7.453s (+15.4% 🔺) 1.941s 9 1.05x
▲ Vercel Next.js (Turbopack) ⚠️ missing - - - - -

🔍 Observability: Nitro | Express

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World 🥇 Fastest Framework Wins
💻 Local Express 18/21
🐘 Postgres Express 20/21
▲ Vercel Nitro 12/21
Fastest World by Framework

Winner determined by most benchmark wins

Framework 🥇 Fastest World Wins
Express 🐘 Postgres 15/21
Next.js (Turbopack) 🐘 Postgres 14/21
Nitro 🐘 Postgres 15/21
Column Definitions
  • Workflow Time: Runtime reported by workflow (completedAt - createdAt) - primary metric
  • TTFB: Time to First Byte - time from workflow start until first stream byte received (stream benchmarks only)
  • Slurp: Time from first byte to complete stream consumption (stream benchmarks only)
  • Wall Time: Total testbench time (trigger workflow + poll for result)
  • Overhead: Testbench overhead (Wall Time - Workflow Time)
  • Samples: Number of benchmark iterations run
  • vs Fastest: How much slower compared to the fastest configuration for this benchmark

Worlds:

  • 💻 Local: In-memory filesystem world (local development)
  • 🐘 Postgres: PostgreSQL database world (local development)
  • ▲ Vercel: Vercel production/preview deployment
  • 🌐 Turso: Community world (local development)
  • 🌐 MongoDB: Community world (local development)
  • 🌐 Redis: Community world (local development)
  • 🌐 Jazz: Community world (local development)
  • 🌐 Redis: Community world (local development)
  • 🌐 Redis + BullMQ: Community world (local development)
  • 🌐 Cloudflare: Community world (local development)
  • 🌐 MySQL: Community world (local development)
  • 🌐 Azure: Community world (local development)
  • 🌐 NATS JetStream: Community world (local development)
  • 🌐 Upstash: Community world (local development)

📋 View full workflow run


Some benchmark jobs failed:

  • Local: success
  • Postgres: success
  • Vercel: failure

Check the workflow run for details.

⚠️ Community world benchmarks failed (non-blocking):

  • Community Worlds: failure

Check the workflow run for details.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR removes the in-repo .github/actions/wait-for-vercel-project GitHub Action and updates this repository’s workflows to use the new externally-hosted, SHA-pinned vercel/wait-for-deployment-action instead, so the action implementation can be shared and kept in sync across repos.

Changes:

  • Replaced local action usage in 5 workflows with vercel/wait-for-deployment-action@593ea7d….
  • Deleted the previously vendored action implementation and its packaging files under .github/actions/wait-for-vercel-project/.

Reviewed changes

Copilot reviewed 9 out of 11 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
.github/workflows/tests.yml Switches the “wait for deployment” step to the external action.
.github/workflows/benchmarks.yml Switches Vercel benchmark wait step to the external action.
.github/workflows/tarballs-checks.yml Switches tarballs deployment wait step to the external action.
.github/workflows/docs-checks.yml Switches docs deployment wait step to the external action.
.github/workflows/dispatch-front-workflow-release-pr.yml Switches docs wait step (used for dispatching) to the external action.
.github/actions/wait-for-vercel-project/src/wait-for-deployment.ts Removes the in-repo action implementation.
.github/actions/wait-for-vercel-project/action.yml Removes the in-repo action definition.
.github/actions/wait-for-vercel-project/package.json Removes the in-repo action packaging/build config.
.github/actions/wait-for-vercel-project/pnpm-lock.yaml Removes the in-repo action dependency lockfile.
Files not reviewed (1)
  • .github/actions/wait-for-vercel-project/pnpm-lock.yaml: Language not supported
Comments suppressed due to low confidence (1)

.github/workflows/dispatch-front-workflow-release-pr.yml:55

  • The inline comment says the "job-level permissions: contents: read" blocks the token, but this workflow sets permissions: contents: read at the workflow level (there’s no job-level permissions: block on this job). Consider updating the wording to avoid confusion about where the restriction is coming from.
      - name: Wait for docs deployment
        id: waitForDocsDeployment
        uses: vercel/wait-for-deployment-action@593ea7dfb974467fcc5973ba5e99441ede58eb05
        with:
          project-slug: workflow-docs
          # The job-level `permissions: contents: read` blocks the default
          # GITHUB_TOKEN from reading the Deployments / Statuses APIs.
          # Use the GitHub App token, which already has the necessary scopes
          # for the workflow,front repositories.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/tests.yml
Comment thread .github/workflows/benchmarks.yml
Comment thread .github/workflows/docs-checks.yml
Comment thread .github/workflows/tarballs-checks.yml
…rification

Repinning to vercel/wait-for-deployment-action#fix/status-context-auto
(SHA 04d46ef) which fixes the broken 'opt-out' heuristic that made
status-context resolution silently disabled for every consumer.

Reproduced in this repo's E2E logs:

  Looking for GitHub deployment in environment "Preview – example-workflow"
  Deployment ID resolution disabled (status-context is empty)
  Deployment ready: https://example-workflow-...labs.vercel.dev
  Run E2E Tests: VERCEL_DEPLOYMENT_ID=         <-- empty

Will repin to the post-merge main SHA once CI is green.
@TooTallNate TooTallNate changed the title ci: extract wait-for-vercel-project to vercel/wait-for-deployment-action ci: extract wait-for-vercel-project to vercel/wait-for-deployment-action May 21, 2026
TooTallNate added a commit that referenced this pull request May 21, 2026
Copilot review on #2065 flagged that the four jobs with an explicit
permissions: block declare deployments: read but not statuses: read,
even though vercel/wait-for-deployment-action also reads the
'Vercel – <slug>' combined commit status to resolve the dpl_xxx ID.

Empirically GitHub grants combined-status read with just
contents: read (verified in the green E2E run on this branch — the
action successfully extracted dpl_GH7arQaF1LPjmeka4WtsT238QSfK etc.
across the matrix). But the official permissions table at
https://docs.github.com/en/rest/overview/permissions-required-for-github-apps
lists statuses:read for GET /repos/{owner}/{repo}/commits/{ref}/status,
so declare it explicitly to insulate against GitHub-side tightening.
The wait-for-deployment-action also reads the 'Vercel – <slug>'
combined commit status to resolve the dpl_xxx ID. The official
permissions table lists statuses:read for
GET /repos/{owner}/{repo}/commits/{ref}/status.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants