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>
This commit is contained in:
66
server/README.md
Normal file
66
server/README.md
Normal file
@@ -0,0 +1,66 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user