Aller au contenu
CI/CD & Automatisation medium

act : exécuter les workflows GitHub Actions en local

11 min de lecture

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 :

  • Tester vos workflows avant de les pousser
  • Débugger les erreurs sans attendre le runner distant
  • Développer des workflows complexes de manière itérative
  • Exécuter des workflows manuellement (workflow_dispatch)

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 :

Fenêtre de terminal
docker version

Si Docker n’est pas installé, consultez le guide Docker.

Avec Homebrew :

Fenêtre de terminal
brew install act

Vérification de l’installation :

Fenêtre de terminal
act --version

La 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 :

ImageTailleCompatibilité
Micro (~200 Mo)Très légèreLimitée (manque beaucoup d’outils)
Medium (~500 Mo)ÉquilibréeBonne pour la plupart des cas
Large (~18 Go)ComplèteProche de l’environnement GitHub

Pour commencer, choisissez Medium. Vous pourrez changer plus tard.

Fenêtre de terminal
# Premier lancement - choisissez Medium
act

act 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 :

Fenêtre de terminal
act
Fenêtre de terminal
# Par chemin de fichier
act -W .github/workflows/ci.yml
# Par nom du workflow (défini dans name:)
act -W .github/workflows/build.yml

Si votre workflow contient plusieurs jobs, vous pouvez n’en exécuter qu’un :

Fenêtre de terminal
# Exécuter uniquement le job "test"
act -j test
# Exécuter uniquement le job "build" du workflow ci.yml
act -W .github/workflows/ci.yml -j build

GitHub Actions se déclenche sur différents événements. act peut les simuler :

Fenêtre de terminal
# Simuler un push (par défaut)
act push
# Simuler une pull request
act pull_request
# Simuler un workflow manuel
act workflow_dispatch
# Simuler un événement de release
act release
Fenêtre de terminal
# Voir tous les workflows et leurs jobs
act -l
# Voir les jobs pour un événement spécifique
act -l push
act -l pull_request

Les workflows utilisent souvent des secrets (${{ secrets.TOKEN }}). act propose plusieurs méthodes pour les fournir.

Créez un fichier .secrets à la racine du projet :

Fenêtre de terminal
# .secrets (format clé=valeur)
GITHUB_TOKEN=ghp_xxxxxxxxxxxx
NPM_TOKEN=npm_xxxxxxxxxx
AWS_ACCESS_KEY_ID=AKIAXXXXXXXX
AWS_SECRET_ACCESS_KEY=xxxxxxxxxx

Ensuite, utilisez :

Fenêtre de terminal
act --secret-file .secrets

Pour des tests rapides ou en CI :

Fenêtre de terminal
act -s GITHUB_TOKEN=ghp_xxxx -s MY_SECRET=valeur

Pour les variables ${{ vars.X }} (non sensibles), utilisez un fichier .vars :

.vars
ENVIRONMENT=development
API_URL=https://api-dev.example.com
Fenêtre de terminal
act --var-file .vars

Créez un fichier .actrc à la racine du projet pour sauvegarder vos options :

.actrc
--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/amd64

Chaque 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é :

Fenêtre de terminal
# Utiliser une image plus complète
act -P ubuntu-24.04=catthehacker/ubuntu:act-latest
# Ou votre propre image
act -P ubuntu-24.04=mon-registry/mon-image:tag
Fenêtre de terminal
# Logs détaillés
act -v
# Encore plus détaillé
act -vv

Pour voir ce qui serait exécuté sans vraiment l’exécuter :

Fenêtre de terminal
act -n

Utile 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 :

LimitationExplication
Événements limitésschedule, deployment, page_build ne sont pas supportés
API GitHub limitéePas d’accès à l’API GitHub comme en production
Services DockerLes containers de service peuvent se comporter différemment
Cacheactions/cache fonctionne partiellement (stockage local)
Artifactsactions/upload-artifact crée des fichiers locaux, pas d’API
MarketplaceCertaines 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
Fenêtre de terminal
# Exécuter avec logs détaillés
act -j build -v
# Garder le conteneur après l'exécution pour investiguer
act --reuse
Fenêtre de terminal
# act exécute toutes les combinaisons de la matrice
act -W .github/workflows/matrix.yml
# Exécuter une seule combinaison
act -j build -m

Pour 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 :

Fenêtre de terminal
act workflow_dispatch -e event.json

Créez un hook Git pour valider avant chaque push :

.git/hooks/pre-push
#!/bin/bash
echo "🔍 Validation du workflow CI..."
act -n -W .github/workflows/ci.yml
if [ $? -ne 0 ]; then
echo "❌ Le workflow a des erreurs. Push annulé."
exit 1
fi
echo "✅ Workflow valide"

N’oubliez pas de rendre le script exécutable :

Fenêtre de terminal
chmod +x .git/hooks/pre-push

Pour une validation complète :

Fenêtre de terminal
# 1. Valider la syntaxe avec actionlint
actionlint .github/workflows/*.yml
# 2. Si OK, tester avec act
act -n

Voir le guide actionlint pour la validation statique des workflows.

Symptôme : act ne peut pas se connecter à Docker.

Solutions :

Fenêtre de terminal
# Vérifier que Docker tourne
docker info
# Sur Linux, ajouter votre utilisateur au groupe docker
sudo usermod -aG docker $USER
# Puis déconnectez-vous et reconnectez-vous

Symptôme : act tente de télécharger une image de 18 Go.

Solution : utiliser une image plus légère :

Fenêtre de terminal
act -P ubuntu-24.04=catthehacker/ubuntu:act-latest

Symptôme : une action du Marketplace ne fonctionne pas.

Solutions :

  1. Vérifier la compatibilité sur le repo act
  2. Utiliser une image plus complète
  3. Accepter que certaines actions nécessitent le vrai GitHub

Sur les Macs Apple Silicon, certaines images ne fonctionnent pas nativement :

Fenêtre de terminal
# Forcer l'architecture x86_64 via émulation
act --container-architecture linux/amd64

Cela 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 :

  1. act exécute vos workflows GitHub Actions localement via Docker
  2. Utilisez .secrets et .actrc pour configurer votre environnement
  3. Commencez avec l’image Medium, passez à une plus complète si nécessaire
  4. Combinez act avec actionlint pour une validation complète
  5. Toujours faire un test final sur GitHub avant merge