Comment exécuter vos GitHub Actions localement avec Act

Les GitHub Actions automatisent les workflows. CI/CD, étiquetage des issues, notes de version... Intégré à GitHub. Développer et tester peut être lourd.

Louis Dupont

Louis Dupont

5 June 2025

Comment exécuter vos GitHub Actions localement avec Act

Les GitHub Actions ont révolutionné la façon dont les développeurs automatisent les flux de travail au sein de leurs référentiels. Des pipelines d'intégration continue et de déploiement continu (CI/CD) à l'automatisation de l'étiquetage des problèmes et de la génération de notes de version, Actions offre un moyen puissant et intégré de gérer le cycle de vie du développement logiciel directement dans GitHub.

Cependant, le développement et le test de ces flux de travail peuvent parfois sembler fastidieux. Le cycle traditionnel implique :

  1. Apporter des modifications à vos fichiers de flux de travail (généralement situés dans .github/workflows/).
  2. Valider ces modifications.
  3. Les pousser vers votre référentiel GitHub.
  4. Attendre que les runners de GitHub prennent en charge le travail et l'exécutent.
  5. Analyser les journaux sur le site Web de GitHub pour voir si vos modifications ont fonctionné ou si elles ont introduit des erreurs.

Ce processus, en particulier la partie attente et le changement de contexte entre votre éditeur local et l'interface utilisateur de GitHub, peut considérablement ralentir le développement, en particulier lors de l'itération sur des flux de travail complexes ou du débogage de problèmes délicats. Et si vous pouviez tester vos Actions avant de les pousser ?

C'est précisément là qu'act entre en jeu. Comme le suggère son slogan, "Think globally, act locally". act est un outil de ligne de commande open source conçu pour exécuter vos flux de travail GitHub Actions localement à l'aide de conteneurs Docker. Il simule l'environnement fourni par GitHub Actions, vous permettant de tester et d'itérer rapidement sur vos flux de travail sans avoir besoin de valider et de pousser chaque modification mineure.

💡
Vous voulez un excellent outil de test d'API qui génère une belle documentation API ?

Vous voulez une plateforme intégrée, tout-en-un, pour que votre équipe de développeurs travaille ensemble avec une productivité maximale ?

Apidog répond à toutes vos demandes et remplace Postman à un prix beaucoup plus abordable !
button

Pourquoi exécuter GitHub Actions localement avec act ?

