10 points par GN⁺ 2026-01-15 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • Partage de l’expérience frustrante d’un développeur face à la boucle de feedback lente et au débogage complexe de GitHub Actions
  • Dans le projet tmplr, la documentation était générée avec CUE via build.rs, mais les échecs du build CI ont déclenché le problème
  • Sur 4 plateformes, seul Linux ARM échouait au build ; la cause était le comportement de GitHub Actions qui masque les binaires x86_64 sur un runner arm64 lors d’un cross build
  • Une boucle de feedback inefficace où 2 à 3 minutes étaient nécessaires pour tester une seule modification
  • Solution adoptée : suppression de build.rs et passage à un GNU Makefile, afin de contrôler directement la logique CI et de résoudre le problème

Contexte du problème

  • tmplr est un outil de scaffolding de fichiers/projets qui utilise des fichiers de template lisibles et modifiables par des humains
  • build.rs utilisait CUE pour générer README.md, CHANGELOG.md ainsi que les fichiers de version et d’aide, afin de garantir la cohérence
  • Le travail en lui-même a été terminé en environ 1,5 heure, et l’article associé était également déjà rédigé
  • Tout fonctionnait en local, mais dans l’environnement CI de GitHub Actions, le build a échoué parce que le binaire CUE n’était pas installé

Cause de l’échec du build

  • Parmi 4 plateformes (Linux ARM, macOS ARM, Linux x86_64, macOS x86_64), seul Linux ARM produisait une erreur « command not found »
  • Cause : le matrix cross build est fortement isolé, si bien que CUE n’était installé que sur l’hôte Linux x86_64 et l’hôte macOS ARM
    • Sur macOS, exécuter un binaire x86_64 ne pose pas de problème
    • Sur Linux x86_64 non plus, exécuter un binaire x86_64 ne pose pas de problème
    • En revanche, GitHub Actions masque les binaires x86_64 sur un runner arm64, les rendant impossibles à exécuter

Une boucle de feedback inefficace

  • Processus répété pour tenter de résoudre le problème :
    1. chercher des corrections possibles
    2. modifier ci.yml
    3. commit et push (jj squash --ignore-immutable && jj git push)
    4. ouvrir l’onglet « Actions »
    5. ouvrir la dernière exécution
    6. ouvrir l’exécution Linux ARM
    7. attendre quelques secondes
    8. frustration
    9. recommencer
  • 2 à 3 minutes étaient nécessaires par modification
  • Dans l’idéal, GitHub fournirait soit un runner local complet, soit une fonction permettant de vérifier rapidement la progression après un push
    • Une fonctionnalité du type « scratch commit » : un moyen de tester différentes exécutions sans polluer l’historique Git ni l’historique des exécutions Actions
  • Mais à ce jour, une telle fonction n’existe pas

Solution

  • Après avoir répété cette boucle pendant 30 minutes, arrêt
  • Application d’une méthode bien connue sur Internet : « ne laissez pas GitHub Actions gérer la logique ; contrôlez directement le script et laissez Actions se contenter de l’appeler »
  • Suppression de build.rs (à regret, mais le sacrifice était nécessaire)
  • Déplacement de toutes les tâches de génération dans un GNU Makefile
  • Commit des fichiers générés dans le dépôt et annulation des changements CI
  • Problème résolu

Conclusion

  • GitHub Actions empêche parfois de bénéficier de certaines bonnes approches
  • Beaucoup de temps est perdu à déboguer les runners ou à optimiser le processus de build
  • Mais il offre aussi des avantages difficiles à obtenir autrement, comme les builds macOS
  • Et bien sûr, il n’existe pas vraiment de système réputé plus simple à configurer que GitHub Actions
    > We are all doomed to GitHub Actions. …but at least I dodged the bullet early.

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.