Skip to content

Remove the Vercel deploy pipeline - #347

Merged
Deodat-Lawson merged 1 commit into
mainfrom
build/remove-vercel-build
Aug 17, 2026
Merged

Remove the Vercel deploy pipeline#347
Deodat-Lawson merged 1 commit into
mainfrom
build/remove-vercel-build

Conversation

@Deodat-Lawson

@Deodat-Lawson Deodat-Lawson commented Aug 17, 2026

Copy link
Copy Markdown
Owner

Why

The repo is no longer one Next.js app behind a Vercel project. It is a monorepo of several apps and services, and the thing that actually ships them is docker.yml publishing images to GHCR. The Vercel pipeline was still wired up alongside that, so every PR rebuilt a preview for a deployment target nothing depends on.

What was removed

There was never a GitHub Actions job for Vercel — deploys ran off the Vercel Git integration reading these files:

File What it did
apps/web/vercel.json install/build/migrate + the preview ignoreCommand
apps/landing/vercel.json install/build + ignoreCommand
.vercelignore deploy-time file exclusions
docs/deployment/vercel.md 247-line deploy guide

What was repaired

Deleting those left live references behind:

  • scripts/ci/check-no-push.mjs listed both vercel.json files as deploy surfaces. Just dropping them would silently shrink the guardrail, so apps/worker/Dockerfile takes their place — a real deploy surface that was never covered. Gate re-run, passes.
  • packages/core/scripts/migrate.mjs recorded migration attribution from VERCEL_GIT_COMMIT_SHA, which nothing sets anymore → GITHUB_SHA, what the surviving pipeline actually exports.
  • packages/core/scripts/guard-push.mjs tripped on ["CI", "VERCEL", "VERCEL_ENV"]["CI", "GITHUB_ACTIONS"].
  • docs/deployment.md — "Option 2: Vercel" becomes the GHCR container-image path docker.yml already builds.
  • Prose/comment cleanups in REPOSITORY.md, README.md, CLAUDE.md, CI.yml, pnpm-workspace.yaml, apps/web/Dockerfile, and the root package.json description (its build/db:migrate aliases were justified solely by "a deploy platform configured with the repository root" — kept as conveniences, rationale rewritten).
  • apps/web/next.config.ts — removed two orphaned comment lines describing a Vercel output-tracing option that no longer exists in the file.

The __tests__ warning, checked rather than assumed

CLAUDE.md and apps/web/README.md both warned that a script importing __tests__ helpers "will pass CI but break every Vercel deploy."

That hazard does not transfer to Docker. .dockerignore's bare __tests__ pattern matches only the build-context root, so apps/web/__tests__ is copied into the image — verified against a throwaway build rather than reasoned about. The warning was a .vercelignore artifact and dies with it, so it is removed rather than retargeted, and the three run-founder-weekly-review-*.ts scripts .vercelignore special-cased need no replacement handling.

Deliberately left alone

Runtime is not CI/CD: @vercel/analytics in both apps, the @vercel/blob storage adapter and its callers, and the VERCEL_ENV / VERCEL reads in metrics/route.ts, health/route.ts, and CloudAnalytics.tsx all stay. Also untouched: api/adeu (already deprecated and never deployed), the landing site's Vercel marketing pages, and historical ADRs.

Noticed, not fixed

  • docs/architecture/current-infrastructure-map.md has several Vercel references, but it is already a stale snapshot describing services/ocr-router, services/ocr-worker, and sidecar/ — none of which exist. Patching only its Vercel lines would make it look freshly maintained while still being wrong. Needs its own refresh.
  • /api/health reports version from GIT_COMMIT_SHA, which nothing in the repo sets, so it reports "unknown". Already true for every non-Vercel deploy, so not a regression — but wiring it as a Docker build arg would be a small win.

Verification

  • node scripts/ci/check-no-push.mjs passes
  • All edited .mjs files pass node --check; CI.yml / pnpm-workspace.yaml parse as YAML; root package.json parses
  • No typecheck run — this worktree has no node_modules. The only .ts edit was a comment-only deletion. Prettier's glob (ts,tsx,js,jsx,mdx) does not cover the .mjs / .md / .yml files touched.

🤖 Generated with Claude Code


Note

Low Risk
Documentation and deploy-config deletion with small script env renames; no application runtime or auth logic changes.

Overview
Removes the unused Vercel deploy path so PRs no longer rebuild previews for a target nothing ships to. GHCR images from docker.yml and Compose are the documented shipping path.

Deleted: apps/web/vercel.json, apps/landing/vercel.json, root .vercelignore, and the full docs/deployment/vercel.md guide (install/build/migrate-on-prod, ignore commands, and deploy exclusions).

CI / schema tooling: scripts/ci/check-no-push.mjs drops vercel.json from deploy surfaces and adds apps/worker/Dockerfile. guard-push.mjs blocks on CI / GITHUB_ACTIONS instead of VERCEL / VERCEL_ENV. migrate.mjs records migration attribution from GITHUB_SHA instead of VERCEL_GIT_COMMIT_SHA.

