Files
PS_Launcher/server/README.md
j.foucher 1c8c6803e8 Initial scaffolding: PS_Launcher v0.2
Client (C# / .NET 8 / WPF, MVVM via CommunityToolkit.Mvvm):
- PSLauncher.App: WPF UI dark theme (Epic-style sidebar + hero + big play button)
  with UpdateAvailableDialog rendering Markdown release notes via Markdig.Wpf.
- PSLauncher.Core: services for installation registry (scans Proserve v{X.Y.Z}/),
  process launcher, manifest fetch, SHA-256 integrity, HTTP download with
  progress, ZIP install via .tmp + atomic rename, update orchestrator.
- PSLauncher.Models: RemoteManifest, InstalledVersion, LocalConfig DTOs.

Server (PHP 8 for OVH mutualisé, deployed under www/PS_Launcher/):
- Front controller + routes /manifest and /releasenotes/{version}.
- Static signed-manifest workflow with tools/sign-manifest.php CLI to
  recompute SHA-256 and sizeBytes after each ZIP upload.
- .htaccess: HTTPS redirect, rewrite, security headers.
- config.example.php template; real config.php is gitignored.

Cohabiting versions: each release lives in its own Proserve v{version}/ folder
under installRoot. Old versions are never deleted automatically.

Roadmap: v0.3 = HTTP Range resume + Polly retry + state.json,
v0.4 = MySQL license + Ed25519 signatures + DPAPI, v0.5 = settings/UX polish.

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

2.5 KiB

PS_Launcher — Côté serveur

Contenu de ce dossier à uploader sous www/PS_Launcher/ sur le mutualisé OVH.

Arborescence finale après upload

www/
└── PS_Launcher/
    ├── .htaccess
    ├── api/
    │   ├── config.php          ← À ÉDITER avec tes vraies valeurs (DB, secrets)
    │   ├── index.php
    │   ├── lib/Response.php
    │   └── routes/
    │       ├── Manifest.php
    │       └── Releasenotes.php
    ├── manifest/
    │   └── versions.json       ← Régénéré par tools/sign-manifest.php
    ├── releasenotes/
    │   ├── 1.4.5.md
    │   └── 1.4.6.md
    ├── builds/                 ← Tu uploades ici les ZIPs en SFTP
    │   └── proserve-1.4.6.zip
    └── tools/
        └── sign-manifest.php   ← Lance après chaque upload de ZIP

Workflow de release

  1. Packager Unreal → produit le dossier Proserve v1.4.6/.
  2. Le zipper localement : le contenu du ZIP doit reproduire ce qui est attendu côté client (le client extrait dans Proserve v1.4.6/, donc le ZIP peut soit contenir un dossier racine Proserve v1.4.6/, soit son contenu directement — voir ci-dessous).
  3. Uploader le ZIP via SFTP dans www/PS_Launcher/builds/proserve-1.4.6.zip.
  4. Éditer manifest/versions.json pour ajouter (ou modifier) l'entrée 1.4.6 et le champ latest.
  5. Ajouter releasenotes/1.4.6.md.
  6. Se connecter en SSH OVH et lancer :
    cd www/PS_Launcher
    php tools/sign-manifest.php
    
    Cela calcule automatiquement sizeBytes et sha256 à partir du ZIP.

Convention du contenu du ZIP

Le client extrait le ZIP dans installRoot/Proserve v{version}/. Donc le ZIP doit contenir directement les fichiers PROSERVE_UE_5_5.exe, Engine/, PROSERVE_UE_5_5/, etc. à sa racine (pas de dossier englobant).

Test rapide en ligne de commande :

unzip -l proserve-1.4.6.zip | head -10

Doit lister PROSERVE_UE_5_5.exe à la racine, pas Proserve v1.4.6/PROSERVE_UE_5_5.exe.

Test de l'API depuis ton poste

Une fois uploadé, vérifier :

curl https://www.tondomaine.com/PS_Launcher/api/health
curl https://www.tondomaine.com/PS_Launcher/api/manifest
curl https://www.tondomaine.com/PS_Launcher/api/releasenotes/1.4.6

À mettre à jour avant prod

  • api/config.php : tous les replace_me / replace_with_*. Ce fichier ne doit JAMAIS être commit dans un repo public.
  • Dans manifest/versions.json, remplace www.exemple-asterion.com par ton vrai domaine.