Corriger l'erreur de syntaxe JS qui cassait tout le GUI

dessinerServeurs contenait une apostrophe mal echappee (l\\'inventaire)
qui, une fois rendue, terminait prematurement la chaine JS : une seule
erreur de syntaxe fait tomber tout le script -> page inutilisable.
Remplace par l'apostrophe typographique (sans echappement).

Garde-fou : scripts/verifier_gui.py extrait le JS embarque et le passe a
`node --check` (saute si node absent), integre a make inventaire-verifier.
py_compile ne voyait pas le JS ; ce trou est desormais ferme.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Daniel Allaire 2026-06-23 21:28:52 -04:00
parent 1c96fb0acc
commit 1aa3da8de5
3 changed files with 46 additions and 1 deletions

View file

@ -370,6 +370,7 @@ inventaire-verifier: ansible-runtime
ansible-inventory -i $(INVENTAIRE_PRODUCTION) --list > /dev/null
python3 scripts/inventory_host.py --inventaire $(INVENTAIRE_PRODUCTION) verifier-playbooks --dossier-playbooks $(DOSSIER_PLAYBOOKS_GROUPES)
python3 scripts/inventory_host.py --inventaire $(INVENTAIRE_PRODUCTION) --dependances $(FICHIER_DEPENDANCES) verifier-dependances --dossier-playbooks $(DOSSIER_PLAYBOOKS_GROUPES)
python3 scripts/verifier_gui.py
python3 scripts/serveurs.py verifier
python3 scripts/applications.py verifier
python3 scripts/bases_donnees.py verifier

View file

@ -1060,7 +1060,7 @@ HTML = r"""<!doctype html>
function dessinerServeurs() {
const cible = document.getElementById('grilles');
if (!serveurs.length) { cible.innerHTML = '<div class="vide"><b>Aucun serveur dans le plan</b>Lance « make serveurs-bootstrap » pour générer docs/serveurs.yml depuis l\\'inventaire.</div>'; return; }
if (!serveurs.length) { cible.innerHTML = '<div class="vide"><b>Aucun serveur dans le plan</b>Lance « make serveurs-bootstrap » pour générer docs/serveurs.yml depuis linventaire.</div>'; return; }
const clsStatut = (s) => s === 'reconcilie' ? 'actif' : (s === 'divergence' ? 'bloque' : 'attente');
const libStatut = (s) => s === 'reconcilie' ? 'réconcilié' : (s === 'divergence' ? 'divergence' : 'absent inv.');
const lignes = serveurs.map(s => `

44
scripts/verifier_gui.py Normal file
View file

@ -0,0 +1,44 @@
#!/usr/bin/env python3
"""Verifie la syntaxe du JavaScript embarque dans inventory_gui.py.
Garde-fou : py_compile ne voit pas le JS (il est dans une chaine Python).
Une seule erreur de syntaxe JS casse toute la page. On extrait le JS et on le
passe a `node --check`. Si node est absent, la verification est sautee (signale).
"""
from __future__ import annotations
import re
import shutil
import subprocess
import sys
import tempfile
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent))
import inventory_gui as g # noqa: E402
def main() -> int:
if not shutil.which("node"):
print("node absent : verification de la syntaxe JS du GUI sautee.")
return 0
html = g.HTML.replace("__JETON__", "TEST")
blocs = re.findall(r"<script>(.*?)</script>", html, re.S)
if not blocs:
print("erreur: aucun bloc <script> trouve dans le GUI.", file=sys.stderr)
return 1
with tempfile.NamedTemporaryFile("w", suffix=".js", delete=False, encoding="utf-8") as fichier:
fichier.write("\n".join(blocs))
chemin = fichier.name
resultat = subprocess.run(["node", "--check", chemin], capture_output=True, text=True)
if resultat.returncode != 0:
print(resultat.stderr, file=sys.stderr)
return 1
print("JS du GUI : syntaxe valide (node --check).")
return 0
if __name__ == "__main__":
raise SystemExit(main())