Docs and comments: docs/deployment.md replaces “Option 2: Vercel” with container images on any host (migrate as a one-shot job, worker + Inngest). REPOSITORY.md, README.md, CLAUDE.md, CI.yml, pnpm-workspace.yaml, and apps/web/Dockerfile prose now describe production image builds, not Vercel. Root package.json description reframes build / db:migrate as convenience aliases. Removed Vercel-specific warnings from apps/web/README.md and orphaned Vercel output comments from apps/web/next.config.ts.

Explicitly unchanged: runtime @vercel/* usage (analytics, blob adapter, health/metrics env reads) stays; only the repo’s Vercel pipeline is removed.

Reviewed by Cursor Bugbot for commit 2004724. Bugbot is set up for automated code reviews on this repo. Configure here.

The repo is no longer one Next.js app behind a Vercel project. It is a
monorepo of several apps and services, and the thing that actually ships
them is docker.yml publishing images to GHCR. The Vercel pipeline was
still wired up alongside that, so every PR rebuilt a preview for a
deployment target nothing depends on.

Delete the pipeline itself. There was never a GitHub Actions job for it —
deploys ran off the Vercel Git integration reading these files:

  - apps/web/vercel.json      install/build/migrate + the preview ignoreCommand
  - apps/landing/vercel.json
  - .vercelignore
  - docs/deployment/vercel.md

Then repair what pointed at them:

  - check-no-push.mjs listed both vercel.json files as deploy surfaces.
    Dropping them silently shrank the guardrail, so apps/worker/Dockerfile
    takes their place — it is a real deploy surface that was never covered.
  - migrate.mjs recorded migration attribution from VERCEL_GIT_COMMIT_SHA,
    which nothing sets anymore. GITHUB_SHA is what the surviving pipeline
    actually exports.
  - guard-push.mjs tripped on VERCEL / VERCEL_ENV; now CI / GITHUB_ACTIONS.
  - docs/deployment.md "Option 2: Vercel" becomes the GHCR container-image
    path that docker.yml already builds.

CLAUDE.md and apps/web/README.md both warned that a script importing
__tests__ helpers "will pass CI but break every Vercel deploy". That
hazard does not transfer to Docker: .dockerignore's bare `__tests__`
pattern matches only the build-context root, so apps/web/__tests__ is
copied into the image (verified against a throwaway build). The warning
was a .vercelignore artifact and dies with it, so it is removed rather
than retargeted — and the three run-founder-weekly-review-*.ts scripts
.vercelignore special-cased need no replacement handling.

Runtime stays: @vercel/analytics, the @vercel/blob storage adapter, and
the VERCEL_ENV reads in the metrics/health routes are hosting-independent
choices, not CI/CD.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 17, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
launch-stack Ready Ready Preview Aug 17, 2026 4:44am
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
pdr-ai-v2 Ignored Ignored Aug 17, 2026 4:44am

@cursor

cursor Bot commented Aug 17, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_65f5d85d-d3b2-47e4-95d3-1fdcdb6f589c)

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 20047241dd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/deployment.md
Comment on lines +105 to +107
2. Apply schema before rolling the app — run `db:migrate` as a one-shot job on
the same image (`docker compose run --rm migrate`, a Kubernetes Job, or a
release command). Nothing applies schema on container boot.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Publish a runnable migration image

For operators following this new GHCR deployment path, the documented one-shot migration cannot run on “the same image”: docker.yml publishes only the runner target, while the migrate target is built with push: false, and the runner contains neither pnpm nor the migration scripts. Consequently, a Kubernetes Job or release command based on ghcr.io/<owner>/<repo>-web cannot execute db:migrate, leaving fresh or upgraded databases without the required schema. Publish the migration target separately or document an executable migration path.

Useful? React with 👍 / 👎.

Comment thread apps/web/vercel.json
{
"$schema": "https://openapi.vercel.sh/vercel.json",
"installCommand": "npx -y pnpm@10.15.1 install --frozen-lockfile --ignore-scripts",
"buildCommand": "if [ \"$VERCEL_ENV\" = \"production\" ]; then npx -y pnpm@10.15.1 db:migrate; else npx -y pnpm@10.15.1 db:verify || true; fi && npx -y pnpm@10.15.1 build",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Retire the live Vercel guide before deleting its config

When a visitor follows the still-active /deployment Vercel flow in apps/landing, the guide explicitly tells them to select apps/web so Vercel uses this file and then simply click Deploy. Deleting this buildCommand removes the only step that applies production migrations, so such deployments can still be triggered through Vercel's Git integration but will run against a missing or stale schema. Remove/update that live deployment flow as part of this change, or retain equivalent migration configuration.

Useful? React with 👍 / 👎.

@Deodat-Lawson
Deodat-Lawson merged commit 54bda71 into main Aug 17, 2026
15 of 16 checks passed
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.

1 participant