Les avantages d'intégrer act dans votre flux de travail de développement sont importants :

  1. Retour d'information rapide : C'est le principal avantage. Au lieu du cycle commit-push-wait-debug, vous pouvez exécuter votre flux de travail immédiatement après avoir apporté une modification localement. Obtenez des commentaires en quelques secondes ou minutes, et non en minutes ou dizaines de minutes. Cela accélère considérablement le processus de développement et de débogage de vos fichiers .github/workflows/.
  2. Exécuteur de tâches local : De nombreux projets utilisent des outils comme make, npm scripts ou des scripts shell personnalisés pour définir des tâches de développement courantes (construction, test, linting, etc.). act vous permet de consolider ces tâches. Vous pouvez définir votre build, vos tests et d'autres processus en tant que tâches GitHub Actions, puis utiliser act pour exécuter ces mêmes tâches localement à des fins de développement. Cela réduit la duplication et assure la cohérence entre votre environnement de développement local et votre pipeline CI/CD. Vous définissez les tâches une fois dans vos fichiers de flux de travail, et elles s'exécutent de la même manière (ou très similaire) partout.
  3. Développement hors ligne : Testez la syntaxe et la logique de base du flux de travail même sans connexion Internet constante (bien que les téléchargements d'images initiaux et certaines actions puissent nécessiter une connectivité).
  4. Économies de coûts : Bien que GitHub fournisse une offre gratuite généreuse pour les référentiels publics et des prix raisonnables pour les référentiels privés, l'exécution répétée de flux de travail complexes ou longs pendant le développement peut consommer des minutes de runner. Les tests locaux évitent cette utilisation.
  5. Puissance de débogage : Le débogage des Actions ayant échoué sur GitHub implique souvent d'ajouter une journalisation supplémentaire, de pousser et d'attendre. Avec act, vous pouvez inspecter l'environnement local, monter des volumes et potentiellement utiliser des techniques de débogage plus avancées dans les conteneurs Docker qu'il lance.

Comment act fonctionne-t-il ?

Comprendre le mécanisme derrière act aide à l'utiliser efficacement et à résoudre les problèmes potentiels. Voici une ventilation de son fonctionnement :

  1. Analyse du flux de travail : Lorsque vous exécutez la commande act dans le répertoire racine de votre référentiel, elle analyse le répertoire .github/workflows/ pour vos fichiers YAML de flux de travail.
  2. Simulation du déclencheur d'événement : Par défaut, act simule un événement push, mais vous pouvez spécifier d'autres événements comme pull_request, workflow_dispatch, etc. Il détermine quels flux de travail et quelles tâches doivent s'exécuter en fonction de l'événement spécifié et des déclencheurs on: définis dans vos fichiers de flux de travail.
  3. Analyse des dépendances : act analyse les dépendances entre les tâches d'un flux de travail (à l'aide du mot-clé needs:) pour déterminer l'ordre d'exécution correct.
  4. Gestion des images Docker : Pour chaque tâche, act identifie l'environnement du runner spécifié (par exemple, runs-on: ubuntu-latest). Il le mappe ensuite à une image Docker spécifique. act utilise l'API Docker pour :
  1. Exécution du conteneur : act utilise l'API Docker pour créer et exécuter des conteneurs pour chaque étape d'une tâche. Il configure ces conteneurs pour imiter au plus près l'environnement GitHub Actions :
  1. Diffusion de journaux : act diffuse les journaux des conteneurs en cours d'exécution directement dans votre terminal, fournissant un retour d'information en temps réel sur la progression de l'exécution et les éventuelles erreurs.

Essentiellement, act orchestre les conteneurs Docker locaux pour reproduire le flux d'exécution et l'environnement de vos flux de travail GitHub Actions.

Conditions préalables : Installation de Docker

La dépendance principale pour act est Docker. act exploite le moteur Docker pour créer les environnements isolés nécessaires à l'exécution des étapes de votre flux de travail. Avant d'installer act, vous devez avoir une installation Docker fonctionnelle sur votre système.

Installation de act

Une fois Docker en cours d'exécution, vous pouvez installer act. Il existe plusieurs façons de le faire, en fonction de votre système d'exploitation et de vos préférences.

1. Homebrew (macOS et Linux)

Si vous utilisez le gestionnaire de paquets Homebrew, l'installation est simple :

brew install act

Cela installe la dernière version stable. Si vous souhaitez la toute dernière version de développement (qui peut nécessiter un compilateur), vous pouvez utiliser :

brew install act --HEAD

2. Extension GitHub CLI (macOS, Windows, Linux)

Si vous utilisez déjà l'interface de ligne de commande GitHub (gh), vous pouvez installer act en tant qu'extension :

gh extension install nektos/gh-act

Après l'installation, vous appelez act via la commande gh :

gh act          # Au lieu de simplement 'act'
gh act -l
gh act pull_request

3. Chocolatey (Windows)

Pour les utilisateurs du gestionnaire de paquets Chocolatey sur Windows :

choco install act-cli

(Remarque : certaines sources peuvent répertorier act au lieu de act-cli. Vérifiez le dernier nom de package sur le référentiel de la communauté Chocolatey si vous rencontrez des problèmes.)

4. Scoop (Windows)

Pour les utilisateurs du gestionnaire de paquets Scoop sur Windows :

scoop install act

5. WinGet (Windows)

Pour les utilisateurs du gestionnaire de paquets Windows (winget) :

