Thème
Scripts
Outillage du dépôt, hors chaîne de packaging — celle-ci vit dans deployment/.
| Script | Technologie | Rôle |
|---|---|---|
generate-ts-enums.ps1 | PowerShell | Régénère vue/src/config/generated/enums.ts depuis les enums C# |
sonar-scan.ps1 | PowerShell | Analyse SonarQube du dépôt entier — C# et Vue/TS — couverture comprise |
generate-demo-maps.mjs | Node, sans dépendance | Produit les 16 plans SVG de démonstration et réinjecte leur description dans demo-fixtures.json |
generate-ts-enums.ps1
powershell
./scripts/generate-ts-enums.ps1Enveloppe de dotnet/tools/TsEnumGenerator : le script résout le chemin de sortie et lance le générateur. Le fichier produit est versionné, et l'intégration continue échoue s'il est périmé.
sonar-scan.ps1
powershell
$env:SONAR_TOKEN = "sqp_xxx"
./scripts/sonar-scan.ps1 -SonarUrl "https://sonar.exemple.fr"
./scripts/sonar-scan.ps1 -SonarUrl $url -SkipBackend # itération frontend seule| Paramètre | Défaut | Rôle |
|---|---|---|
-SonarUrl | $env:SONAR_HOST_URL | URL du serveur |
-SonarToken | $env:SONAR_TOKEN | Jeton d'analyse de projet |
-ProjectKey | superviseur | Clé du projet SonarQube |
-ProjectName | Superviseur | Nom affiché |
-SkipFrontend / -SkipBackend | — | Saute les tests et la couverture du côté correspondant |
Prérequis : SDK .NET 9, Node 22 et npm, Java 17 ou plus. dotnet-sonarscanner est installé comme outil global s'il manque.
Mécanismes non évidents
| Point | Détail |
|---|---|
.env de la racine | Lu s'il existe, sans jamais écraser une variable déjà définie dans l'environnement. Le fichier n'est pas versionné |
| Ordre imposé | begin doit précéder le build C#, faute de quoi l'analyse MSBuild ne s'accroche à rien. La couverture frontend est produite avant, mais lue au end |
Purge des TestResults | Les anciens dossiers sont supprimés avant les tests : sans cela, des rapports de couverture obsolètes seraient importés |
| Version | Prise dans AppVersion de app.config.json, avec 0.0.0 en repli |
| Un seul projet SonarQube | L'analyseur .NET enrobe le build C# et récupère aussi les fichiers Vue/TS, la couverture C# (OpenCover, via coverlet.runsettings) et la couverture frontend (lcov) |
| Couverture volontairement non exclue | Les composants *.vue, SupervisionWorker et le planificateur de rapports restent dans le calcul : Vitest et coverlet la produisent réellement pour eux |
| Le serveur SonarQube est une infrastructure partagée | Il est hébergé hors de ce dépôt ; ni sa composition Docker ni ses secrets n'y figurent |
generate-demo-maps.mjs
bash
node scripts/generate-demo-maps.mjsProduit demo-assets/maps/demo-{clé}.svg — 16 fichiers — à partir des centrales décrites dans demo-fixtures.json. Chaque zone devient une pièce rectangulaire, meublée selon le thème du plan, et deux détecteurs par zone sont placés à l'intérieur du polygone de la pièce.
Le script réécrit sa propre source
C'est le point à connaître : demo-fixtures.json est à la fois entrée et sortie.
| Passe | Effet sur demo-fixtures.json |
|---|---|
| 1 | pointsPerZone est normalisé à 4 pour les centrales INIS ; les AVISS ne sont pas touchées |
| 2 | Les 16 SVG sont écrits dans demo-assets/maps/ |
| 3 | La section maps est réinjectée par un aller-retour JSON complet — aucun champ de panels n'est modifié |
| Convention | Valeur |
|---|---|
viewBox | 0 0 1600 1000, fixe |
| Conversion pixel → pourcentage | x% = xPixel / 16, y% = yPixel / 10 |
| Bande d'en-tête | y ∈ [0, 160] — titre seul, aucun dessin |
| Bâtiments | y ∈ [170, 860] |
| Pied de page | y ∈ [870, 1000] — barre d'échelle et cartouche |
| Aire utile horizontale | x ∈ [80, 1520] |
Le regroupement des centrales par plan et leurs libellés sont figés dans la constante PLANS du script ; zoneCount et pointsPerZone sont lus à l'exécution dans la section panels des fixtures.
Contraintes actives
| Contrainte | Conséquence si elle est ignorée |
|---|---|
Les .ps1 sont écrits en UTF-8 avec BOM | Sans BOM, PowerShell 5.1 les lit en ANSI, corrompt les accents et casse le parsing |
scripts/** est exclu de l'analyse SonarQube | Ces fichiers ne comptent ni dans la dette ni dans la couverture |
| Lancer les scripts depuis la racine du dépôt | Chacun résout ses chemins relativement à son propre emplacement, mais sonar-scan.ps1 s'y replace lui-même |