freedzhost.cloud

Votre propre CI sur Forgejo : les pièges du runner, une image pour tout, et des tests qui ne mentent pas

Niveau IntermédiaireTemps estimé 1 hÀ lire avant Homelab 8 : votre propre forge de code, où rien n'arrive sur main sans contrôle vertUn mot inconnu ? Lexique

Avoir sa propre forge, c'est avoir sa propre CI : chaque demande de fusion testée sur votre matériel, pas de minutes à acheter, rien qui sorte de la maison. Forgejo Actions lit les mêmes fichiers de workflow que GitHub Actions, presque. C'est dans le « presque » que partent les soirées.

Comment ces chiffres ont été obtenus. Mesurés sur nos propres machines (voir le protocole), en général en un seul passage, vitesses relevées par le serveur lui-même ; nous ne publions pas les journaux bruts. Ce sont des ordres de grandeur sur ce matériel, pas des garanties sur le vôtre. Les chiffres extérieurs sont accompagnés de leur source.

Ce que vous y gagnez. Les trois pièges qui bloquent un premier workflow, une image d'exécutant qui porte tous les outils pour que les jobs cessent de les réinstaller (un job passait 1 min 24 de ses 1 min 30 à réinstaller ses outils), et quatre habitudes qui gardent une CI verte honnête sur une quarantaine de dépôts ici.

Un peu d'histoire

Forgejo descend de Gogs, un service Git auto-hébergé écrit en Go (2014), repris sous le nom de Gitea en 2016 par sa communauté. Quand la gouvernance de Gitea est passée à une entreprise en 2022, l'association Codeberg a lancé Forgejo comme fork communautaire, devenu entièrement indépendant en 2024. Sa CI, Forgejo Actions, lit volontairement le format de workflow popularisé par GitHub Actions (2018), si bien que la plupart des workflows existants tournent avec de petites retouches. L'exécutant est un programme à part : vous décidez quelle machine fait tourner vos jobs, et quels outils elle porte.

1. Trois pièges d'un premier workflow

  1. L'exécutant ne répond qu'à ses étiquettes. Le nôtre annonce ubuntu-latest. Tout autre runs-on: laisse le job en attente pour toujours, sans erreur : personne ne le réclame.
  2. Pas d'image slim comme conteneur de job. Les actions JavaScript comme checkout tournent avec node dans le conteneur du job. Une image python:slim n'a pas node : le job meurt en code 127 avant sa première étape.
  3. Écrivez les actions avec leur adresse complète : https://data.forgejo.org/actions/checkout@v4. Les noms courts ne sont pas résolus vers GitHub.

2. Une seule image d'exécutant pour tous les dépôts

Chaque workflow réinstallait pip, ruff, pytest, uv, node et compagnie à chaque passage : 1 min 24 sur un job de 1 min 30. Nous avons construit une image qui les porte tous, et pointé l'étiquette de l'exécutant dessus.

3. Quatre habitudes qui gardent le vert honnête

Pièges

Un message de commit écrit avec un here-document sur la même ligne que d'autres commandes prend ces commandes pour son texte. Gardez git commit -F - <<'MSG' seul dans sa commande, relisez le sujet avec git log -1 --format=%s, et seulement ensuite poussez.

Certains points d'accès de l'API des runs renvoient des listes vides ou des 404 selon les versions, ce qui ressemble à « aucun exécutant ». Fiez-vous au journal du job et à l'état de l'exécutant lui-même, pas à une liste vide.

Sources

Utile ? Dites-nous ce qu'il faut mesurer ensuite.