ci: extract wait-for-vercel-project to vercel/wait-for-deployment-action#2065
Conversation
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.
|
🧪 E2E Test Results❌ Some tests failed Summary
❌ Failed Tests▲ Vercel Production (5 failed)astro (1 failed):
example (1 failed):
hono (1 failed):
sveltekit (1 failed):
vite (1 failed):
Details by Category❌ ▲ Vercel Production
✅ 💻 Local Development
✅ 📦 Local Production
✅ 🐘 Local Postgres
✅ 🪟 Windows
✅ 📋 Other
❌ Some E2E test jobs failed:
Check the workflow run for details. |
📊 Benchmark Results
workflow with no steps💻 Local Development
▲ Production (Vercel)
workflow with 1 step💻 Local Development
▲ Production (Vercel)
workflow with 10 sequential steps💻 Local Development
▲ Production (Vercel)
workflow with 25 sequential steps💻 Local Development
▲ Production (Vercel)
workflow with 50 sequential steps💻 Local Development
▲ Production (Vercel)
Promise.all with 10 concurrent steps💻 Local Development
▲ Production (Vercel)
Promise.all with 25 concurrent steps💻 Local Development
▲ Production (Vercel)
Promise.all with 50 concurrent steps💻 Local Development
▲ Production (Vercel)
Promise.race with 10 concurrent steps💻 Local Development
▲ Production (Vercel)
Promise.race with 25 concurrent steps💻 Local Development
▲ Production (Vercel)
Promise.race with 50 concurrent steps💻 Local Development
▲ Production (Vercel)
workflow with 10 sequential data payload steps (10KB)💻 Local Development
▲ Production (Vercel)
workflow with 25 sequential data payload steps (10KB)💻 Local Development
▲ Production (Vercel)
workflow with 50 sequential data payload steps (10KB)💻 Local Development
▲ Production (Vercel)
workflow with 10 concurrent data payload steps (10KB)💻 Local Development
▲ Production (Vercel)
workflow with 25 concurrent data payload steps (10KB)💻 Local Development
▲ Production (Vercel)
workflow with 50 concurrent data payload steps (10KB)💻 Local Development
▲ Production (Vercel)
Stream Benchmarks (includes TTFB metrics)workflow with stream💻 Local Development
▲ Production (Vercel)
stream pipeline with 5 transform steps (1MB)💻 Local Development
▲ Production (Vercel)
10 parallel streams (1MB each)💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro fan-out fan-in 10 streams (1MB each)💻 Local Development
▲ Production (Vercel)
SummaryFastest Framework by WorldWinner determined by most benchmark wins
Fastest World by FrameworkWinner determined by most benchmark wins
Column Definitions
Worlds:
❌ Some benchmark jobs failed:
Check the workflow run for details.
Check the workflow run for details. |
There was a problem hiding this comment.
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 setspermissions: contents: readat the workflow level (there’s no job-levelpermissions: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.
…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.
vercel/wait-for-deployment-action
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.
Summary
Moved
.github/actions/wait-for-vercel-projectto a standalone repository so it can be shared with other repos.@593ea7dfb974467fcc5973ba5e99441ede58eb05(current main, CI green).Changes
.github/actions/wait-for-vercel-project/(action.yml, src, dist, package.json, pnpm-lock.yaml, LICENSE.md).benchmarks.ymldispatch-front-workflow-release-pr.ymldocs-checks.ymltarballs-checks.ymltests.ymlAll
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
@actions/corein favor of a tiny in-tree replacement, which also eliminates the transitiveundicidependency surface that Wiz/Snyk regularly flag.Preview/Productionenv andVercelcommit status whenproject-slugis omitted; suffixedPreview – <slug>/Vercel – <slug>when set. Multi-project repos like this one keep working unchanged.