CI/CD
Workflow GitHub Actions pour le linting, la vérification de types, le build, les tests et le déploiement automatique.
Vue d'ensemble
ScaleRocket inclut un workflow GitHub Actions qui s'exécute à chaque push et pull request. Il lint, vérifie les types et build toutes les applications et packages pour détecter les problèmes avant qu'ils n'atteignent la production.
Fichier de workflow
Créez .github/workflows/ci.yml :
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
jobs:
ci:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 9
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: "pnpm"
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Lint
run: pnpm lint
- name: Type check
run: pnpm type-check
- name: Build
run: pnpm build
env:
NEXT_PUBLIC_SUPABASE_URL: ${{ secrets.NEXT_PUBLIC_SUPABASE_URL }}
NEXT_PUBLIC_SUPABASE_ANON_KEY: ${{ secrets.NEXT_PUBLIC_SUPABASE_ANON_KEY }}
NEXT_PUBLIC_APP_URL: https://app.example.com
VITE_SUPABASE_URL: ${{ secrets.NEXT_PUBLIC_SUPABASE_URL }}
VITE_SUPABASE_ANON_KEY: ${{ secrets.NEXT_PUBLIC_SUPABASE_ANON_KEY }}
- name: Test
run: pnpm test --if-presentCe que fait chaque étape
| Étape | Commande | Objectif |
|---|---|---|
| Lint | pnpm lint | Exécute ESLint sur toutes les applications et packages |
| Type check | pnpm type-check | Exécute tsc --noEmit dans tous les workspaces |
| Build | pnpm build | Build tous les packages puis toutes les applications via Turborepo |
| Test | pnpm test | Exécute les tests si configurés (ignoré si pas de script de test) |
Turborepo gère le graphe de dépendances -- les packages sont buildés avant les applications qui en dépendent.
Secrets requis
Définissez-les dans votre dépôt GitHub sous Settings > Secrets and variables > Actions :
| Secret | Objectif |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | URL Supabase pour le build |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Clé anon Supabase pour le build |
TURBO_TOKEN | (Optionnel) Token de cache distant Turborepo |
TURBO_TEAM | (Optionnel) Slug d'équipe Turborepo |
Les variables Supabase sont nécessaires car les applications les référencent au moment du build. Vous pouvez utiliser les identifiants de votre projet de production ou de staging.
Déploiement automatique
Vercel (par défaut)
Vercel déploie automatiquement lorsque vous poussez sur main. Aucune configuration CI supplémentaire n'est nécessaire pour le déploiement -- le workflow GitHub Actions gère les vérifications de qualité, et Vercel gère le déploiement séparément.
Le flux :
Push to main
├── GitHub Actions: lint, type-check, build, test
└── Vercel: build and deploy (independent)Supabase (migrations et fonctions)
Ajoutez une étape pour déployer automatiquement les migrations de base de données et les Edge Functions :
deploy-supabase:
runs-on: ubuntu-latest
needs: ci
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Supabase CLI
uses: supabase/setup-cli@v1
with:
version: latest
- name: Link Supabase project
run: pnpm supabase link --project-ref ${{ secrets.SUPABASE_PROJECT_REF }}
env:
SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }}
- name: Push database migrations
run: pnpm supabase db push
env:
SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }}
- name: Deploy Edge Functions
run: pnpm supabase functions deploy
env:
SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }}Secrets supplémentaires pour le déploiement Supabase :
| Secret | Objectif |
|---|---|
SUPABASE_ACCESS_TOKEN | Token d'accès personnel depuis supabase.com/dashboard/account/tokens |
SUPABASE_PROJECT_REF | ID de référence du projet |
Cache distant Turborepo
Accélérez les builds CI en mettant en cache les packages inchangés :
- Exécutez localement :
pnpm turbo login
pnpm turbo link-
Copiez le token et l'équipe depuis
.turbo/config.json. -
Ajoutez-les comme secrets GitHub (
TURBO_TOKEN,TURBO_TEAM).
Avec le cache distant, les packages inchangés sont ignorés en CI, réduisant significativement les temps de build.
Déploiements de prévisualisation par branche
Vercel crée automatiquement des déploiements de prévisualisation pour les pull requests. Chaque PR obtient une URL unique pour tester les changements avant le merge.
Le workflow CI s'exécute aussi sur les PRs, assurant la qualité du code avant la revue :
on:
pull_request:
branches: [main]Workflow recommandé
- Créez une branche feature :
git checkout -b feature/my-feature - Poussez sur GitHub :
git push -u origin feature/my-feature - Le CI s'exécute automatiquement (lint, type-check, build)
- Vercel crée un déploiement de prévisualisation
- Ouvrez une pull request, examinez la prévisualisation
- Mergez dans
main - Le CI s'exécute sur main, Vercel déploie en production
- Les migrations Supabase et les fonctions se déploient (si configuré)
Fini ? Marquez cette page comme terminée.