Tous les articles

Le tag relu n'est pas le code exécuté : lockfiles GitHub Actions

GitHub · 4 min de lecture ·

Vous relisez une pull request qui ajoute uses: some-org/deploy-action@v4 à un workflow. L'action a l'air correcte, vous approuvez, elle tourne. Un mois plus tard, le même workflow repart, toujours sur v4, et exécute un code que personne dans l'équipe n'a lu. Rien n'a bougé dans votre dépôt. C'est le tag qui a bougé. Le 14 octobre 2026, GitHub a ouvert en préversion publique les lockfiles de workflow pour combler précisément ce trou, et la fonction est disponible sur les offres Free et Team en plus d'Enterprise Cloud.

jour de la revue jour de l'exécution tag v4 commit A vous l'avez lu tag v4 commit B personne ne l'a lu même fichier de workflow votre dépôt n'a pas changé, le tag si
Un tag est un pointeur que quelqu'un d'autre contrôle. Votre revue a approuvé ce vers quoi il pointait ce jour-là.

Un workflow relu n'est pas une exécution relue

Les tags et les branches peuvent être déplacés après la revue d'un workflow. GitHub décrit le risque sans détour : si une action est compromise, un tag ou une branche déplacés peuvent faire entrer du code malveillant dans vos exécutions sans aucun changement dans votre dépôt. L'historique des diffs reste propre, la protection de branche ne se déclenche jamais, et le changement n'existe que dans le dépôt de quelqu'un d'autre. Pour un workflow qui détient une clé de déploiement ou un jeton de registre, c'est toute la partie qui se joue là.

Ce que le lockfile fige

Selon GitHub, le lockfile vous laisse garder des références lisibles comme @v4 dans le workflow, tandis qu'Actions exécute les commits exacts que vous avez verrouillés. On le génère avec l'extension gh actions-lock de GitHub CLI, qui écrit .github/workflows/actions.lock avec des commits vérifiables pour vos actions, leurs dépendances transitives et les dépendances des workflows réutilisables que vous appelez. Si le tag bouge ensuite, GitHub indique que l'exécution reste sur le commit enregistré.

le workflow dit uses ...@v4 actions.lock action : commit A sa dépendance : commit C exécute A et C tag v4 déplacé vers le commit B ignoré tant que vous ne régénérez pas le lock
La référence reste lisible pour les humains. Le commit exécuté est celui inscrit dans le lockfile.

La différence avec l'épinglage manuel des SHA

La parade manuelle classique, en pratique générale, consiste à écrire le SHA complet de 40 caractères du commit dans la ligne uses:. Ça marche, mais c'est illisible, on oublie facilement de le mettre à jour, et cela ne fige que l'action nommée. Si cette action est une action composite qui appelle d'autres actions par tag, ces références internes restent libres de bouger. Le lockfile couvre cette couche transitive. Et avec Dependabot, selon GitHub, une mise à jour de version d'une action dans un workflow déjà intégré régénère l'entrée correspondante du lockfile dans la même pull request : l'épinglage et la montée de version se relisent ensemble.

L'adopter sans tout changer d'un coup

L'extension de GitHub permet d'intégrer les workflows un par un. Une fois intégré, un workflow doit avoir des entrées de lockfile pour ses dépendances, et ses exécutions utilisent les commits enregistrés. La même extension peut détecter un lockfile périmé sans modifier de fichier, ce qui convient à une étape de CI qui fait échouer la pull request quand le lock n'est plus à jour. Les administrateurs au niveau du dépôt, de l'organisation ou de l'entreprise peuvent aussi activer une politique « Require lockfile », elle aussi en préversion publique.

Un lockfile garantit que le code exécuté reste le code relu. Il ne rend pas ce code sûr : GitHub le dit lui-même, alors relisez une action avant de la verrouiller.

Une première étape concrète : prenez le workflow de votre dépôt qui détient le secret le plus sensible, en général celui du déploiement, lancez gh actions-lock dessus, lisez les commits qu'il enregistre, puis ajoutez la vérification de lockfile périmé à la CI. Passez ensuite au workflow suivant. GitHub remercie Andrew Nesbitt, François Proulx, Jesse Houwing et William Woodruff d'avoir travaillé avec l'équipe sur la fonction. Source : GitHub Changelog, workflow lockfiles in public preview.

Ce que disent les lecteurs

  1. Pas encore de mot. Le premier est toujours le plus courageux.
Vous construisez quelque chose du genre ? Je peux vous aider. Écrivez-moi sur WhatsApp