ScaleRocket/Web

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-present

Ce que fait chaque étape

ÉtapeCommandeObjectif
Lintpnpm lintExécute ESLint sur toutes les applications et packages
Type checkpnpm type-checkExécute tsc --noEmit dans tous les workspaces
Buildpnpm buildBuild tous les packages puis toutes les applications via Turborepo
Testpnpm testExé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 :

SecretObjectif
NEXT_PUBLIC_SUPABASE_URLURL Supabase pour le build
NEXT_PUBLIC_SUPABASE_ANON_KEYClé 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 :

SecretObjectif
SUPABASE_ACCESS_TOKENToken d'accès personnel depuis supabase.com/dashboard/account/tokens
SUPABASE_PROJECT_REFID de référence du projet

Cache distant Turborepo

Accélérez les builds CI en mettant en cache les packages inchangés :

  1. Exécutez localement :
pnpm turbo login
pnpm turbo link
  1. Copiez le token et l'équipe depuis .turbo/config.json.

  2. 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é

  1. Créez une branche feature : git checkout -b feature/my-feature
  2. Poussez sur GitHub : git push -u origin feature/my-feature
  3. Le CI s'exécute automatiquement (lint, type-check, build)
  4. Vercel crée un déploiement de prévisualisation
  5. Ouvrez une pull request, examinez la prévisualisation
  6. Mergez dans main
  7. Le CI s'exécute sur main, Vercel déploie en production
  8. Les migrations Supabase et les fonctions se déploient (si configuré)

Fini ? Marquez cette page comme terminée.

On this page