---
title: Intégration continue
description: Organiser des contrôles rapides et bloquants avec GitHub Actions.
---

Un workflow GitHub Actions est un fichier YAML placé dans `.github/workflows/`. Il contient des événements déclencheurs, des jobs et des étapes exécutées par des runners.

## Exemple pour un monorepo

```yaml
name: CI

on:
  pull_request:
    branches: [main]
  push:
    branches: [main]

permissions:
  contents: read

jobs:
  backend:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: backend
    steps:
      - uses: actions/checkout@v6
      - uses: actions/setup-node@v6
        with:
          node-version: 24
          cache: npm
          cache-dependency-path: backend/package-lock.json
      - run: npm ci
      - run: npm run lint
      - run: npm test
      - run: npm run build

  frontend:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: frontend
    steps:
      - uses: actions/checkout@v6
      - uses: actions/setup-node@v6
        with:
          node-version: 24
          cache: npm
          cache-dependency-path: frontend/package-lock.json
      - run: npm ci
      - run: npm run lint
      - run: npm test
      - run: npm run build

  docker-build:
    runs-on: ubuntu-latest
    needs: [backend, frontend]
    steps:
      - uses: actions/checkout@v6
      - run: docker compose -f docker-compose.prod.yml build
```

Le backend et le frontend s'exécutent en parallèle. `docker-build` ne démarre que si les deux ont réussi : il joue le rôle de porte de sortie.

<Callout title="Adapte les scripts au dépôt" type="info">
  Les commandes `lint`, `test` et `build` doivent exister dans les `package.json`. Si le projet possède un fichier de version Node, utilise `node-version-file` pour garder la CI alignée avec le développement.
</Callout>

## Installer de façon reproductible

`npm ci` respecte le lockfile et échoue si celui-ci n'est plus cohérent avec `package.json`. Il est préférable à `npm install` dans la CI.

Le cache accélère le téléchargement des paquets, mais ne remplace pas `npm ci`. Les dépendances continuent d'être vérifiées à chaque run.

## Protéger la branche principale

Dans les règles de branche du dépôt :

1. impose une pull request avant fusion ;
2. rends les jobs CI obligatoires ;
3. exige que la branche soit à jour ;
4. empêche la fusion si un job échoue ;
5. limite les contournements administrateur.

## Garder la pipeline lisible

- donne aux jobs des noms qui indiquent leur responsabilité ;
- parallélise les contrôles indépendants ;
- place les tests lents après les vérifications rapides ;
- évite de dupliquer la même logique dans plusieurs workflows ;
- conserve les rapports de test utiles au diagnostic ;
- épingle les actions tierces à un SHA de commit dans les dépôts sensibles.

## Ordre recommandé

```text
format/lint → tests unitaires → build → tests d'intégration → build Docker
```

La [documentation GitHub Actions](https://docs.github.com/en/actions/reference/workflows-and-actions) décrit les événements, jobs, permissions et dépendances disponibles.

