CI/CD Pipelines
Ship confidently with zero-drama deploys. We use Vercel for hosting,
Git for source-of-truth, and a small GitHub Action to guarantee a deploy
on every push to main.
Branch model
- main → Production (auto-deploy)
- Feature branches → Optional preview deploys
Keep PRs small. Merge with squash to maintain a clean history.
Production deploys (push to main)
Vercel should auto-build on push to main. To guarantee a deploy
even if a webhook flakes, we also call a Deploy Hook via GitHub Actions.
.github/workflows/deploy.yml
name: Deploy on push (Vercel Hook)
on:
push:
branches: [ "main" ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Call Vercel Deploy Hook
run: curl -fsSL -X POST "$VERCEL_DEPLOY_HOOK_URL"
env:
VERCEL_DEPLOY_HOOK_URL: ${{ secrets.VERCEL_DEPLOY_HOOK_URL }}
In Vercel → Project Settings → Git → Deploy Hooks, create a hook for
main. Save the URL as the GitHub secret
VERCEL_DEPLOY_HOOK_URL.
Preview deploys (optional)
Open a PR or push a feature branch; Vercel creates a unique preview URL. Use these for reviews, link checks, and content sign-off.
Manual production deploy (CLI)
# from repo root
npx vercel link --project justinelonglat-lane-docs
npx vercel --prod
Useful when testing or if you’ve temporarily disabled automatic deploys.
Static build behavior
- No build step required for pure HTML/CSS.
- Root Directory:
/(project root). - Ignored Build Step: leave empty (let deploys run).
Quality gate (format check)
Lightweight formatting check to keep diffs small and consistent. (From Tooling Setup.)
.github/workflows/quality.yml
name: Quality
on:
pull_request:
push:
branches: [ "main" ]
jobs:
quality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci || pnpm i
- run: npm run fmt:check || pnpm fmt:check
Next step
Review the big picture and decisions behind the stack: