fix(tableau) : construire.sh donne au conteneur ses deux gabarits et python3 #1823

Merged
foXaCe merged 1 commit from fix/reglages-banc-conteneur into main 2026-10-17 15:14:39 +02:00
Collaborator

Le symptôme

_tableau/construire.sh --rust sortait :

test result: FAILED. 6 passed; 2 failed; 0 ignored
error: test failed, to rerun pass `-p service --test reglages`
PORTE ROUGE : Rust en échec

avec attendu 200, obtenu « 500 Internal Server Error ». Or le même dépôt passe ces bancs sur le PC : cargo test -p service --test reglages → 8/8.

Ce n'était ni le conteneur en général, ni les permissions, ni un banc instable. Deux choses manquaient dedans, et la seconde était cachée par la première (le journal ne garde que les 20 dernières lignes de cargo test).

Cause 1 — deux gabarits lus à côté de la crate

construire.sh ne copie dans /b/src que _tableau/rust :

tar -C "$ICI/rust" --exclude=./sortie --exclude=./target -cf - . | tar -C "$BUILD/src" -xf -

Deux bancs lisent leur gabarit à côté de leur crate :

banc chemin lu fichier du dépôt
service/tests/reglages.rs CARGO_MANIFEST_DIR/../../reglages.html _tableau/reglages.html
service/tests/session.rs CARGO_MANIFEST_DIR/../../connexion.html _tableau/connexion.html

Dans le conteneur, /b/src/service/../../reglages.html n'existe pas → « gabarit illisible » → 500. Sur le PC, le fichier est là → 200.

Le script copie déjà CHARTE-UI.md et tableau-bord.py pour exactement cette raison (« lu par les bancs », « lu par cadre.test.js ») : ces deux gabarits-là avaient été oubliés.

Cause 2 — python3 absent, et impossible à installer dans le conteneur de compilation

Une fois les reglages verts, quatre bancs de session apparaissent en échec :

panicked at service/tests/session.rs:63:82:
python3 disponible: Os { code: 2, kind: NotFound, message: "No such file or directory" }

Ce banc prend Python pour référence — il compare la signature du jeton et l'empreinte du mot de passe à ce que calcule le Python du dépôt, « pour ne pas l'inventer ». L'image rust:1-alpine ne l'a pas.

