Outil de pilotage territorial pour le suivi des politiques publiques.
pilote/
├── apps/
│ ├── pilote-ppg/ Application PPG (Politiques Prioritaires du Gouvernement)
│ │ ├── src/ Code source (client + server)
│ │ ├── tests/ Tests E2E (Playwright)
│ │ └── ...
│ ├── pilote-ppg-auth/ Keycloak (authentification)
│ └── pilote-ppg-data-management/ Pipeline dbt (Python)
├── package.json Scripts d'alias vers le workspace actif
├── pnpm-workspace.yaml Configuration workspaces
├── pnpm-lock.yaml Lockfile unique
└── .slugignore Exclusions slug Scalingo
- Node.js 24.9.0
- pnpm 10 (
npm install -g pnpm@10) - PostgreSQL 16+
- Keycloak (pour l'authentification)
git clone git@github.com:DITP-pilotage/pilote-2.git
cd pilote-2
pnpm installLes fichiers .env vivent dans chaque app. Pour pilote-ppg :
cp apps/pilote-ppg/.env.example apps/pilote-ppg/.env
# Éditer apps/pilote-ppg/.env avec vos valeursToutes les commandes se lancent depuis la racine du monorepo. Par défaut elles ciblent @pilote/ppg. Pour cibler une autre app, exporter APP_PACKAGE :
export APP_PACKAGE=@pilote/ppg # optionnel, c'est le défautpnpm dev # Serveur de dev (Next.js + pino-pretty)
pnpm build # Build production (standalone + Prisma + Pagefind)
pnpm start # Serveur de productionpnpm database:init # Reset + migrate + seed
pnpm database:migration # Créer une nouvelle migrationpnpm test # Tests unitaires + intégration (Vitest)
pnpm test:client # Tests client uniquement
pnpm test:server # Tests serveur uniquement
pnpm test:e2e # Tests E2E (Playwright)pnpm lint # ESLint + TypeScript
pnpm lint:fix # Auto-fix
pnpm format # Prettier| App | Type | Configuration |
|---|---|---|
| pilote-ppg | Node.js (Next.js) | Pas de PROJECT_DIR — buildpack à la racine, APP_PACKAGE=@pilote/ppg |
| pilote-ppg-auth | Keycloak | PROJECT_DIR=apps/pilote-ppg-auth |
| pilote-ppg-data-management | Python/dbt | PROJECT_DIR=apps/pilote-ppg-data-management |
Le buildpack tourne à la racine du repo, détecte pnpm via pnpm-lock.yaml, exécute pnpm install puis pnpm build et pnpm start. Ces scripts dans le package.json racine délèguent au workspace ciblé via pnpm -F ${APP_PACKAGE:-@pilote/ppg}.
Le .slugignore à la racine exclut les fichiers non nécessaires au runtime (tests, sources, cache, etc.).
- Créer l'app Scalingo
scalingo --app <app-name> env-set APP_PACKAGE=@pilote/<nom>- Le buildpack utilisera les alias scripts racine qui délèguent au bon workspace
- Créer le dossier dans
apps/(ex:apps/pilote-core/) - Ajouter un
package.jsonavec"name": "@pilote/core" pnpm installdepuis la racine- Pour cibler la nouvelle app localement :
APP_PACKAGE=@pilote/core pnpm dev - Sur Scalingo :
APP_PACKAGE=@pilote/core
- Architecture et ADRs :
apps/pilote-ppg/docs/architecture/decisions/ - Modèle de données :
apps/pilote-ppg/README_modele_de_donnees.md - Procédures techniques :
apps/pilote-ppg/README_procedures_tech.md