Beryl::BuildReport
État LISIBLE des builds de paquets d'un builder poudriere géré par la
primitive poudriere-build (cf. Beryl::Apply::PoudriereBuild), utilisé
par beryl build-status. Tout est PUR ici (aucun SSH) : script de lecture
envoyé au builder, analyse de sa sortie, du journal de build, de
poudriere status, calcul de l'état et rendu texte/JSON.
Fichiers de la primitive, dans le répertoire des paquets :
.beryl-build-<majeur>.lock: présent pendant un build ;.beryl-build-<majeur>.log: sortie du script de build (dont celle depoudriere bulk), écrasé à chaque build ;.beryl-build-<majeur>.overlays: une ligne<overlay> <commit>par overlay, écrit seulement en fin de build RÉUSSI (sa date = fin du dernier build réussi).
Formats poudriere lus (src/share/poudriere/common.sh, job_msg_status) :
[00:07:46] [01] [00:00:00] Building lang/crystal | crystal-1.21.0
[00:14:03] [01] [00:06:17] Finished lang/crystal | crystal-1.21.0: Success
[00:20:11] [02] [00:03:02] Finished www/foo | foo-1.2: Failed: build
1ʳᵉ durée = temps écoulé depuis le début du bulk, 2ᵉ = durée du paquet sur
son builder. Journal d'erreur d'un paquet : <LOGS>/logs/errors/<pkg>.log.
Constants
Durée poudriere : [ND:]HH:MM:SS (calculate_duration).
Ligne d'événement d'un paquet. Les préfixes [écoulé], [builder] et
[durée du paquet] sont optionnels (absents hors builder, ou remplacés
par =>> quand poudriere n'affiche pas le temps écoulé).
Motif grep -E côté builder : seules les lignes utiles du journal
voyagent (événements des paquets, chemin des journaux, bilan, erreurs,
fin du script). ASCII seulement (le journal peut être en C locale).
Lignes de fin de journal rapportées (dernières lignes du script).
Paquets terminés affichés sans --all (les plus longs).
Instance methods
Compteurs recomptés depuis les événements du journal (dernier recours).
0 = succès / en cours / jamais construit ; 1 = un build en échec.
377 → "6 min 17 s" ; 21 → "21 s" ; 3900 → "1 h 05 min".
Majeurs présents (d'après les fichiers trouvés), triés numériquement.
Lignes du journal (filtrées ou non) → paquets, chemin des journaux, bilan, erreurs. Un paquet relancé (même nom) remplace le précédent.
.overlays → [{nom, commit}] dans l'ordre du fichier.
poudriere status -H (tabulations) ou affichage normal (espaces).
L'en-tête et les lignes illisibles sont ignorés.
Ligne de poudriere status correspondant au build : même nom de build
que le journal (Logs: …/<BUILD>), sinon — build en cours seulement —
la plus récente non terminée d'une jail du majeur (fbsd<majeur><mineure><arch>).
Script (sh POSIX, lecture seule) qui rassemble en UNE connexion : dates
et tailles des fichiers de la primitive, contenu de .overlays, lignes
utiles et fin du journal, poudriere status. major nil = tous les
majeurs présents. Multi-ligne : transporté par Apply.sh_line (base64),
donc sûr sous un shell de connexion csh.
Rendu texte de tous les majeurs. all = liste complète des paquets
terminés (sinon les TOP premiers selon le tri).
Rapport d'un majeur à partir de la lecture distante.
Tous les majeurs demandés (major nil = ceux présents).
"00:06:17" → 377 ; "1D:02:00:00" → 93600. nil si illisible.
Tri des paquets terminés : durée décroissante (défaut) ou origine.