GitHub Actions
Ce cours fait passer des principes de l'intégration continue à leur mise en œuvre sur la plateforme la plus répandue : GitHub Actions. Il s'adresse aux développeurs, administrateurs et responsables techniques qui doivent écrire des pipelines, les relire, ou en répondre en cas d'incident. Il suppose le cours CI/CD : les principes (ou une expérience équivalente), une aisance avec Git et les demandes de fusion, et la construction d'images de conteneurs.
L'approche
Le cours précédent a fait construire un serveur d'intégration continue en Bash pour rendre chaque mécanisme visible. Celui-ci part de ce même serveur et montre, pièce par pièce, comment GitHub Actions réalise chaque fonction, ce qu'il ajoute et ce qu'il cache. L'application qui sert d'exemple reste Signalements, la petite API Flask et PostgreSQL des cours précédents : au fil des douze leçons, son workflow passe de quelques étapes de vérification à une chaîne complète qui teste, construit une image multi-architecture, l'atteste, la déploie à travers des environnements protégés, et résiste aux attaques documentées ces deux dernières années.
La moitié du cours parle de sécurité, et ce n'est pas un hasard : de l'incident tj-actions de 2025 à la compromission de TanStack en 2026, les pipelines GitHub Actions sont devenus une cible de premier plan, et la plupart des attaques exploitent des erreurs de configuration que l'on apprend ici à reconnaître.
Note
Tous les workflows de ce cours sont validés avec actionlint et zizmor, et toutes les commandes exécutables hors de GitHub (étapes de script, action écrite en JavaScript, outils d'audit) ont été lancées réellement. Les comportements propres à la plateforme (déclenchement, journaux, approbations) sont décrits d'après la documentation officielle et le code source de l'agent, et aucune sortie de journal GitHub n'est reproduite comme si elle avait été capturée.
Ce qu'il faut installer
- Git, Docker Engine et Python 3, comme dans les cours précédents.
- Un compte GitHub et un dépôt de travail, de préférence public : sur le plan gratuit, les minutes y sont illimitées, et les règles de protection (relecteurs d'environnement, branches protégées) n'y sont disponibles que pour les dépôts publics.
- actionlint pour valider les workflows avant de les pousser, et
gh, la ligne de commande de GitHub, pour suivre les exécutions depuis le terminal. - Node.js 24 pour la leçon 8 (écrire une action en JavaScript).
Plan du cours
- Votre premier workflow
200 Pratiquer
Événement, workflow, job, étape, action, runner : le modèle de GitHub Actions, montré en portant le pipeline du serveur d'intégration continue fait main vers un premier workflow, validé avant la poussée, et décortiqué jusqu'au script que l'agent exécute réellement. - Déclencheurs et filtres
200 Pratiquer
Choisir quand un workflow s'exécute : poussées, demandes de fusion et leur commit de fusion, étiquettes, filtres de branches et de chemins, exécution manuelle avec paramètres, planification, et maîtrise de la concurrence entre exécutions. - Expressions, contextes et sorties
200 Pratiquer
Faire décider et communiquer un workflow : expressions et leurs règles de conversion, contextes et où ils sont disponibles, variables d'environnement et de configuration, sorties d'étapes et de jobs, résumés, fonctions d'état, et le danger de la substitution de texte. - Jobs, matrices et services
200 Pratiquer
Organiser un workflow en graphe de jobs, multiplier les vérifications avec une matrice de versions, tester contre un vrai PostgreSQL en conteneur de service, et publier un seul check fiable pour la protection de branche. - Cache et artefacts
200 Pratiquer
Accélérer un workflow avec le cache de dépendances sans le rendre faux ni vulnérable, conserver et transmettre des fichiers avec les artefacts : clés, portée par branche, limites, nouveaux réglages de 2026, et les attaques par empoisonnement de cache. - Construire et publier une image multi-architecture
300 Concevoir
Publier l'image de Signalements pour amd64 et arm64 : émulation, construction croisée ou runners Arm natifs, publication par empreinte, assemblage de l'index, étiquettes, cache de construction, test de fumée sur chaque architecture et attestation de provenance. - Actions composites et workflows réutilisables
300 Concevoir
Factoriser les workflows sans perdre en lisibilité ni en sécurité : ancres YAML, actions composites, workflows réutilisables, leurs limites respectives, la nouvelle syntaxe « $/ », le dépôt central de workflows et son versionnement. - Écrire sa propre action
300 Concevoir
Écrire, tester et publier une action JavaScript : le fichier de métadonnées, la boîte à outils @actions/core, l'empaquetage dans dist/, l'exécution locale qui imite le runner, la vérification en CI, le versionnement, et ce que l'on prend comme responsabilité en publiant du code exécuté dans les pipelines des autres. - Environnements, secrets et déploiement
300 Concevoir
Déployer Signalements en recette puis en production selon le modèle GitOps : secrets et leur chiffrement, environnements protégés, approbations, règles de branches, concurrence des déploiements, et l'analyse honnête du workflow de déploiement de ce site, contraint par le plan gratuit. - OIDC : des identités sans secret
300 Concevoir
Remplacer les clés de longue durée par l'identité du workflow : le jeton OIDC de GitHub, ses revendications, les politiques de confiance des fournisseurs, le format de sujet immuable de 2026, et ce que l'on peut faire chez Scaleway, qui n'offre pas de fédération, avec OpenBao comme intermédiaire. - Sécuriser ses workflows
300 Concevoir
Les attaques réelles contre GitHub Actions de 2024 à 2026, leurs quatre mécanismes, et les parades : permissions minimales, déclencheurs dangereux, injections, épinglage par empreinte, Dependabot, protections de 2026, audit avec zizmor, appliqués au fil rouge et aux workflows réels de Lyneko. - Runners auto-hébergés et exploitation
300 Concevoir
Quand et comment faire tourner ses propres runners : l'agent, l'enregistrement, les runners éphémères, Actions Runner Controller sur Kapsule, et leur sécurité ; puis l'exploitation de GitHub Actions au quotidien : diagnostic, journaux de débogage, durées, coûts, ménage et calendrier de maintenance.