CI : ajouter les tests, déclencher sur push, compiler les trois binaires #48
Labels
No labels
bug fix
feature implementation
new feature
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
syonad/two#48
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
Constaté en préparant #46 (relèvement du module en
go 1.25). La CI actuelle tient en troisworkflows :
release-pipeline.yml(orchestration),build.yml(compilation, appelé enworkflow_call) etrelease.yml(publication).build.ymlfait checkout →setup-go→go build→ upload d'artefact. Et c'est tout.Ce qui manque
1. Aucun test n'est exécuté par la CI
Il n'y a ni
go testnigo vetdans aucun des trois workflows. La suite de tests duprojet n'a jamais été exécutée automatiquement.
Conséquence concrète et déjà vérifiée : #47 —
panic: send on closed channelsurinternal/dispatcher/agent, reproductible une passe complète sur deux — vivait surmainsansqu'aucun signal ne le remonte. Il a fallu monter une ligne de base à la main pour le voir.
2. Rien ne tourne avant la publication d'une release
Le seul déclencheur du pipeline est :
Aucun workflow ne se déclenche sur un push de branche ni sur une ouverture de PR. La première
exécution de la CI pour un changement donné a donc lieu au moment où on publie, ce qui est
le pire moment pour découvrir une compilation cassée. C'est aussi ce qui rend toute modification
du pipeline lui-même impossible à valider autrement qu'en poussant un tag.
3.
cmd/dbn'est jamais compilé ni publiéLa matrice de
release-pipeline.ymlne liste que deux binaires :Le projet en a trois —
cmd/agent,cmd/metadata,cmd/db.dbn'est donc ni construit parla CI, ni publié en asset de release, alors que c'est l'outil d'inspection du store. À trancher :
oubli, ou choix délibéré de ne pas le livrer ?
4. La version de Go était épinglée en dur, et avait dérivé
build.ymldéclaraitgo-version: "1.21"alors que le module était engo 1.24.0. Çafonctionnait — l'auto-download de toolchain (
GOTOOLCHAIN=auto) télécharge la version demandéepar
go.mod— mais le workflow affichait une version qui n'était pas celle qui compilait.Corrigé dans la branche de #46 :
go-version: "1.25.14". Reste que c'est une source dedérive structurelle. La correction de fond est
go-version-file: go.mod, qui fait dego.modla seule source de vérité. Elle n'a pas été appliquée tout de suite parce qu'un changement
d'input de
setup-gon'est aujourd'hui validable qu'en poussant un tag (cf. point 2) : à faireune fois le déclencheur sur push en place.
Propositions
test:go test ./...etgo vet ./..., déclenché sur push de branche et sur PR,en plus du pipeline de release. C'est le point qui apporte le plus.
dbà la matrice si sa publication est souhaitée,ou noter explicitement pourquoi il en est exclu.
go-version-file: go.modune fois le job sur push en place, pour supprimer laclasse de dérive du point 4.
go build ./...en plus des builds par binaire : la matrice ne compile que./cmd/<binari>, donc un paquet interne cassé mais non atteint depuis ces binaires passeraitinaperçu.
-racesur le job de test. Les défauts de ce projet sont concurrents parnature (workers, watchdog, arrêt de l'agent) — #47 en est l'illustration.
Périmètre
Outillage seul, aucun changement de code produit. Placé en
next_featurefaute de rattachementà un jalon fonctionnel ; à remonter en 0.2.0 si on veut que le développement de #46 en bénéficie,
ce qui serait défendable.