Bases des workflows
Workflow minimal
# .github/workflows/ci.yml name: CI on: push jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: echo "Hello from CI"
Concepts clés
WorkflowFichier YAML dans .github/workflows/ qui définit l'automatisation
EventDéclencheur qui démarre un workflow (push, PR, schedule, etc.)
JobEnsemble d'étapes s'exécutant sur le même runner
StepTâche individuelle — exécute une commande ou utilise une action
RunnerVM qui exécute les jobs (ubuntu-latest, macos-latest, windows-latest)
ActionUnité de code réutilisable référencée avec uses:
Déclencheurs
Événements courants
on: push: branches: [main] pull_request: branches: [main] schedule: - cron: "0 6 * * 1" # every Monday 6 AM UTC workflow_dispatch: # manual trigger
Filtres d'événements
branches:Déclencher uniquement pour des branches spécifiques
paths:Déclencher uniquement quand les fichiers correspondants changent
tags:Déclencher sur les push de tags (v*)
types: [opened, synchronize]Filtrer les types d'activité PR
branches-ignore:Exclure des branches spécifiques
paths-ignore:Exclure des chemins de fichiers spécifiques
Jobs et étapes
Configuration d'un job
jobs: test: runs-on: ubuntu-latest needs: build # depends on build job if: github.ref == 'refs/heads/main' timeout-minutes: 10 steps: - uses: actions/checkout@v4 - run: npm test
Types d'étapes
run:Exécuter une commande shell
uses:Utiliser une action publiée
with:Passer des entrées à une action
name:Nom d'affichage dans l'interface
id:Référencer les sorties via steps..outputs
if:Exécution conditionnelle
continue-on-error: trueNe pas faire échouer le job si l'étape échoue
Actions
Utiliser des actions
steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 - uses: ./.github/actions/my-action # local action
Actions populaires
actions/checkout@v4Récupérer le code du dépôt
actions/setup-node@v4Installer Node.js
actions/setup-python@v5Installer Python
actions/upload-artifact@v4Téléverser les artefacts de build
actions/download-artifact@v4Télécharger les artefacts d'un autre job
actions/cache@v4Mettre en cache les dépendances entre les runs
actions/github-script@v7Exécuter du JS avec le client API GitHub
Variables d'environnement
Définir des variables
env: # workflow-level NODE_ENV: production jobs: build: env: # job-level CI: true steps: - run: echo "$MY_VAR" env: # step-level MY_VAR: hello
Variables par défaut
github.shaSHA du commit qui a déclenché le workflow
github.refRéférence de branche ou de tag (refs/heads/main)
github.repositoryNom propriétaire/dépôt
github.actorUtilisateur qui a déclenché le workflow
github.event_nameÉvénement qui a déclenché le workflow
runner.osOS du runner (Linux, macOS, Windows)
Secrets
Utiliser des secrets
steps: - run: deploy --token "$TOKEN" env: TOKEN: ${{ secrets.DEPLOY_TOKEN }} - uses: some/action@v1 with: api-key: ${{ secrets.API_KEY }}
Règles pour les secrets
secrets.GITHUB_TOKENToken généré automatiquement, limité au dépôt
Settings → SecretsAjouter des secrets dans les paramètres du dépôt ou de l'organisation
MasquageLes valeurs des secrets sont masquées automatiquement dans les logs
Environment secretsLimités à un environnement de déploiement
Org secretsPartagés entre les dépôts d'une organisation
Stratégie de matrice
Builds matriciels
jobs: test: strategy: matrix: os: [ubuntu-latest, macos-latest] node: [18, 20] runs-on: ${{ matrix.os }} steps: - uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }}
Options de matrice
matrix:Définir les combinaisons de variables à développer
include:Ajouter des combinaisons supplémentaires à la matrice
exclude:Supprimer des combinaisons spécifiques
fail-fast: falseContinuer les autres jobs si l'un échoue
max-parallel: 2Limiter les jobs matriciels simultanés
Cache
Mettre en cache les dépendances
- uses: actions/cache@v4 with: path: ~/.npm key: npm-${{ hashFiles('package-lock.json') }} restore-keys: npm-
Cache intégré
- uses: actions/setup-node@v4 with: node-version: 20 cache: npm # auto-cache for npm/yarn/pnpm - uses: actions/setup-python@v5 with: python-version: "3.12" cache: pip # auto-cache for pip
Artefacts
Téléverser et télécharger
- uses: actions/upload-artifact@v4 with: name: build-output path: dist/ retention-days: 7 - uses: actions/download-artifact@v4 with: name: build-output
Notes sur les artefacts
retention-daysSuppression automatique après N jours (défaut : 90)
pathFichier ou répertoire à téléverser (supporte les globs)
Cross-jobTéléverser dans un job, télécharger dans un autre avec needs:
compression-level0 (aucune) à 9 (max), défaut 6
Patterns courants
Déploiement conditionnel
- name: Deploy to production if: github.ref == 'refs/heads/main' run: ./deploy.sh - name: Post PR comment if: github.event_name == 'pull_request' run: gh pr comment $PR --body "Build passed"
Expressions utiles
success()Vrai si toutes les étapes précédentes ont réussi
failure()Vrai si une étape précédente a échoué
always()S'exécute quel que soit le statut (nettoyage)
cancelled()Vrai si le workflow a été annulé
contains(github.ref, 'release')Vérification de contenu de chaîne
startsWith(github.ref, 'refs/tags')Vérification de préfixe de chaîne
hashFiles('**/lock*')SHA-256 des fichiers (pour les clés de cache)