Et apk add ne peut pas se faire là où la compilation tourne : jetable() lance le conteneur avec --user $(stat -c %u:%g "$BUILD") (l'uid du dossier, pas root) — l'installation échouait sans rien dire.

Le correctif

  1. deux cp dans construire.sh, à côté de ceux qui existent, avec le commentaire qui dit pourquoi ;
  2. une image dérivée studio-rust-python:1-alpine (FROM rust:1-alpine + RUN apk add --no-cache python3), construite une seule fois par construire.sh si elle manque, et utilisée pour cargo test / cargo build.

Et la note d'exploitation de _tableau/LXC-132.md — qui disait « défaut d'environnement du conteneur, étranger à ce correctif » — est corrigée : c'étaient deux fichiers non copiés et un outil absent.

Vérification

_tableau/construire.sh --rust relancé : cargo test : vert (conteneur exécuté dans le LXC 130, comme en production).

## Le symptôme `_tableau/construire.sh --rust` sortait : ``` test result: FAILED. 6 passed; 2 failed; 0 ignored error: test failed, to rerun pass `-p service --test reglages` PORTE ROUGE : Rust en échec ``` avec `attendu 200, obtenu « 500 Internal Server Error »`. Or le **même dépôt** passe ces bancs sur le PC : `cargo test -p service --test reglages` → **8/8**. Ce n'était ni le conteneur en général, ni les permissions, ni un banc instable. **Deux choses manquaient dedans, et la seconde était cachée par la première** (le journal ne garde que les 20 dernières lignes de `cargo test`). ## Cause 1 — deux gabarits lus à côté de la crate `construire.sh` ne copie dans `/b/src` que `_tableau/rust` : ```sh tar -C "$ICI/rust" --exclude=./sortie --exclude=./target -cf - . | tar -C "$BUILD/src" -xf - ``` Deux bancs lisent leur gabarit **à côté** de leur crate : | banc | chemin lu | fichier du dépôt | |---|---|---| | `service/tests/reglages.rs` | `CARGO_MANIFEST_DIR/../../reglages.html` | `_tableau/reglages.html` | | `service/tests/session.rs` | `CARGO_MANIFEST_DIR/../../connexion.html` | `_tableau/connexion.html` | Dans le conteneur, `/b/src/service/../../reglages.html` n'existe pas → « gabarit illisible » → **500**. Sur le PC, le fichier est là → 200. Le script copie déjà `CHARTE-UI.md` et `tableau-bord.py` **pour exactement cette raison** (« lu par les bancs », « lu par cadre.test.js ») : ces deux gabarits-là avaient été oubliés. ## Cause 2 — `python3` absent, et impossible à installer dans le conteneur de compilation Une fois les `reglages` verts, quatre bancs de `session` apparaissent en échec : ``` panicked at service/tests/session.rs:63:82: python3 disponible: Os { code: 2, kind: NotFound, message: "No such file or directory" } ``` Ce banc prend Python pour référence — il compare la signature du jeton et l'empreinte du mot de passe à ce que calcule le Python du dépôt, « pour ne pas l'inventer ». L'image `rust:1-alpine` ne l'a pas. Et `apk add` **ne peut pas** se faire là où la compilation tourne : `jetable()` lance le conteneur avec `--user $(stat -c %u:%g "$BUILD")` (l'uid du dossier, pas root) — l'installation échouait sans rien dire. ## Le correctif 1. deux `cp` dans `construire.sh`, à côté de ceux qui existent, avec le commentaire qui dit pourquoi ; 2. une **image dérivée** `studio-rust-python:1-alpine` (`FROM rust:1-alpine` + `RUN apk add --no-cache python3`), construite une seule fois par `construire.sh` si elle manque, et utilisée pour `cargo test` / `cargo build`. Et la note d'exploitation de `_tableau/LXC-132.md` — qui disait « défaut d'environnement du conteneur, étranger à ce correctif » — est corrigée : c'étaient deux fichiers non copiés et un outil absent. ## Vérification `_tableau/construire.sh --rust` relancé : **cargo test : vert** (conteneur exécuté dans le LXC 130, comme en production).
fix(tableau): construire.sh donne au conteneur ses deux gabarits et python3
All checks were successful
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 1m56s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Successful in 8m11s
4b55528096
`construire.sh --rust` sortait « PORTE ROUGE » dans le conteneur `rust:1-alpine` : deux bancs de
`reglages` répondaient 500 « gabarit illisible » là où le même dépôt passait sur le PC (8/8).

DEUX CAUSES, et la seconde était cachée par la première — le journal ne garde que les vingt
dernières lignes de `cargo test`.

1. Le script ne copie dans `/b/src` que `_tableau/rust`, alors que deux bancs lisent leur gabarit À
   CÔTÉ de leur crate : `CARGO_MANIFEST_DIR/../../reglages.html` et `../../connexion.html`, soit
   `_tableau/reglages.html` et `_tableau/connexion.html`. Les deux `cp` manquaient, à côté de ceux de
   `CHARTE-UI.md` et `tableau-bord.py`, déjà là pour exactement cette raison. Sans le fichier, le
   service répond « gabarit illisible » (500) au lieu de 200.

2. Quatre bancs de `session` prennent `python3` pour référence — la signature du jeton et l'empreinte
   du mot de passe, comparées à ce que calcule le Python du dépôt « pour ne pas l'inventer ». L'image
   ne l'a pas, et `apk add` ne PEUT pas se faire là où la compilation tourne : `jetable()` lance le
   conteneur en `--user` (l'uid du dossier), donc sans root, et l'installation échouait sans rien
   dire. D'où une image dérivée, `studio-rust-python:1-alpine` (`FROM rust:1-alpine` + python3),
   construite une seule fois par le script quand elle manque.

Mesuré après correction : `construire.sh --rust` → « cargo test : vert, 46 suites », et les deux
binaires musl produits.

La note d'exploitation de `_tableau/LXC-132.md`, qui disait « défaut d'environnement du conteneur,
étranger à ce correctif », est corrigée : c'étaient deux fichiers non copiés et un outil absent.
foXaCe merged commit acc85a5b0a into main 2026-10-17 15:14:39 +02:00
foXaCe deleted branch fix/reglages-banc-conteneur 2026-10-17 15:14:39 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
foXaCe/studio!1823
No description provided.