Monorepo LiveChat: envoi de médias (Discord, navigateur, raccourcis iOS) vers un overlay desktop affiché en stream.
flowchart LR
discord[Discord] -->|commandes| server
extension[Extension navigateur] -->|POST /ingest| server
ios[Raccourcis iOS] -->|POST /ingest| server
server[server<br/>bot Discord + API] -->|socket.io| overlay[overlay<br/>Electron]
| Dossier | Rôle | Stack | Livrable |
|---|---|---|---|
server/ |
Bot Discord + API (/overlay/*, /ingest, /admin), pipeline média (yt-dlp + ffmpeg) |
Node 20, TypeScript, Fastify, Prisma/SQLite, pnpm | Image Docker ghcr.io/quentingimenez/livechat-server |
overlay/ |
Client desktop qui reçoit et affiche les médias | Electron, TypeScript, npm | .exe Windows (setup + portable) avec auto-update |
extension/ |
Extension Chromium MV3 qui envoie des liens vers /ingest |
TypeScript, Vite, npm | Zip + Chrome Web Store |
Chaque projet reste autonome: son propre gestionnaire de paquets, son lockfile et son README (démarrage, configuration, build).
Prérequis: Node 22 (Node 20 suffit pour server/ et extension/), pnpm 10 (corepack enable), Python 3 (zip de l'extension), Docker (optionnel).
npm install # outillage racine: hooks git (husky) + commitlint
npm run install:all # dépendances des 3 projetsScripts racine (raccourcis vers les projets):
| Script | Équivalent |
|---|---|
npm run server:dev |
pnpm --dir server dev |
npm run server:test |
pnpm --dir server test |
npm run overlay:start |
npm --prefix overlay start |
npm run overlay:verify |
npm --prefix overlay run verify |
npm run extension:build |
npm --prefix extension run build |
npm run extension:check |
npm --prefix extension run ci:check |
Les workflows sont à la racine (.github/workflows/) et ne se déclenchent que sur les changements du projet concerné.
| Workflow | Déclencheur | Résultat |
|---|---|---|
server.yml |
PR / push main sur server/**, tag server-v* |
Tests + image Docker poussée sur GHCR (build sans push sur PR) |
overlay-ci.yml |
PR / push main sur overlay/** |
npm run verify (lint, typecheck, build, tests) |
overlay-nightly.yml |
Push main sur overlay/** |
Prerelease overlay-nightly (.exe portable) |
overlay-release.yml |
Tag overlay-vX.Y[.Z] |
Release stable marquée Latest (setup + portable + latest.yml) |
extension.yml |
PR / push main sur extension/**, tag extension-v* |
Checks + zip, prerelease extension-latest, release + Chrome Web Store |
| Projet | Tag | Exemple |
|---|---|---|
| server | server-vX.Y.Z |
server-v1.0.0 → image ghcr.io/quentingimenez/livechat-server:1.0.0 |
| overlay | overlay-vX.Y ou overlay-vX.Y.Z (doit correspondre à overlay/package.json) |
overlay-v2.0.2 |
| extension | extension-vX.Y.Z |
extension-v0.1.0 |
L'auto-update de l'overlay (
electron-updater) lit la release Latest du dépôt. Seules les releases stables de l'overlay sont marquées Latest; les autres releases sont créées en prerelease ou aveclatest=false. Ne pas marquer manuellement une autre release comme Latest.
docker pull ghcr.io/quentingimenez/livechat-server:latestExemple de déploiement: server/docker-compose.yml.
- Commits au format Conventional Commits, vérifiés par commitlint (
commit-msg). Utiliser le projet en scope:feat(server): ...,fix(overlay): ...,chore(extension): .... pre-commit: tests unitaires du serveur si des fichiersserver/sont indexés.pre-push:pnpm audit --prod(niveaucritical) sur le serveur.
L'historique git complet des trois dépôts a été importé dans leurs sous-dossiers (git log -- overlay/ fonctionne).
Les anciens tags de l'overlay sont renommés overlay-v*.
| Ancien dépôt | Dossier |
|---|---|
| WardenPro/LiveChat-Bot → fork quentingimenez/LiveChat-server | server/ |
| quentingimenez/LiveChat-Overlay | overlay/ |
| quentingimenez/LiveChat-Extension | extension/ |
Actions à faire une seule fois:
-
Visibilité de l'image GHCR: un package GHCR est privé à sa création. Pour un
docker pullsans authentification, Packages → livechat-server → Package settings → Change visibility → Public. -
Chrome Web Store: ajouter les secrets
CWS_EXTENSION_ID,CWS_CLIENT_ID,CWS_CLIENT_SECRET,CWS_REFRESH_TOKENau monorepo (voirextension/README.md). -
Auto-update des overlays déjà installés (≤ 2.0.1): ils interrogent encore les releases de
LiveChat-Overlay. Après la première releaseoverlay-vX.Y.Zdu monorepo, republier ses fichiers (setup, portable,latest.yml,*.blockmap) dans une releaseX.Y.Zde l'ancien dépôt: une fois cette version installée, les clients suivent le monorepo.gh release download overlay-v2.0.2 -R quentingimenez/LiveChat -D bridge gh release create 2.0.2 bridge/* -R quentingimenez/LiveChat-Overlay --title 2.0.2 --notes "Dernière version publiée ici: les mises à jour viennent désormais de quentingimenez/LiveChat."
-
Archiver les anciens dépôts une fois la migration validée.