docs/runbooks/deploy-control.md beschrijft triggers (push/PR/dispatch), path-filter, labels (skip-deploy/force-deploy), beslismatrix per scenario, voorbeelden en troubleshooting. CLAUDE.md hardstop-regel "Deployment" verwijst naar runbook. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.6 KiB
| title | status | audience | language | last_updated | when_to_read | ||
|---|---|---|---|---|---|---|---|
| Deploy-controle: triggers, labels, path-filter | active |
|
nl | 2026-05-05 | Vóór een PR mergen, vóór doc-only changes pushen, of bij troubleshooting van Vercel-deployments. |
Deploy-controle
Selectieve controle over wanneer Vercel-deployments worden uitgevoerd
vanuit de GitHub Actions workflow .github/workflows/ci.yml. Vercel's
eigen Git-integratie staat uit (vercel.json: git.deploymentEnabled: false) — de workflow is de enige bron van deploy-truth.
Triggers en defaults
| Event | Default-deploy |
|---|---|
push naar main |
Productie (vercel deploy --prod) — alleen als path-filter zegt "code" |
pull_request naar main |
Preview (vercel deploy) — alleen als path-filter zegt "code" en geen skip-deploy label |
workflow_dispatch |
Handmatig — kies target: preview | production in Actions-tab |
CI (lint, typecheck, test, build) draait altijd op push/PR — ook voor doc-only changes. Alleen de deploy-jobs respecteren path-filter en labels.
Path-filter
Job changes (dorny/paths-filter@v3) zet output code=true als
één van deze paden gewijzigd is:
app/**
components/**
lib/**
actions/**
stores/**
prisma/**
public/**
package.json
package-lock.json
next.config.ts
tsconfig.json
vercel.json
proxy.ts
middleware.ts
.github/workflows/**
Wijzigingen aan docs/, CLAUDE.md, README.md, .vscode/**, etc.
zetten code=false → geen deploy (zelfs niet preview).
Labels (alleen op PRs)
| Label | Effect |
|---|---|
skip-deploy |
Preview-deploy overslaan, ook als path-filter "code" zegt |
force-deploy |
Preview-deploy forceren, ook als path-filter "geen code" zegt |
Beide labels werken alleen op PR's. Op pushes naar main heeft
alleen path-filter invloed (productie-gate).
Beslismatrix per scenario
| Trigger | Path-filter | Labels | Resultaat |
|---|---|---|---|
| PR met code-change | code=true |
(geen) | ✅ Preview-deploy |
| PR met code-change | code=true |
skip-deploy |
❌ Preview overgeslagen |
| PR met doc-only | code=false |
(geen) | ❌ Geen deploy |
| PR met doc-only | code=false |
force-deploy |
✅ Preview-deploy |
| PR met code-change | code=true |
skip-deploy + force-deploy |
✅ force-deploy wint |
| Push main code | code=true |
n.v.t. | ✅ Productie-deploy + migrate |
| Push main doc-only | code=false |
n.v.t. | ❌ Geen deploy |
workflow_dispatch target=preview |
n.v.t. | n.v.t. | ✅ Manuele preview |
workflow_dispatch target=production |
n.v.t. | n.v.t. | ✅ Manuele prod + migrate |
Voorbeelden
Doc-only PR die je niet wil deployen (default):
git checkout -b docs/fix-typo
# alleen docs/foo.md aanpassen
git commit -am "docs: typo"
gh pr create
# → CI runt, deploy-preview = SKIPPED
Doc-only PR die je wél visueel wil checken:
gh pr create
gh pr edit --add-label force-deploy
# → CI runt, deploy-preview RUNT
Code-PR die je niet wil deployen (bv. WIP):
gh pr create
gh pr edit --add-label skip-deploy
# → CI runt, deploy-preview SKIPPED
Manuele productie-redeploy zonder push:
- GitHub repo → Actions → CI workflow → "Run workflow" knop
target: production→ Run- →
deploy-manualjob draaitprisma migrate deploy+vercel deploy --prod
Troubleshooting
Probleem: Twee deploys verschijnen op Vercel-dashboard per push.
→ Check vercel.json bevat "git": { "deploymentEnabled": false }. Zo
niet: Vercel's eigen Git-integratie deployt parallel naast de workflow.
Probleem: Mijn PR met code-change deployt geen preview.
→ Check labels: heb je skip-deploy aangezet? Verwijder het label of
voeg force-deploy toe.
→ Check changes-job output in Actions-tab: zegt het code=false?
Mogelijk staat je wijziging buiten de path-filter (bv. een nieuw
top-level bestand). Pas filter aan in ci.yml als nodig.
Probleem: Push naar main triggert geen prod-deploy.
→ Check Actions-tab changes-job output. code=false betekent geen
deploy.
→ Forceer via workflow_dispatch met target=production.
Probleem: workflow_dispatch toont geen "Run workflow" knop.
→ Workflow moet minstens één keer op de default branch (main) hebben gedraaid voordat de knop verschijnt. Eerste keer: merge naar main of push direct naar main.
Referenties
- Workflow:
.github/workflows/ci.yml - Vercel-config:
vercel.json - Plan:
docs/plans/auto-pr-deploy-sync.mdDeel A - Branch- & commit-strategie:
docs/runbooks/branch-and-commit.md - Auto-PR-flow (toekomstig):
docs/plans/auto-pr-deploy-sync.mdDeel B