winget install nektos.act

6. Installateur de script Linux

Un script de commodité est disponible pour les distributions Linux sans accès facile via les gestionnaires de paquets :

curl -s https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash

(Remarque : soyez toujours prudent lorsque vous pipez des scripts directement dans sudo. Examinez d'abord le contenu du script si vous avez des problèmes de sécurité.)

7. Autres méthodes (Arch, COPR, MacPorts, Nix)

Les instructions d'installation pour d'autres gestionnaires de paquets comme pacman (Arch), COPR (Fedora), MacPorts et Nix sont disponibles dans la documentation officielle de act :

Vérification :

Après l'installation, ouvrez une nouvelle fenêtre de terminal et exécutez :

act --version
# ou si vous utilisez l'extension gh :
gh act --version

Cela devrait afficher la version installée de act, confirmant que l'installation a réussi.

Configuration initiale : Images de runner

La première fois que vous exécutez act dans un répertoire de projet, il peut vous inviter à choisir une taille d'image de runner par défaut. GitHub Actions propose des runners avec des ressources et des logiciels préinstallés variables. act essaie d'imiter cela en utilisant différentes images Docker de base.

On vous présentera généralement un choix comme celui-ci :

? Veuillez choisir l'image par défaut que vous souhaitez utiliser avec act :

  - Micro : Image minimale avec prise en charge de nodejs (~200 Mo) docker.io/node:16-buster-slim
  - Medium : Image Act avec des outils de base (~500 Mo) ghcr.io/catthehacker/ubuntu:act-latest
  - Large : Image de runner Github Actions (~17 Go) ghcr.io/catthehacker/ubuntu:full-latest

Image par défaut ? [Medium] :

Recommandation : Commencez par l'image Medium. Elle offre un bon équilibre et fonctionne pour de nombreux cas d'utilisation courants. Si vous rencontrez des problèmes en raison de logiciels manquants, vous pouvez soit installer le logiciel dans les étapes de votre flux de travail, soit passer à l'utilisation de l'image Large pour ce runner spécifique (plus d'informations à ce sujet plus tard).

act enregistre votre choix dans un fichier de configuration (~/.actrc). Vous pouvez modifier le paramètre par défaut ultérieurement en modifiant ce fichier ou en réexécutant act dans un répertoire où il doit être configuré.

Utilisation principale de act : Exécution de vos flux de travail

Une fois installé et configuré, l'utilisation de act est relativement simple. Accédez au répertoire racine de votre projet (celui contenant le dossier .github) dans votre terminal.

1. Exécuter l'événement par défaut (push)

La commande la plus simple exécute les flux de travail déclenchés par l'événement push par défaut :

act
# ou
gh act

act analysera vos flux de travail, identifiera les tâches déclenchées on: push, extraira les images Docker nécessaires (si elles ne sont pas déjà mises en cache) et exécutera les tâches.

2. Lister les flux de travail et les tâches disponibles

Pour voir quels flux de travail et quelles tâches act reconnaît et exécuterait pour l'événement par défaut :

act -l
# ou
gh act -l

Cela affiche une liste comme celle-ci :

Étape  ID de la tâche  Nom de la tâche  Nom du flux de travail  Fichier du flux de travail  Événements
0      build         Build         CI Pipeline    ci.yaml        push
1      test          Test          CI Pipeline    ci.yaml        push
1      lint          Lint          Code Quality   codeql.yaml    push,pull_request

3. Exécuter une tâche spécifique

Si vous souhaitez uniquement tester une seule tâche à partir d'un flux de travail, utilisez l'indicateur -j suivi de l'ID de la tâche (à partir de la sortie act -l) :

act -j build
# ou
gh act -j build

4. Déclencher un événement spécifique

Les flux de travail se déclenchent souvent sur des événements autres que push. Vous pouvez simuler ces événements en fournissant le nom de l'événement en tant qu'argument à act :

# Simuler un événement de demande d'extraction
act pull_request

# Simuler un événement workflow_dispatch (déclencheur manuel)
act workflow_dispatch

# Simuler un événement d'horaire
act schedule

# Simuler un événement de publication
act release -e event.json # Fournir les détails de la charge utile de l'événement si nécessaire

act n'exécutera que les flux de travail et les tâches configurés pour s'exécuter on: l'événement spécifié.

5. Transmission des entrées pour workflow_dispatch

Les flux de travail déclenchés par workflow_dispatch peuvent accepter des entrées. Vous pouvez les fournir à l'aide de l'indicateur --input ou -i :

# En supposant que votre flux de travail a une entrée nommée 'environment'
act workflow_dispatch --input environment=staging

6. Gestion des secrets

Les flux de travail GitHub Actions s'appuient souvent sur des secrets (comme des clés API ou des jetons). act n'accède pas automatiquement à vos secrets GitHub. Vous devez les fournir localement.

act -s MY_SECRET_TOKEN -s ANOTHER_SECRET

Sinon, juste act -s vous invitera à saisir tous les secrets.

export SECRET_MY_SECRET_TOKEN="your_value"
act
MY_SECRET_TOKEN=your_value
ANOTHER_SECRET=another_value

Exécutez ensuite act avec l'indicateur --secret-file :

act --secret-file .secrets

(Assurez-vous que ce fichier est ajouté à votre .gitignore pour éviter de valider les secrets !)

7. Gestion des variables et des variables d'environnement

act --env NODE_ENV=development --env CUSTOM_FLAG=true
act --env-file .env_vars

Gestion des environnements et des images de runner

Bien que les images de runner par défaut (Micro, Medium, Large) couvrent de nombreux scénarios, vous avez souvent besoin de plus de contrôle.

1. Limitations des images par défaut

N'oubliez pas que les images de runner act par défaut (en particulier Micro et Medium) ne sont pas identiques aux environnements fournis par GitHub. Elles peuvent manquer d'outils, de bibliothèques ou de services système spécifiques (comme systemd) que votre flux de travail attend. Les images Large offrent une plus grande fidélité, mais présentent l'inconvénient d'une taille importante.

2. Spécification d'images alternatives avec -P

Si une tâche nécessite un environnement ou un ensemble d'outils spécifique non présent dans l'image par défaut, vous pouvez indiquer à act d'utiliser une image Docker différente pour une plate-forme spécifique à l'aide de l'indicateur -P (plate-forme).

Le format est -P <platform>=<docker-image>.

Exemples :

# Utiliser l'image Large spécifiquement pour les tâches s'exécutant sur ubuntu-22.04
act -P ubuntu-22.04=ghcr.io/catthehacker/ubuntu:full-22.04

# Utiliser une version spécifique de Node.js pour les tâches ubuntu-latest
act -P ubuntu-latest=node:18-bullseye

# Utiliser une image plus complète de nektos/act-environments (très volumineuse !)
# AVERTISSEMENT : nektos/act-environments-ubuntu:18.04 est > 18 Go
act -P ubuntu-18.04=nektos/act-environments-ubuntu:18.04

# Spécifier plusieurs plates-formes si votre flux de travail les utilise
act -P ubuntu-20.04=node:16-buster -P ubuntu-22.04=node:18-bullseye

3. Utilisation d'images de runner locales (--pull=false)

Par défaut, act essaie d'extraire la dernière version de l'image Docker spécifiée à chaque exécution. Si vous avez créé une image de runner personnalisée localement ou si vous souhaitez vous assurer que vous utilisez la version exacte que vous avez mise en cache, vous pouvez désactiver ce comportement :

act --pull=false
# ou potentiellement utiliser le mode hors ligne
act --action-offline-mode

Cela indique à act d'utiliser l'image disponible localement si elle est présente et de n'essayer de l'extraire que si elle est manquante.

4. Exécution native sur l'hôte (-self-hosted)

Pour les flux de travail ciblant macOS ou Windows (runs-on: macos-latest ou runs-on: windows-latest), si vous exécutez act sur le même système d'exploitation hôte, vous pouvez indiquer à act de ne pas utiliser un conteneur Docker pour le runner lui-même. Au lieu de cela, il exécutera les étapes directement sur votre machine hôte. Cela peut être utile si la compatibilité Docker est un problème ou si vous avez besoin d'un accès direct aux ressources de l'hôte.

# Exécuter les tâches macos-latest directement sur votre hôte Mac
act -P macos-latest=-self-hosted

# Exécuter les tâches windows-latest directement sur votre hôte Windows
act -P windows-latest=-self-hosted

Attention : L'exécution directe sur l'hôte contourne l'isolation fournie par Docker. Les étapes du flux de travail auront accès à votre système de fichiers et pourront potentiellement modifier votre environnement hôte. Utilisez cette option avec précaution. Les étapes de la tâche qui utilisent explicitement des conteneurs Docker (comme les conteneurs de service ou les actions de conteneur) utiliseront toujours Docker.

Limitations et considérations

Bien que act soit incroyablement utile, il est important de connaître ses limites :

Recommandation : Utilisez act pour le développement rapide, la vérification de la syntaxe, les tests de logique de base et l'itération sur des tâches ou des étapes individuelles. Effectuez toujours une validation finale en exécutant vos flux de travail sur GitHub lui-même avant de fusionner les modifications critiques, en particulier pour les pipelines de déploiement. Consultez la documentation officielle de act pour la matrice de prise en charge détaillée et les problèmes connus.

Conclusion

Tester GitHub Actions localement est un important facteur de productivité, transformant le cycle de débogage potentiellement lent et fastidieux en un processus rapide et itératif. L'outil CLI act fournit un moyen robuste et flexible d'y parvenir en tirant parti de Docker pour simuler l'environnement du runner GitHub Actions sur votre machine locale.

En intégrant act dans votre flux de travail, vous gagnez :

Bien qu'il présente des limites et ne soit pas un remplacement parfait 1:1 de l'environnement GitHub en direct, act couvre un vaste éventail de cas d'utilisation et réduit considérablement les frictions impliquées dans le développement de flux de travail GitHub Actions fiables et efficaces. Installez-le, essayez d'exécuter vos flux de travail existants localement et découvrez les avantages de penser globalement tout en agissant localement.

💡
Vous voulez un excellent outil de test d'API qui génère une belle documentation API ?

Vous voulez une plateforme intégrée, tout-en-un, pour que votre équipe de développeurs travaille ensemble avec une productivité maximale ?

Apidog répond à toutes vos demandes et remplace Postman à un prix beaucoup plus abordable !
button

Explore more

Fathom-R1-14B : Modèle de raisonnement IA avancé d'Inde

Fathom-R1-14B : Modèle de raisonnement IA avancé d'Inde

L'IA en expansion rapide. Fathom-R1-14B (14,8 milliards de paramètres) excelle en raisonnement mathématique et général, conçu par Fractal AI Research.

5 June 2025

Mistral Code : L'assistant de codage le plus personnalisable basé sur l'IA pour les entreprises

Mistral Code : L'assistant de codage le plus personnalisable basé sur l'IA pour les entreprises

Découvrez Mistral Code, l'IA d'aide au code la plus personnalisable pour les entreprises.

5 June 2025

Comment Claude Code transforme le codage de l'IA en 2025

Comment Claude Code transforme le codage de l'IA en 2025

Découvrez Claude Code en 2025 : codage IA révolutionné. Fonctionnalités, démo, et pourquoi il gagne du terrain après Windsurf d'Anthropic. Indispensable !

5 June 2025

Pratiquez le Design-first d'API dans Apidog

Découvrez une manière plus simple de créer et utiliser des API