Testez vos workflows GitHub Actions en quelques secondes, sans pousser sur GitHub. act exécute vos workflows localement via Docker, permettant un développement itératif rapide. Vous économisez vos minutes Actions et évitez les allers-retours frustrants push → attente → échec → correction → push.
Architecture de act
Section intitulée « Architecture de act »act lit vos fichiers YAML dans .github/workflows/, crée des conteneurs Docker qui imitent les runners GitHub, et exécute les jobs comme s’ils tournaient sur GitHub. Les résultats (logs, artifacts, status) sont affichés localement.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Installer act sur Linux, macOS et Windows
- Exécuter des workflows avec différents événements (push, PR, workflow_dispatch)
- Gérer les secrets et variables d’environnement
- Configurer les images Docker optimales
- Débugger efficacement avec les options avancées
Prérequis
Section intitulée « Prérequis »Avant d’installer act, vous devez avoir :
- Docker installé et en cours d’exécution (act crée des conteneurs)
- Un terminal (bash, zsh, PowerShell)
- Un projet avec des workflows dans
.github/workflows/
Pour vérifier que Docker fonctionne :
docker versionSi Docker n’est pas installé, consultez le guide Docker.
Installation
Section intitulée « Installation »Avec Homebrew :
brew install actAvec Homebrew :
brew install actAvec asdf-vm :
asdf plugin add actasdf install act latestasdf set --home act latestDepuis les releases GitHub :
# Télécharger la dernière versioncurl -sSL https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bashAvec Chocolatey :
choco install act-cliAvec Scoop :
scoop install actVérification de l’installation :
act --versionact version 0.2.84Premier lancement
Section intitulée « Premier lancement »À la première exécution, act vous demande quelle image Docker utiliser pour simuler les runners GitHub. Trois options sont proposées :
| Image | Taille | Compatibilité |
|---|---|---|
| Micro (~200 Mo) | Très légère | Limitée (manque beaucoup d’outils) |
| Medium (~500 Mo) | Équilibrée | Bonne pour la plupart des cas |
| Large (~18 Go) | Complète | Proche de l’environnement GitHub |
Pour commencer, choisissez Medium. Vous pourrez changer plus tard.
# Premier lancement - choisissez Mediumactact sauvegarde votre choix dans ~/.actrc pour les prochaines exécutions.
Utilisation de base
Section intitulée « Utilisation de base »Exécuter le workflow par défaut
Section intitulée « Exécuter le workflow par défaut »La commande act sans argument simule un événement push et exécute les
workflows qui répondent à cet événement :
actExécuter un workflow spécifique
Section intitulée « Exécuter un workflow spécifique »# Par chemin de fichieract -W .github/workflows/ci.yml
# Par nom du workflow (défini dans name:)act -W .github/workflows/build.ymlExécuter un job spécifique
Section intitulée « Exécuter un job spécifique »Si votre workflow contient plusieurs jobs, vous pouvez n’en exécuter qu’un :
# Exécuter uniquement le job "test"act -j test[CI/test] 🚀 Start image=catthehacker/ubuntu:act-latest[CI/test] 🐳 docker pull image=catthehacker/ubuntu:act-latest[CI/test] 🐳 docker create image=catthehacker/ubuntu:act-latest[CI/test] ⭐ Run Main Checkout[CI/test] ✅ Success - Main Checkout[CI/test] ⭐ Run Main Run tests| Tests passed![CI/test] ✅ Success - Main Run tests[CI/test] 🏁 Job succeededLes icônes indiquent le statut : ⭐ step en cours, ✅ succès, ❌ échec.
# Exécuter uniquement le job "build" du workflow ci.ymlact -W .github/workflows/ci.yml -j buildSimuler différents événements
Section intitulée « Simuler différents événements »GitHub Actions se déclenche sur différents événements. act peut les simuler :
# Simuler un push (par défaut)act push
# Simuler une pull requestact pull_request
# Simuler un workflow manuelact workflow_dispatch
# Simuler un événement de releaseact releaseLister les workflows disponibles
Section intitulée « Lister les workflows disponibles »# Voir tous les workflows et leurs jobsact -lStage Job ID Job name Workflow name Workflow file Events0 test test CI ci.yml push,pull_request1 build build CI ci.yml push,pull_requestChaque ligne indique : le stage (ordre d’exécution), l’ID du job, son nom, le workflow parent et les événements déclencheurs.
# Voir les jobs pour un événement spécifiqueact -l pushact -l pull_requestVisualiser le graphe des dépendances
Section intitulée « Visualiser le graphe des dépendances »Pour voir graphiquement l’ordre d’exécution des jobs :
act -g ╭──────╮ │ test │ ╰──────╯ ⬇ ╭───────╮ │ build │ ╰───────╯Utile pour comprendre les dépendances needs: entre jobs.
Gestion des secrets
Section intitulée « Gestion des secrets »Les workflows utilisent souvent des secrets (${{ secrets.TOKEN }}). act
propose plusieurs méthodes pour les fournir.
Fichier .secrets
Section intitulée « Fichier .secrets »Créez un fichier .secrets à la racine du projet :
# .secrets (format clé=valeur)GITHUB_TOKEN=ghp_xxxxxxxxxxxxNPM_TOKEN=npm_xxxxxxxxxxAWS_ACCESS_KEY_ID=AKIAXXXXXXXXAWS_SECRET_ACCESS_KEY=xxxxxxxxxxEnsuite, utilisez :
act --secret-file .secretsSecrets en ligne de commande
Section intitulée « Secrets en ligne de commande »Pour des tests rapides ou en CI :
act -s GITHUB_TOKEN=ghp_xxxx -s MY_SECRET=valeurVariables d’environnement
Section intitulée « Variables d’environnement »Pour les variables ${{ vars.X }} (non sensibles), utilisez un fichier .vars :
ENVIRONMENT=developmentAPI_URL=https://api-dev.example.comact --var-file .varsConfiguration avancée
Section intitulée « Configuration avancée »Fichier .actrc
Section intitulée « Fichier .actrc »Créez un fichier .actrc à la racine du projet pour sauvegarder vos options :
--secret-file .secrets--var-file .vars-P ubuntu-24.04=catthehacker/ubuntu:act-latest-P ubuntu-22.04=catthehacker/ubuntu:act-22.04--container-architecture linux/amd64Chaque ligne correspond à une option de la commande act.
Images Docker personnalisées
Section intitulée « Images Docker personnalisées »act utilise des images Docker qui imitent les runners GitHub. Par défaut, ces images sont plus légères mais moins complètes. Pour plus de compatibilité :
# Utiliser une image plus complèteact -P ubuntu-24.04=catthehacker/ubuntu:act-latest
# Ou votre propre imageact -P ubuntu-24.04=mon-registry/mon-image:tagMode verbeux pour le debug
Section intitulée « Mode verbeux pour le debug »# Logs détaillésact -vlevel=debug msg="Loading workflows from '.github/workflows'"level=debug msg="Found workflow 'ci.yml'"level=debug msg="Planning job: test"level=debug msg="Job.Steps: Checkout"level=debug msg="Job.Steps: Run tests"level=debug msg="using github ref: refs/heads/main"level=debug msg="Detected CPUs: 16"Le mode -v révèle le chargement des workflows, la planification des jobs et les variables d’environnement Git détectées.
# Encore plus détaillé (inclut les appels Docker)act -vvExécution à sec (dry-run)
Section intitulée « Exécution à sec (dry-run) »Pour voir ce qui serait exécuté sans vraiment l’exécuter :
act -n*DRYRUN* [CI/test] ⭐ Run Set up job*DRYRUN* [CI/test] 🚀 Start image=catthehacker/ubuntu:act-latest*DRYRUN* [CI/test] 🐳 docker pull image=catthehacker/ubuntu:act-latest*DRYRUN* [CI/test] ✅ Success - Set up job*DRYRUN* [CI/test] ⭐ Run Main Checkout*DRYRUN* [CI/test] ✅ Success - Main Checkout*DRYRUN* [CI/test] 🏁 Job succeededLe préfixe *DRYRUN* indique qu’aucun conteneur n’est créé. Utile pour valider la syntaxe et la structure avant une vraie exécution.
Limitations de act
Section intitulée « Limitations de act »act ne peut pas reproduire 100% de l’environnement GitHub Actions. Voici les principales limitations à connaître :
| Limitation | Explication |
|---|---|
| Événements limités | schedule, deployment, page_build ne sont pas supportés |
| API GitHub limitée | Pas d’accès à l’API GitHub comme en production |
| Services Docker | Les containers de service peuvent se comporter différemment |
| Cache | actions/cache fonctionne partiellement (stockage local) |
| Artifacts | actions/upload-artifact crée des fichiers locaux, pas d’API |
| Marketplace | Certaines actions tierces ont des incompatibilités |
Quand utiliser act :
- Tests de syntaxe et structure
- Développement itératif de workflows
- Validation des commandes et scripts
- Debug de problèmes de logique
Quand NE PAS compter sur act :
- Validation finale (toujours tester sur GitHub)
- Tests d’intégration avec l’API GitHub
- Workflows avec services complexes
Cas d’usage courants
Section intitulée « Cas d’usage courants »Debug interactif
Section intitulée « Debug interactif »# Exécuter avec logs détaillésact -j build -v
# Garder le conteneur après l'exécution pour investigueract --reuseWorkflow avec matrice
Section intitulée « Workflow avec matrice »act exécute automatiquement toutes les combinaisons de la matrice en parallèle :
jobs: build: runs-on: ubuntu-latest strategy: matrix: node: [18, 20, 22] steps: - run: echo "Testing Node.js ${{ matrix.node }}"act -W .github/workflows/matrix.yml[Matrix Build/build-1] 🚀 Start image=catthehacker/ubuntu:act-latest[Matrix Build/build-2] 🚀 Start image=catthehacker/ubuntu:act-latest[Matrix Build/build-3] 🚀 Start image=catthehacker/ubuntu:act-latest[Matrix Build/build-1] ⭐ Run Main| Testing Node.js 18[Matrix Build/build-2] ⭐ Run Main| Testing Node.js 20[Matrix Build/build-3] ⭐ Run Main| Testing Node.js 22Pour n’exécuter qu’une seule combinaison de la matrice :
# Filtrer par valeur de matriceact --matrix node:20Tester un workflow_dispatch avec inputs
Section intitulée « Tester un workflow_dispatch avec inputs »Pour un workflow avec des inputs :
on: workflow_dispatch: inputs: environment: description: 'Environment to deploy' required: true type: choice options: [dev, staging, prod]
jobs: deploy: runs-on: ubuntu-latest steps: - run: echo "Deploying to ${{ github.event.inputs.environment }}"Créez un fichier d’événement JSON :
{ "inputs": { "environment": "staging" }}Puis exécutez :
act workflow_dispatch -e event.json[Deploy/deploy] ⭐ Run Main| Deploying to staging[Deploy/deploy] ✅ Success - Main[Deploy/deploy] 🏁 Job succeededIntégration dans le flux de développement
Section intitulée « Intégration dans le flux de développement »Script de validation pré-push
Section intitulée « Script de validation pré-push »Créez un hook Git pour valider avant chaque push :
#!/bin/bashecho "🔍 Validation du workflow CI..."act -n -W .github/workflows/ci.yml
if [ $? -ne 0 ]; then echo "❌ Le workflow a des erreurs. Push annulé." exit 1fi
echo "✅ Workflow valide"N’oubliez pas de rendre le script exécutable :
chmod +x .git/hooks/pre-pushCombinaison avec actionlint
Section intitulée « Combinaison avec actionlint »Pour une validation complète, combinez la validation statique et l’exécution :
# 1. Valider la syntaxe avec actionlint (rapide, sans Docker)actionlint .github/workflows/*.yml
# 2. Si OK, valider la structure avec act en dry-runact -n
# 3. Si tout passe, exécuter réellementactVoir le guide actionlint pour la validation statique des workflows.
Exemple complet
Section intitulée « Exemple complet »Voici un workflow typique et son exécution avec act :
name: CIon: push: branches: [main] pull_request:
jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Lint run: echo "Linting..."
test: runs-on: ubuntu-latest needs: lint steps: - uses: actions/checkout@v4 - name: Run tests run: echo "Tests passed!"
build: runs-on: ubuntu-latest needs: test steps: - uses: actions/checkout@v4 - name: Build run: echo "Building..."# Visualiser la structureact -g ╭──────╮ │ lint │ ╰──────╯ ⬇ ╭──────╮ │ test │ ╰──────╯ ⬇ ╭───────╮ │ build │ ╰───────╯# Exécuter uniquement les tests (avec ses dépendances)act -j testDépannage
Section intitulée « Dépannage »| Problème | Cause | Solution |
|---|---|---|
| Cannot connect to Docker daemon | Docker non démarré ou permissions | docker info pour vérifier. Sur Linux : sudo usermod -aG docker $USER puis logout/login |
| Image not found / pull 18 Go | Image Large sélectionnée par défaut | Utiliser Medium : -P ubuntu-24.04=catthehacker/ubuntu:act-latest |
| Action not found | Action Marketplace incompatible | Vérifier compatibilité sur repo act, utiliser image Full |
| exec format error (Mac M1/M2) | Image x86 sur ARM | Ajouter --container-architecture linux/amd64 |
| Secret non trouvé | Fichier .secrets absent ou mal formaté | Vérifier format CLE=valeur (pas d’espaces) et --secret-file .secrets |
| Événement non supporté | schedule, deployment non implémentés | Tester sur GitHub, act ne supporte pas tous les événements |
| Cache actions/cache partiel | Stockage local uniquement | Normal, le cache fonctionne mais n’est pas partagé entre runs |
Aide-mémoire (cheatsheet)
Section intitulée « Aide-mémoire (cheatsheet) »| Commande | Description |
|---|---|
act | Exécuter tous les workflows (événement push) |
act -l | Lister tous les jobs |
act -g | Afficher le graphe des dépendances |
act -n | Dry-run (validation sans exécution) |
act -j <job> | Exécuter un job spécifique |
act pull_request | Simuler une pull request |
act workflow_dispatch -e event.json | Déclencher avec inputs |
act -v / act -vv | Mode verbeux / très verbeux |
act --secret-file .secrets | Charger les secrets |
act --matrix node:20 | Filtrer une combinaison de matrice |
act -P ubuntu-24.04=catthehacker/ubuntu:act-latest | Définir l’image |
act --container-architecture linux/amd64 | Forcer l’architecture (Mac M1/M2) |
À retenir
Section intitulée « À retenir »- Itération rapide : testez vos workflows en secondes sans pousser sur GitHub
- Économie de ressources : pas de consommation de minutes Actions pendant le développement
- Debug efficace : logs verbeux (
-v,-vv) et possibilité de garder les conteneurs (--reuse) - Configuration : utilisez
.secretset.actrcpour centraliser vos options - Images : commencez avec Medium (~500 Mo), passez à Large si nécessaire
- Validation complète : combinez act avec actionlint pour détecter toutes les erreurs
- Sécurité : maintenez act à jour (correctifs réguliers sur x/crypto, SELinux)
- Limitation : act n’est pas un remplacement complet — validez toujours sur GitHub avant merge
Prochaines étapes
Section intitulée « Prochaines étapes »Ressources
Section intitulée « Ressources »- Site officiel : github.com/nektos/act
- Images Docker : catthehacker/docker_images
- Changelog : Releases
Questions fréquentes
Section intitulée « Questions fréquentes »Définition
act est un outil en ligne de commande qui exécute vos workflows GitHub Actions localement sur votre machine, sans avoir besoin de pousser le code sur GitHub.Comment ça fonctionne ?
- act lit vos fichiers YAML dans
.github/workflows/ - Il crée des conteneurs Docker qui imitent les runners GitHub
- Il exécute les jobs comme s'ils tournaient sur GitHub
Avantages principaux
| Avantage | Description |
|---|---|
| Itération rapide | Tests en secondes au lieu de minutes |
| Économie | Pas de consommation de minutes GitHub Actions |
| Debug local | Logs détaillés, investigation dans les conteneurs |
| Offline | Fonctionne sans connexion internet (après le pull initial) |
Exemple rapide
# Tester le workflow ci.yml
act -W .github/workflows/ci.yml
# Voir ce qui serait exécuté (dry-run)
act -n
Comparaison
| Critère | act (local) | GitHub Actions (cloud) |
|---|---|---|
| Environnement | Conteneurs Docker locaux | VMs GitHub-hosted |
| Images | ~500 Mo (Medium) | ~18 Go (complète) |
| Latence | Secondes | Minutes (queue + boot) |
| API GitHub | Limitée | Complète |
| Secrets | Fichier .secrets |
GitHub Secrets |
| Cache | Local uniquement | Partagé entre runs |
| Coût | Gratuit (Docker local) | Minutes facturées |
Ce que act supporte bien
- ✅ Syntaxe YAML et structure des workflows
- ✅ Steps avec
run:etuses: - ✅ Variables d'environnement et secrets
- ✅ Matrices de build
- ✅ Actions du Marketplace (la plupart)
Ce que act ne supporte pas (ou partiellement)
- ❌ Événements
schedule,deployment,page_build - ⚠️
actions/cache(stockage local uniquement) - ⚠️
actions/upload-artifact(fichiers locaux, pas d'API) - ❌ Accès complet à l'API GitHub
- ❌ Services Docker complexes
Recommandation
Utilisez act pour : développement, tests rapides, debugValidez toujours sur GitHub : avant merge en production
Prérequis
Docker doit être installé et en cours d'exécution :docker version
macOS
brew install act
Linux
Option 1 : Homebrewbrew install act
Option 2 : Script d'installationcurl -sSL https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash
Option 3 : asdf-vmasdf plugin add act
asdf install act latest
asdf set --home act latest
Windows
Chocolateychoco install act-cli
Scoopscoop install act
Vérification
act --version
# act version 0.2.84
Premier lancement
À la première exécution, act demande quelle image utiliser :| Image | Taille | Usage |
|---|---|---|
| Micro | ~200 Mo | Tests basiques |
| Medium | ~500 Mo | Recommandé pour la plupart des cas |
| Large | ~18 Go | Compatibilité maximale |
Méthode 1 : Fichier .secrets (recommandé)
Créez un fichier.secrets à la racine :# .secrets
GITHUB_TOKEN=ghp_xxxxxxxxxxxx
NPM_TOKEN=npm_xxxxxxxxxx
AWS_ACCESS_KEY_ID=AKIAXXXXXXXX
AWS_SECRET_ACCESS_KEY=xxxxxxxxxx
Utilisation :act --secret-file .secrets
Méthode 2 : Ligne de commande
act -s GITHUB_TOKEN=ghp_xxxx -s MY_SECRET=valeur
Méthode 3 : Variables d'environnement
export GITHUB_TOKEN=ghp_xxxx
act
Variables non sensibles (.vars)
Pour${{ vars.X }} :# .vars
ENVIRONMENT=development
API_URL=https://api-dev.example.com
act --var-file .vars
Configuration permanente (.actrc)
# .actrc
--secret-file .secrets
--var-file .vars
Sécurité
Ajoutez.secrets au .gitignore :echo ".secrets" >> .gitignore
Ne jamais commiter de secrets !Images disponibles
| Image | Taille | Compatibilité | Usage |
|---|---|---|---|
| Micro | ~200 Mo | Limitée | Tests syntaxe uniquement |
| Medium | ~500 Mo | Bonne | Recommandé pour la plupart |
| Large | ~18 Go | Excellente | Workflows complexes |
Configuration dans .actrc
# .actrc
-P ubuntu-24.04=catthehacker/ubuntu:act-latest
-P ubuntu-22.04=catthehacker/ubuntu:act-22.04
-P ubuntu-latest=catthehacker/ubuntu:act-latest
Images catthehacker (recommandées)
# Medium (par défaut)
catthehacker/ubuntu:act-latest
catthehacker/ubuntu:act-22.04
# Full (plus complète)
catthehacker/ubuntu:full-latest
catthehacker/ubuntu:full-22.04
Mac M1/M2 (Apple Silicon)
Certaines images ne fonctionnent pas en ARM natif :# Forcer l'émulation x86_64
act --container-architecture linux/amd64
À ajouter dans .actrc pour éviter de le répéter.Ligne de commande
# Utiliser une image spécifique pour ce run
act -P ubuntu-24.04=catthehacker/ubuntu:full-latest
Événements supportés
# Push (par défaut)
act
act push
# Pull request
act pull_request
# Workflow manuel
act workflow_dispatch
# Release
act release
# Issue
act issues
# Pull request review
act pull_request_review
Lister les workflows
# Tous les workflows et jobs
act -l
# Pour un événement spécifique
act -l push
act -l pull_request
workflow_dispatch avec inputs
Pour un workflow avec inputs :on:
workflow_dispatch:
inputs:
environment:
type: choice
options: [dev, staging, prod]
Créez event.json :{
"inputs": {
"environment": "staging"
}
}
Exécutez :act workflow_dispatch -e event.json
Événements NON supportés
- ❌
schedule(cron) - ❌
deployment - ❌
page_build - ❌
repository_dispatch(partiellement)
Niveaux de verbosité
# Normal
act
# Verbose (logs détaillés)
act -v
# Très verbose (debug complet)
act -vv
Dry-run (sans exécution)
# Voir ce qui serait exécuté
act -n
Utile pour valider la syntaxe avant une vraie exécution.Garder le conteneur pour investigation
# Le conteneur reste après l'exécution
act --reuse
# Puis vous pouvez y accéder
docker exec -it <container_id> bash
Cibler un job spécifique
# Exécuter uniquement le job "test"
act -j test
# Job spécifique d'un workflow
act -W .github/workflows/ci.yml -j build
Workflow de debug recommandé
# 1. Valider la syntaxe
actionlint .github/workflows/*.yml
# 2. Dry-run
act -n
# 3. Exécution avec logs
act -v
# 4. Si échec, garder le conteneur
act --reuse -v
Variables de debug GitHub
# Activer les logs de debug GitHub
act -s ACTIONS_STEP_DEBUG=true
act -s ACTIONS_RUNNER_DEBUG=true
Diagnostic
# Vérifier que Docker tourne
docker info
# Si erreur, démarrer Docker
sudo systemctl start docker # Linux
# Ou ouvrir Docker Desktop # macOS/Windows
Cause 1 : Docker n'est pas démarré
Linux :sudo systemctl start docker
sudo systemctl enable docker # Démarrage auto
macOS/Windows : Ouvrir Docker DesktopCause 2 : Permissions (Linux)
# Ajouter l'utilisateur au groupe docker
sudo usermod -aG docker $USER
# IMPORTANT : se déconnecter et reconnecter
# Ou utiliser newgrp
newgrp docker
# Vérifier
docker info
Cause 3 : Socket Docker inaccessible
# Vérifier le socket
ls -la /var/run/docker.sock
# Doit afficher quelque chose comme :
# srw-rw---- 1 root docker ... /var/run/docker.sock
Cause 4 : Docker Desktop non lancé (macOS/Windows)
Ouvrez l'application Docker Desktop et attendez que l'icône indique "Running".Test final
docker run hello-world
act --version
Comportement par défaut
act exécute toutes les combinaisons de la matrice :jobs:
test:
strategy:
matrix:
node: [18, 20, 22]
os: [ubuntu-latest]
# act exécutera 3 jobs (node 18, 20, 22)
Voir les combinaisons
act -l
# Affiche chaque combinaison comme un job séparé
Exécuter une seule combinaison
# Flag -m pour une seule combinaison (la première)
act -j test -m
Matrices avec include/exclude
strategy:
matrix:
node: [18, 20]
include:
- node: 22
experimental: true
exclude:
- node: 18
os: windows-latest
act respecte include et exclude.Limiter les combinaisons (astuce)
Pour tester rapidement, créez un fichier de workflow de test :# .github/workflows/ci-local.yml
jobs:
test:
strategy:
matrix:
node: [20] # Une seule version
act -W .github/workflows/ci-local.yml
Performance
Les matrices volumineuses (ex: 3 OS × 4 versions = 12 jobs) peuvent être longues. Préférez tester une combinaison localement, puis valider la matrice complète sur GitHub.Workflow de validation complet
# 1. Validation statique (syntaxe, typos, refs)
actionlint .github/workflows/*.yml
# 2. Dry-run (structure, résolution)
act -n
# 3. Exécution réelle
act -v
Ce que chaque outil détecte
| Outil | Détecte |
|---|---|
| actionlint | Syntaxe YAML, typos dans uses:, variables invalides, permissions |
| act -n | Résolution des actions, structure du workflow |
| act | Erreurs d'exécution, logique, scripts |
Hook pre-push automatique
#!/bin/bash
# .git/hooks/pre-push
echo "🔍 Validation des workflows..."
# Étape 1 : actionlint
if ! actionlint .github/workflows/*.yml; then
echo "❌ Erreurs de syntaxe. Push annulé."
exit 1
fi
# Étape 2 : act dry-run
if ! act -n -W .github/workflows/ci.yml; then
echo "❌ Erreurs de structure. Push annulé."
exit 1
fi
echo "✅ Workflows valides"
Rendre exécutable :chmod +x .git/hooks/pre-push
Installation actionlint
# macOS/Linux
brew install actionlint
# Go
go install github.com/rhysd/actionlint/cmd/actionlint@latest
Voir le guide complet : actionlint