Livraison continue : page Svelte embarquée, le PC et le 108 se posent après chaque fusion #5
Loading…
Reference in a new issue
No description provided.
Delete branch "hermes/paquets-services-deploiement"
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?
Ce que la carte demande : que la page Svelte embarquée soit servie par
pcmirror-serveur,et que les deux cibles (le PC, le LXC 108) se posent après chaque fusion dans
main.Ce qui est dans cette branche
Le service sert la page du binaire.
crates/pcmirror-serveur/build.rsengendre une tableen mémoire depuis
frontend/dist(elle est vide et le dit si la page n'a pas été construite).PCMIRROR_FRONTchoisit l'origine :reference(défaut, les pages copiées du service Python)ou
embarque. En mode embarqué, le repli est celui d'une application monopage : tout chemininconnu hors API rend
index.html; un chemin d'API inconnu rend 404 ; un binaire sans pageembarquée alors qu'on la lui demande rend 503 en le disant.
La livraison.
deploy/deploy.shlivre une cible à la fois : elle construit(
cargo build --release --locked, plus la page Svelte pour le 108), pose le binaire et sesunités, puis joue
deploy/controle-sante.sh. Santé mauvaise : retour arrière automatique sur<binaire>.precedentet sortie en échec.--a-blancdit tout ce qu'elle ferait sans rientoucher,
--retourremet la version précédente à la demande. Le PC se livre sur place(
--transport local, l'exécutantpc-lourdest le PC), le 108 par le nœud Proxmox(
--transport pve,pct, secretCLE_PVE).Ce qui se voit.
.forgejo/workflows/livraison.ymlsuit chaque poussée surmain:essai à blanc, puis le PC, puis le 108 ; l'issue « Livraison PC Mirror en échec » s'ouvre ou se
commente avec l'étape, la cause, le journal et la capture, et se ferme d'elle-même à la
première livraison réussie (
deploy/signalement.py).Un correctif au passage. Le repli de la page ne refusait le retour que dans sa forme nue
(
..) :/assets/..%2f..recevaitindex.html. Le test existait et ne mesurait rien tantqu'aucune page n'était construite ; il échoue depuis que la page est embarquée (commit 2 le
nomme et le corrige).
Preuves mesurées
cargo build --release --locked: 0 avertissement sur la recompilation des deux crates.L'essai de livraison, dans un bac à sable de
/tmp(aucune cible touchée) :Le contrôle de santé joué contre le binaire construit, page construite :
sans
PCMIRROR_FRONT(les pages de référence, comme le service Python) :/rend 20 609octets,
/api/rienrend 200 — le service Python se sert sur tout chemin, et le contrôle desanté compare donc à ce que la cible sert vraiment.
Binaire dont la page n'a pas été construite,
PCMIRROR_FRONT=embarque:/rend 503 avecune page « PC Mirror — page absente »,
/jsonrend toujours 200,/api/rien404.Ce qui n'est pas mesuré
CLE_PVEet les cibles.Rien n'a été posé, rien n'a été déployé.
shellchecksur l'exécutant : l'étape de CI dit qu'elle saute le contrôle s'il est absent,comme le fait déjà la couverture Rust.
loginctl enable-linger stephanesur le PC reste un geste d'administration, hors livraison(sans lui, le minuteur s'arrête à la fermeture de session).
Ce que le chef doit prévenir
Rien pour
svelte: aucun champ d'API n'a changé. La page Svelte n'a pas été touchée ; c'estle service qui a appris à la servir. Les seules nouveautés visibles sont des variables
d'environnement du service (
PCMIRROR_FRONT) et des fichiers de livraison.À poser une fois (ops)
CLE_PVE(clé privée autorisée surroot@192.168.1.60) ;loginctl enable-linger stephanesur le PC.La passe de synchronisation du PC Studio est réécrite en Rust : crate `crates/pcmirror` (bibliothèque et binaire), configuration TOML, verrou, garde-fous, exclusions, corbeille datée, rapport JSON et télémétrie aux mêmes clés que le script en service. La référence reste `sync/pcmirror-sync.sh`, que le PC exécute toujours : rien n'est déployé. `pcmirror run --dry-run` affiche les commandes `rsync` prévues et reproduit la passe décrite dans `docs/COMPORTEMENT-SYNCHRO.md`. - verrou `flock` sans attente, comme `flock -n` : un second passage n'attend pas et sort en 0 ; une panne de `flock` autre qu'un verrou occupé remonte au lieu de se faire passer pour une passe déjà en cours ; - garde-fous : média absent ou vide, hôte injoignable, dossier personnel vide face à une copie pleine, dossier personnel absent ignoré, `--ignorer-garde-fous` pour outrepasser un essai à la main ; - exclusions : les six motifs fixes du script, `_exclusions.txt` du miroir pour le transfert média, `/_rapports/` pour ne pas effacer les rapports déposés ; - rapport JSON de passe, déposé sur le miroir dans `_rapports/` ; télémétrie `_last-sync.json` et `_sync-progress.json` (`{"pct":…,"rate":…}` toutes les 4 s), aux clés du script ; - CI Forgejo : formatage, `clippy` sans avertissement, tests lançant un vrai `rsync` dans `/tmp`, relecture des fichiers de référence. Mesures : 68 tests passés (`cargo test --release --locked`), `clippy --all-targets -D warnings` sans avertissement, couverture 89,15 % des régions / 87,58 % des lignes. Référence de parité : le script en service `/mnt/Media/Linux/pcmirror-sync.sh` (129 lignes, sha256 `cfe3a4b0…`).État de la CI : en attente, aucun exécutant ne sert ce dépôt.
Les huit travaux de l'exécution 11342 (commit
7559711) restent « Waiting to run ». Ce n'est paspropre à cette PR : toutes les exécutions de
foXaCe/pc-mirrorsont dans le même cas, y compriscelles des cartes précédentes (11288, 11289, 11313, 11314, 11341). Pendant ce temps, les
exécutions de
foXaCe/studioqui demandent la même étiquette (runs-on: pc-lourd) passent(11331, 11334 : succès) — l'exécutant
pc-studio(id 12, étiquettespc-lourd:host,studio:host) prend donc les travaux destudioet pas ceux depc-mirror.Conséquence : la CI ne peut pas devenir verte ici, donc
fusion-autone fusionnera pas cette PR,et la livraison décrite ne partira pas après la fusion. Il faut un exécutant pour
foXaCe/pc-mirror(enregistrer un exécutant au niveau du dépôt, ou partagerpc-studioavec lui).Ce qui est mesuré, en attendant, sur la branche :
fusion-auto: pas de fusion, la CI est rouge (Front d'état, Crate pcmirror, Front d'état, Crate pcmirror). Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.Fusionnée automatiquement par
fusion-auto(forge) : CI verte, sans conflit.