Set-OPS-Public/.forgejo/workflows/verifier.yml
Daniel Allaire a68b9cd10e
Some checks are pending
verifier / verifier (push) Waiting to run
CI : le harnais ne se declenchait que par memoire
Trente-huit preuves, des tests, un lint — et RIEN ne les executait sans qu'un humain tape
`make`. Le meilleur atout du depot dependait de ne pas oublier. Il a desormais une CI
(.forgejo/workflows/verifier.yml) et une cible qui la rejoue a l'identique : `make ci`.

CE QUE LA CI A TROUVE AVANT D'EXISTER. Ecrire le workflow supposait de repondre a une
question jamais posee : est-ce qu'un depot PUBLIC, seul, se tient ? Mesure sur un clone
nu : non, a cinq endroits.

- `make instancier` echouait sur le modele public — le tout premier geste du QUICKSTART.
  Le Makefile forcait `principal/hosts.yml` alors que le modele vit en `production/` ; sa
  precedence suit desormais celle du code (fichier, puis REPERTOIRE existant, puis defaut).
- P32 parcourait les 54 roles sans regarder ce que l'instance deploie. Elle passait sur
  l'ecosysteme de reference PARCE QU'IL PORTE TOUT. Or les modeles sont des OFFRES : toute
  offre plus petite que l'ecosysteme complet echouait son propre harnais, pour des services
  qu'elle ne vend pas. Le perimetre se lit maintenant du plan (groupes de l'inventaire,
  puis roles composes par leur playbook).
- P24 : le modele public ne declarait aucun reseau d'administration — une flotte qu'on
  construit et ou l'on n'entre plus. `nftables_admin_ssh` est pose, avec le pourquoi.
- P33 : verifier_ports.py codait `instance/inventories/principal/hosts.yml` en dur.
- P32 et P24 lisaient le symlink `instance/` au lieu de SETOPS_INSTANCE.

Toutes de la MEME FAMILLE que P03 avant-hier : une resolution d'inventaire recopiee, une
variable d'environnement qui deborde de sa portee. Le depot en compte SEPT ; deux de plus
sont corrigees ici, et la septieme le dit en commentaire plutot que de le taire.

`make ci` NE TOUCHE AUCUN SYMLINK : le modele public est monte comme instance jetable,
vise par SETOPS_INSTANCE/SETOPS_UNDERLAY, detruit en sortant. Deux details mesures parce
que devines faux d'abord : l'instance jetable est un DOSSIER FRERE (la federation se
decouvre ainsi ; ailleurs, quatre preuves tombent) ; et SETOPS_UNDERLAY n'est pose QUE
pour la verification, sinon l'inventaire est ecrit avec une fabric et regenere avec une
autre — la commande fabriquait l'ecart qu'elle denonce.

RESULTAT : clone nu sans instance ni frere -> 38 OK, 0 echec, 0 saute. Depot de
l'exploitant avec ses 3 instances -> 38 OK, 0 echec, 0 saute. Aucun residu.

Et le lint du depot a refuse mon propre fichier de CI avant qu'il ne tourne une seule fois
(`on:` lu par YAML comme le booleen vrai). Le harnais mordait deja.

A AJUSTER AU PREMIER PASSAGE, ecrit en tete du workflow : l'etiquette `runs-on` doit
correspondre a un runner Forgejo enregistre, et le runner a besoin du reseau pour pip et
ansible-galaxy. Le vert de cette CI dira que le moteur et son modele public se tiennent —
pas que la flotte va bien : aucune VM jointe, aucune voute.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 19:29:46 -04:00

51 lines
2.2 KiB
YAML

# Verification automatique du depot, a chaque poussee.
#
# POURQUOI CE FICHIER EXISTE (2026-08-20). Le depot portait 38 preuves rejouables, des
# tests unitaires et un lint — et RIEN ne les executait sans qu'un humain tape `make`.
# Le meilleur atout du projet ne se declenchait que par memoire. Un harnais qu'on peut
# oublier de lancer ne garde rien.
#
# CE QUE CETTE CI VERIFIE : que le depot PUBLIC, seul, se tient. Elle monte le modele
# public `exemples/modeles/socle` comme instance jetable, l'applique, puis rejoue lint,
# tests, syntaxe et les 38 preuves (`make ci`). C'est exactement ce qu'obtient un inconnu
# qui clone le depot — et c'est pour ca que ca vaut la peine : jusqu'au 2026-08-19, ce
# chemin-la ne passait pas.
#
# CE QU'ELLE NE PEUT PAS VERIFIER, et il faut le savoir :
# - la flotte reelle. Aucune VM n'est jointe, aucun deploiement n'est fait ;
# - la voute. Aucun secret n'entre ici ; les preuves qui exigent une voute reelle
# travaillent sur le modele, qui n'en a pas ;
# - l'instance de production. Elle vit dans un depot prive, absent d'ici.
# Le vert de cette CI dit « le moteur et son modele public se tiennent », pas « la flotte
# va bien ». Cette derniere question, c'est `make prouver` sur le poste de l'exploitant.
#
# DEUX CHOSES A AJUSTER AU PREMIER PASSAGE :
# - `runs-on` doit correspondre a une etiquette d'un runner Forgejo enregistre ;
# - le runner a besoin d'un acces reseau pour pip et ansible-galaxy.
name: verifier
# « on » entre guillemets : YAML lit `on:` nu comme le booleen vrai, et le lint du depot
# le refuse (yaml[truthy]). Le harnais a attrape son propre fichier de CI avant qu'il ne
# tourne une seule fois.
"on":
push:
pull_request:
workflow_dispatch:
jobs:
verifier:
runs-on: ubuntu-latest
steps:
- name: Recuperer le depot
uses: actions/checkout@v4
- name: Outils et collections, puis `make ci`
run: |
set -e
python3 -m venv /tmp/venv
. /tmp/venv/bin/activate
pip install --quiet --upgrade pip
pip install --quiet 'ansible-core>=2.18,<2.19' ansible-lint pyyaml
ansible-galaxy collection install -r requirements.yml
make ci