Itération rapide
Testez vos workflows en secondes sans pousser sur GitHub.
Mise à jour :
Vous venez de modifier votre workflow GitHub Actions. Pour savoir s’il fonctionne, vous devez pousser le code, attendre que le runner démarre, puis découvrir — souvent — qu’une erreur de syntaxe ou un chemin incorrect fait tout échouer. Retour au code, nouveau push, nouvelle attente…
act résout ce problème en exécutant vos workflows localement, sur votre machine. Vous pouvez itérer en quelques secondes au lieu de plusieurs minutes, sans consommer vos minutes GitHub Actions.
act est un outil en ligne de commande qui simule l’environnement GitHub Actions sur votre machine. Il utilise Docker pour créer des conteneurs qui imitent les runners GitHub, puis exécute vos workflows comme s’ils tournaient sur GitHub.
Concrètement, act vous permet de :
workflow_dispatch)Avant d’installer act, vous devez avoir :
.github/workflows/Pour vérifier que Docker fonctionne :
docker versionSi Docker n’est pas installé, consultez le guide Docker.
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 --versionLa commande doit afficher la version installée (ex: act version 0.2.74).
À 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.
La commande act sans argument simule un événement push et exécute les
workflows qui répondent à cet événement :
act# Par chemin de fichieract -W .github/workflows/ci.yml
# Par nom du workflow (défini dans name:)act -W .github/workflows/build.ymlSi votre workflow contient plusieurs jobs, vous pouvez n’en exécuter qu’un :
# Exécuter uniquement le job "test"act -j test
# Exécuter uniquement le job "build" du workflow ci.ymlact -W .github/workflows/ci.yml -j buildGitHub 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 release# Voir tous les workflows et leurs jobsact -l
# Voir les jobs pour un événement spécifiqueact -l pushact -l pull_requestLes workflows utilisent souvent des secrets (${{ secrets.TOKEN }}). act
propose plusieurs méthodes pour les fournir.
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 .secretsPour des tests rapides ou en CI :
act -s GITHUB_TOKEN=ghp_xxxx -s MY_SECRET=valeurPour les variables ${{ vars.X }} (non sensibles), utilisez un fichier .vars :
ENVIRONMENT=developmentAPI_URL=https://api-dev.example.comact --var-file .varsCréez un fichier .actrc à la racine du projet pour sauvegarder vos options :
--secret-file .secrets--var-file .vars-P ubuntu-latest=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.
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-latest=catthehacker/ubuntu:act-latest
# Ou votre propre imageact -P ubuntu-latest=mon-registry/mon-image:tag# Logs détaillésact -v
# Encore plus détailléact -vvPour voir ce qui serait exécuté sans vraiment l’exécuter :
act -nUtile pour valider la syntaxe et la structure avant une vraie exécution.
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 :
Quand NE PAS compter sur act :
# Exécuter avec logs détaillésact -j build -v
# Garder le conteneur après l'exécution pour investigueract --reuse# act exécute toutes les combinaisons de la matriceact -W .github/workflows/matrix.yml
# Exécuter une seule combinaisonact -j build -mPour un workflow avec des inputs :
on: workflow_dispatch: inputs: environment: description: 'Environment to deploy' required: true type: choice options: [dev, staging, prod]Créez un fichier d’événement JSON :
{ "inputs": { "environment": "staging" }}Puis :
act workflow_dispatch -e event.jsonCré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-pushPour une validation complète :
# 1. Valider la syntaxe avec actionlintactionlint .github/workflows/*.yml
# 2. Si OK, tester avec actact -nVoir le guide actionlint pour la validation statique des workflows.
Symptôme : act ne peut pas se connecter à Docker.
Solutions :
# Vérifier que Docker tournedocker info
# Sur Linux, ajouter votre utilisateur au groupe dockersudo usermod -aG docker $USER# Puis déconnectez-vous et reconnectez-vousSymptôme : act tente de télécharger une image de 18 Go.
Solution : utiliser une image plus légère :
act -P ubuntu-latest=catthehacker/ubuntu:act-latestSymptôme : une action du Marketplace ne fonctionne pas.
Solutions :
Sur les Macs Apple Silicon, certaines images ne fonctionnent pas nativement :
# Forcer l'architecture x86_64 via émulationact --container-architecture linux/amd64Cela sera plus lent mais plus compatible.
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 et possibilité de garder les conteneurs pour investigation.
Limitations connues
act n’est pas un remplacement complet — validez toujours sur GitHub.
Points clés :
.secrets et .actrc pour configurer votre environnement