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 »act est un binaire Go statique sans dépendance système : l'installation se résume à récupérer un exécutable et à le placer dans le PATH. Les gestionnaires de paquets ci-dessous font ce travail pour vous et gèrent la mise à jour ; la méthode manuelle vaut surtout quand vous devez figer une version précise, par exemple pour qu'une équipe entière teste avec le même comportement.
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, avec vérification de l'empreinte publiée par le projet :
VERSION=0.2.84curl -sSL -O "https://github.com/nektos/act/releases/download/v${VERSION}/act_Linux_x86_64.tar.gz"curl -sSL -O "https://github.com/nektos/act/releases/download/v${VERSION}/checksums.txt"
# Doit afficher "act_Linux_x86_64.tar.gz: OK" avant toute extractionsha256sum --check --ignore-missing checksums.txt
tar -xzf act_Linux_x86_64.tar.gz actsudo install -m 0755 act /usr/local/bin/actLe fichier checksums.txt est publié par le pipeline de release d'act à côté des archives. Si sha256sum --check ne répond pas OK, arrêtez-vous là : l'archive a été altérée ou le téléchargement est incomplet.
Avec 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 »L'option -W attend un chemin, pas le name: déclaré dans le fichier. Pointez-la sur un fichier précis pour n'exécuter que celui-là, ou sur un répertoire pour restreindre la recherche à un sous-ensemble de workflows. Sans -W, act balaie tout .github/workflows/, ce qui devient vite pénible sur un dépôt qui en compte une dizaine.
# Par chemin de fichieract -W .github/workflows/ci.yml
# Par répertoire : tous les workflows d'un dossieract -W .github/workflows/Exé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 »Avant de lancer quoi que ce soit, act -l donne l'inventaire de ce qu'act a réellement compris de vos fichiers. C'est le premier réflexe de diagnostic : un job absent de cette liste ne s'exécutera jamais, en général parce que son événement déclencheur ne correspond pas à celui simulé, ou parce que le fichier YAML est mal placé.
# 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 »Cette forme convient à un test ponctuel, pas à un usage régulier : la valeur passe dans l'historique du shell et reste visible dans ps pendant l'exécution. Si vous omettez la valeur (-s GITHUB_TOKEN), act reprend la variable d'environnement du même nom, et à défaut vous la demande de façon interactive. Cette forme évite d'écrire le secret en clair sur la ligne de commande.
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 »--verbose est un interrupteur booléen, pas un niveau : act n'a qu'un seul palier de verbosité, et répéter le drapeau ne change rien à la sortie. Ce mode sert surtout à comprendre ce qu'act a chargé et quel contexte Git il a déduit du dépôt local, deux causes fréquentes de divergence entre une exécution locale et le vrai runner.
# 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. Pour aller plus loin, deux options complémentaires existent :
# Logs structurés, exploitables par un outil d'analyseact --json
# Activer les logs de debug côté GitHub Actions (::debug::)act -s ACTIONS_STEP_DEBUG=true -s ACTIONS_RUNNER_DEBUG=trueExé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 »Le drapeau --reuse (-r) empêche act de supprimer le conteneur à la fin d'un workflow terminé avec succès, ce qui permet à la fois de garder l'état entre deux exécutions et d'entrer dans le conteneur avec docker exec pour inspecter le système de fichiers. Attention à la contrepartie : le conteneur conservé garde les fichiers du run précédent, donc un build qui passe grâce à un artefact résiduel vous donnera une fausse confiance. Nettoyez-le avant la validation finale.
# Exécuter un job précis avec logs détaillésact -j build -v
# Conserver le conteneur d'un run réussi pour l'inspecteract --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-24.04 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-24.04 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 »Le workflow ci-dessous enchaîne trois jobs liés par needs: et applique les règles de durcissement de la formation : actions épinglées par SHA avec le tag en commentaire, permissions: {} au niveau du workflow puis le strict minimum par job, persist-credentials: false sur le checkout et une version de runner figée. C'est cette combinaison qu'act permet de vérifier localement avant le premier push.
name: CIon: push: branches: [main] pull_request:
# Aucun droit par défaut : chaque job demande le minimumpermissions: {}
jobs: lint: runs-on: ubuntu-24.04 permissions: contents: read steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - name: Lint run: echo "Linting..."
test: runs-on: ubuntu-24.04 needs: lint permissions: contents: read steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - name: Run tests run: echo "Tests passed!"
build: runs-on: ubuntu-24.04 needs: test permissions: contents: read steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - 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 »Presque tous les échecs d'act se rangent en deux catégories. Soit Docker ne répond pas comme attendu (démon arrêté, permissions du socket, architecture du processeur), soit l'image du runner ne contient pas l'outil que le workflow appelle. Le message d'erreur pointe rarement vers la vraie cause, commencez donc par vérifier docker info et l'image effectivement utilisée, affichée en tête de chaque job.
| 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) »Les quatre premières lignes couvrent 90 % des usages quotidiens. Les suivantes servent quand quelque chose ne se passe pas comme prévu ou quand vous testez un cas particulier. Retenez surtout l'ordre : act -l pour vérifier ce qui est détecté, act -n pour valider la structure sans conteneur, puis act -j pour n'exécuter que le job qui vous intéresse.
| 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 | Mode verbeux (drapeau booléen, -vv n'ajoute rien) |
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) |
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
À 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 : mode verbeux (
-v, un seul palier) 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
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Formation Dagger : Une autre voie pour exécuter le même pipeline en local et en CI, quand les limites de act deviennent gênantes.
- pre-commit : Placer les contrôles rapides avant le commit et réserver act aux vérifications lourdes.
- Docker de A à Z : Maîtriser le moteur de conteneurs dont act dépend pour chaque job simulé.
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