diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 4775b82f4..3795e131e 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -15,6 +15,8 @@ // Vitejs "antfu.vite", "antfu.browse-lite", + // Firefox Debugger + "firefox-devtools.vscode-firefox-debug", // CSS "csstools.postcss", "stylelint.vscode-stylelint", diff --git a/.vscode/launch.json b/.vscode/launch.json index 55297a817..2bce8942d 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -5,7 +5,43 @@ "version": "0.2.0", "configurations": [ { - "name": "Attach to Remote", + "name": "Launch Server (Integ)", + "type": "node", + "request": "launch", + "runtimeExecutable": "pnpm", + "runtimeArgs": [ + "--filter", + "@cpn-console/server", + "run", + "integ" + ], + "console": "internalConsole", + "restart": true, + "skipFiles": [ + "/**", + "${workspaceFolder}/node_modules/**/*.js" + ] + }, + { + "name": "Launch Server (Dev)", + "type": "node", + "request": "launch", + "runtimeExecutable": "pnpm", + "runtimeArgs": [ + "--filter", + "@cpn-console/server", + "run", + "dev" + ], + "console": "internalConsole", + "restart": true, + "skipFiles": [ + "/**", + "${workspaceFolder}/node_modules/**/*.js" + ] + }, + { + "name": "Attach Server", "type": "node", "request": "attach", "port": 9229, @@ -17,6 +53,138 @@ "/**", "${workspaceFolder}/node_modules/**/*.js" ] + }, + { + "name": "Serve Client (Chrome) (Integ)", + "type": "node", + "request": "launch", + "runtimeExecutable": "pnpm", + "runtimeArgs": [ + "--filter", + "@cpn-console/client", + "run", + "integ", + "--", + "--port", + "8080", + "--strictPort" + ], + "console": "internalConsole", + "serverReadyAction": { + "pattern": "Local:.*(http://localhost:[0-9]+)", + "action": "startDebugging", + "name": "Launch Client (Chrome)" + } + }, + { + "name": "Serve Client (Chrome) (Dev)", + "type": "node", + "request": "launch", + "runtimeExecutable": "pnpm", + "runtimeArgs": [ + "--filter", + "@cpn-console/client", + "run", + "dev", + "--", + "--port", + "8080", + "--strictPort" + ], + "console": "internalConsole", + "serverReadyAction": { + "pattern": "Local:.*(http://localhost:[0-9]+)", + "action": "startDebugging", + "name": "Launch Client (Chrome)" + } + }, + { + "name": "Serve Client (Firefox) (Integ)", + "type": "node", + "request": "launch", + "runtimeExecutable": "pnpm", + "runtimeArgs": [ + "--filter", + "@cpn-console/client", + "run", + "integ", + "--", + "--port", + "8080", + "--strictPort" + ], + "console": "internalConsole", + "serverReadyAction": { + "pattern": "Local:.*(http://localhost:[0-9]+)", + "action": "startDebugging", + "name": "Launch Client (Firefox)" + } + }, + { + "name": "Serve Client (Firefox) (Dev)", + "type": "node", + "request": "launch", + "runtimeExecutable": "pnpm", + "runtimeArgs": [ + "--filter", + "@cpn-console/client", + "run", + "dev", + "--", + "--port", + "8080", + "--strictPort" + ], + "console": "internalConsole", + "serverReadyAction": { + "pattern": "Local:.*(http://localhost:[0-9]+)", + "action": "startDebugging", + "name": "Launch Client (Firefox)" + } + }, + { + "name": "Launch Client (Chrome)", + "type": "chrome", + "request": "launch", + "url": "http://localhost:8080", + "webRoot": "${workspaceFolder}/apps/client" + }, + { + "name": "Launch Client (Firefox)", + "type": "firefox", + "request": "launch", + "url": "http://localhost:8080", + "webRoot": "${workspaceFolder}/apps/client" + } + ], + "compounds": [ + { + "name": "Launch (Chrome) (Integ)", + "configurations": [ + "Launch Server (Integ)", + "Serve Client (Chrome) (Integ)" + ] + }, + { + "name": "Launch (Chrome) (Dev)", + "configurations": [ + "Launch Server (Dev)", + "Serve Client (Chrome) (Dev)" + ] + }, + { + "name": "Launch (Firefox) (Integ)", + "configurations": [ + "Launch Server (Integ)", + "Serve Client (Firefox) (Integ)" + ] + }, + { + "name": "Launch (Firefox) (Dev)", + "configurations": [ + "Launch Server (Dev)", + "Serve Client (Firefox) (Dev)" + ] } ] } diff --git a/README.md b/README.md index 958c93acb..5cb7661d1 100644 --- a/README.md +++ b/README.md @@ -323,13 +323,39 @@ pnpm --filter @cpn-console/server run db:wrapper pnpm --filter @cpn-console/server run db:wrapper -h ``` +### Débogage avec VS Code + +Le projet est configuré pour être débogué directement dans VS Code via le fichier `.vscode/launch.json`. +Rendez-vous dans l'onglet "Run and Debug" (ou `Ctrl+Shift+D`) pour voir les configurations disponibles. + +#### Configurations disponibles + +- **Launch Server** : Lance le serveur en local (hors Docker) et attache le débogueur. + - *Note : Assurez-vous que les bases de données (Postgres) et Keycloak sont accessibles (ex: lancés via `pnpm run dev` dans un autre terminal pour les dépendances).* +- **Attach Server** : S'attache au processus Node.js du serveur. + - Utile lorsque le serveur tourne dans un conteneur Docker. + - Pour que cela fonctionne, le serveur doit être lancé avec le mode debug activé. +- **Serve Client (Chrome/Firefox)** : Lance l'application client en local et ouvre une instance de navigateur dédiée au débogage. +- **Launch (Chrome/Firefox)** : Lance simultanément le serveur et le client pour une session de débogage complète (Compound task). + +#### Déboguer avec d'autres outils (Chrome DevTools, WebStorm, etc.) + +Le serveur Node.js expose le port de débogage `9229` lorsqu'il est lancé en mode debug (ou avec l'option `--inspect`). Vous pouvez utiliser n'importe quel client de débogage compatible avec le protocole Inspector de Node.js. + +**Exemple avec Chrome DevTools :** + +1. Lancez le serveur en mode debug (voir section précédente pour Docker, ou `pnpm run debug` en local). +2. Ouvrez Chrome et naviguez vers `chrome://inspect`. +3. Cliquez sur "Open dedicated DevTools for Node" ou attendez que votre target apparaisse sous "Remote Target". +4. Vous pouvez maintenant mettre des points d'arrêt, inspecter les variables, etc. + ### Construction des images Ce dépôt utilise des fichiers docker-compose pour construire les images docker: -- [docker-compose.dev.yml](./ci/docker/docker-compose.dev.yml) pour la construction des images docker du mode développement. -- [docker-compose.ci.yml](./ci/docker/docker-compose.ci.yml) pour la construction des images docker utilisées dans nos pipelines d'Intégration Continue. -- [docker-compose.prod.yml](./ci/docker/docker-compose.prod.yml) pour la construction des images docker du mode production. +- [docker-compose.dev.yml](./docker/docker-compose.dev.yml) pour la construction des images docker du mode développement. +- [docker-compose.ci.yml](./docker/docker-compose.ci.yml) pour la construction des images docker utilisées dans nos pipelines d'Intégration Continue. +- [docker-compose.prod.yml](./docker/docker-compose.prod.yml) pour la construction des images docker du mode production. ## Configuration du Keycloak