Files
PS_Launcher/installer
j.foucher 49a3b855af v0.27.0 — Channels comme TAGS sur versions (refactor du modèle)
Changement majeur du modèle de channels en réponse au feedback :
« c'est trop compliqué. Il faudrait juste pouvoir tout laisser dans
builds, et taguer une version dans un canal ou un autre voir plusieurs
canaux. ». Le précédent design (1 fichier manifest par channel +
sous-dossier builds/{channel}/) imposait une duplication de structure
et empêchait une version d'être visible sur plusieurs channels à la fois.

NOUVEAU MODÈLE :
- 1 seul fichier manifest/versions.json
- 1 seul dossier builds/ flat (les ZIPs ont des noms libres pour éviter
  les collisions homonymes — proserve-1.5.3.zip, proserve-1.5.3-police.zip…)
- Chaque entry de version a un champ `channels: ["default", "police"]`
  qui dit qui peut la voir
- Sémantique additive : un client sur channel "police" voit les versions
  taggées "default" + celles taggées "police". "default" = public.
- Une version peut être taggée sur plusieurs channels en une fois.

NOUVEAU REGISTRE channels.json :
Le registre des channels (avec name + label + description) vit dans
manifest/channels.json. Le channel "default" est implicite et ne peut
pas être supprimé. Nouvelle page admin Channels (CRUD) pour gérer la
liste, avec garde-fou anti-suppression : compte les versions taggées
et les licenses attribuées avant d'autoriser la suppression.

SERVEUR :
- api/routes/Manifest.php : reçoit ?channel=X depuis la license,
  filtre versions où channels[] contient X ou "default", re-signe avec
  la clé privée Ed25519 à la volée. Coût ~1ms par requête.
- admin/versions.php : refactor — plus de session "channel actif", plus
  de switcher en haut, plus de prefix builds/{channel}/. Add form a
  des checkboxes channels[]. Nouveau bouton "Channels" par-row pour
  retager.
- admin/licenses.php : dropdown channel alimenté depuis channels.json
  au lieu de scanner les fichiers manifest.
- tools/SignManifest.php : revert du constructeur channel-aware,
  toujours sur versions.json + builds/ flat.

CLIENT :
- VersionManifest.Channels (List<string>) ajouté pour debug, mais le
  filtrage est server-side donc le client n'a rien à faire de ce champ
  côté UX.
- L'envoi du ?channel=X depuis la license signée fonctionne déjà
  depuis v0.26.0, pas de changement nécessaire.

MIGRATION :
Les fichiers manifest/versions-{X}.json créés en v0.26.0 deviennent
inutiles. Si tu en avais (test "police" par exemple), copie les
versions concernées dans versions.json et tague-les avec les bons
channels via la nouvelle UI.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 08:51:10 +02:00
..

PS_Launcher — Installeur

Génère un setup Windows (PSLauncher-Setup-{version}.exe) qui distribue le launcher principal + son updater dans Program Files\ASTERION VR\PSLauncher\.

Pré-requis

Build en une commande

Depuis la racine du repo :

powershell -ExecutionPolicy Bypass -File installer\build-installer.ps1

Ça enchaîne :

  1. dotnet publish src/PSLauncher.App -c ReleasePSLauncher.exe (~77 Mo)
  2. dotnet publish src/PSLauncher.Updater -c ReleasePSLauncher.Updater.exe (~10 Mo)
  3. ISCC PSLauncher.issinstaller/output/PSLauncher-Setup-X.Y.Z.exe

Le fichier final fait ~80 Mo (compression ultra Inno + binaires self-contained).

Distribution

Tu balances un seul .exe au client :

  • Il lance, choisit français/anglais, clique Suivant×3, c'est installé.
  • Raccourci bureau + menu Démarrer créés.
  • Désinstallation propre via Programmes et fonctionnalités.

Le cache utilisateur (%LocalAppData%\PSLauncher\config.json, logs, downloads partiels) n'est pas touché par l'install/désinstall — la license et les paramètres survivent.

Mise à jour du launcher

Le launcher se met à jour seul via PSLauncher.Updater.exe (cf. flow auto-update). Le client n'a pas besoin de rejouer l'installeur sauf changement majeur (TFM, déps).

Bumper la version

Avant de rebuild un installeur :

  1. src/PSLauncher.App/PSLauncher.App.csproj<Version>X.Y.Z</Version> (et AssemblyVersion / FileVersion)
  2. installer/PSLauncher.iss#define MyAppVersion "X.Y.Z"
  3. installer/build-installer.ps1

Côté serveur, mets aussi à jour manifest/versions.json section launcher avec la nouvelle version + URL de download du nouveau PSLauncher.exe (via le backoffice ou édition manuelle, puis php tools/sign-manifest.php).

Code-signing (optionnel)

Pour éviter le warning SmartScreen "éditeur inconnu", il faut signer PSLauncher.exe, PSLauncher.Updater.exe et PSLauncher-Setup-X.Y.Z.exe avec un certificat Authenticode (OV ~250 €/an, EV ~400 €/an, ou gratuit via SignPath pour OSS). Hors-scope du script actuel.