Skip to content

CI/CD & GitHub Actions

WorkflowBestandTriggerDoel
Deploy Appdeploy-web.ymlPush naar main (apps/web)Build + deploy Vite SPA naar CF Pages
Deploy APIdeploy-api.ymlPush naar main (apps/api)Deploy Hono API naar CF Workers
Deploy Docsdeploy-docs.ymlPush naar main (apps/docs)Build + deploy Starlight naar CF Pages
CI Checkci.ymlPull RequestLint, typecheck, build check

Stel deze in via GitHub → Repository → Settings → Secrets and variables → Actions:

CLOUDFLARE_API_TOKEN ← Cloudflare API token met Pages:Edit + Workers:Edit rechten
CLOUDFLARE_ACCOUNT_ID ← Cloudflare account ID
SUPABASE_URL ← Supabase project URL
SUPABASE_ANON_KEY ← Supabase anon key (publiek, voor app build)
API_URL ← API URL (https://api.[domein].com)
.github/workflows/ci.yml
name: CI
on:
pull_request:
branches:
- main
- develop
jobs:
check:
runs-on: ubuntu-latest
name: Lint, Typecheck & Build
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Typecheck
run: pnpm typecheck
- name: Lint
run: pnpm lint
- name: Build
run: pnpm build
.github/workflows/deploy-web.yml
name: Deploy App
on:
push:
branches:
- main
- develop
paths:
- 'apps/web/**'
- 'packages/shared/**'
jobs:
deploy:
runs-on: ubuntu-latest
name: Deploy Vite SPA naar Cloudflare Pages
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm --filter @doghotel/web build
env:
VITE_SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
VITE_SUPABASE_ANON_KEY: ${{ secrets.SUPABASE_ANON_KEY }}
VITE_API_URL: ${{ secrets.API_URL }}
- name: Deploy naar Cloudflare Pages
uses: cloudflare/pages-action@v1
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
projectName: doghotel-app
directory: apps/web/dist
gitHubToken: ${{ secrets.GITHUB_TOKEN }}
branch: ${{ github.ref_name }}
.github/workflows/deploy-api.yml
name: Deploy API
on:
push:
branches:
- main
paths:
- 'apps/api/**'
- 'packages/shared/**'
jobs:
deploy:
runs-on: ubuntu-latest
name: Deploy Hono API naar Cloudflare Workers
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Deploy naar Cloudflare Workers
run: pnpm --filter @doghotel/api deploy
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
.github/workflows/deploy-docs.yml
name: Deploy Docs
on:
push:
branches:
- main
paths:
- 'apps/docs/**'
jobs:
deploy:
runs-on: ubuntu-latest
name: Deploy Starlight docs
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm --filter @doghotel/docs build
- name: Deploy naar Cloudflare Pages
uses: cloudflare/pages-action@v1
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
projectName: doghotel-docs
directory: apps/docs/dist
gitHubToken: ${{ secrets.GITHUB_TOKEN }}
Developer pusht naar develop
→ CI workflow draait (lint + typecheck + build)
→ Bij succes: deploy app naar preview omgeving
Pull Request naar main
→ CI workflow draait
→ Review + merge
Push naar main
→ Deploy app naar productie (Pages)
→ Deploy API naar productie (Workers)
→ Deploy docs naar productie (Pages)
(alleen als relevante paths gewijzigd zijn)