Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ Migrations: standard Prisma Migrate. Major version data migrations in `migration

## Main commands

- `pnpm dev` : local Docker infra (keycloak, postgres, pgadmin) + server/client
- `pnpm dev` : local Docker infra (keycloak, postgres) + server/client
- `pnpm docker:dev` : fully containerized with Docker Compose Watch
- `pnpm docker:integ` / `pnpm integ` : integration mode (remote env)
- `pnpm fullsetup` : full install (deps, prisma generate, build, Docker images)
Expand Down
16 changes: 8 additions & 8 deletions ENVIRONMENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ graph LR
style NAV_L fill:#fff,stroke:#333
```

Docker Compose utilisé : [`docker/docker-compose.local.yml`](docker/docker-compose.local.yml) (infrastructure uniquement : Keycloak, PostgreSQL, pgAdmin, OpenCDS mock, **nginx-strangler, et Jaeger**)
Docker Compose utilisé : [`docker/docker-compose.local.yml`](docker/docker-compose.local.yml) (infrastructure uniquement : Keycloak, PostgreSQL, OpenCDS mock, **nginx-strangler, et Jaeger**)

Fichiers utilisés :

Expand All @@ -100,12 +100,12 @@ Les valeurs par défaut, disponibles dans les fichiers `.env-example`, sont suff
**Commandes de lancement :**

```bash
# Lance l'infrastructure (Keycloak, PostgreSQL, pgAdmin, OpenCDS mock, nginx-strangler, Jaeger)
# Lance l'infrastructure (Keycloak, PostgreSQL, OpenCDS mock, nginx-strangler, Jaeger)
pnpm dev

# Puis dans d'autres terminaux, lancer les serveurs et le client manuellement :
pnpm --filter server run dev
pnpm --filter server-nestjs run start:dev # nouveau backend NestJS
pnpm --filter server-nestjs run dev # nouveau backend NestJS
pnpm --filter client run dev
```

Expand Down Expand Up @@ -137,7 +137,7 @@ Dans `apps/server-nestjs`, l'instrumentation OpenTelemetry est initialisée au d
Pour vérifier rapidement :

1. Démarrer l'infra : `pnpm dev` (Jaeger inclus).
2. Démarrer `server-nestjs` : `pnpm --filter server-nestjs run start:dev`.
2. Démarrer `server-nestjs` : `pnpm --filter server-nestjs run dev`.
3. Exécuter une requête sur une route backend (depuis le client ou un `curl`).
4. Ouvrir http://localhost:16686 et chercher le service `cloud-pi-native-console`.

Expand All @@ -154,15 +154,15 @@ Fichiers utilisés :
- `apps/server-nestjs/.env`
- `apps/server-nestjs/.env.docker`

Cette configuration est déjà plus intéressante, car elle s'appuie sur les conteneurs définis dans [ce docker-compose](docker/docker-compose.dev.yml), qui lance notamment une base de données PostreSQL (ainsi qu'un `pgadmin`), et un serveur Keycloak préchargé avec un royaume qui contient un jeu de données. Le docker-compose contient des instructions `develop` qui permettent soit de synchroniser certains fichiers, soit de carrément reconstruire l'image et de relancer le service concerné. De cette manière vous pouvez développer en laissant les conteneurs tourner. C'est un peu moins performant qu'un travail totalement en local, mais ça a le mérite d'être plus proche du déploiement cible.
Cette configuration est déjà plus intéressante, car elle s'appuie sur les conteneurs définis dans [ce docker-compose](docker/docker-compose.dev.yml), qui lance notamment une base de données PostreSQL et un serveur Keycloak préchargé avec un royaume qui contient un jeu de données. Le docker-compose contient des instructions `develop` qui permettent soit de synchroniser certains fichiers, soit de carrément reconstruire l'image et de relancer le service concerné. De cette manière vous pouvez développer en laissant les conteneurs tourner. C'est un peu moins performant qu'un travail totalement en local, mais ça a le mérite d'être plus proche du déploiement cible.

Le `nginx-strangler` et `server-nestjs` sont inclus dans ce docker-compose et démarrent automatiquement. Le `client` pointe vers `nginx-strangler` — le routage API est donc toujours actif, même si aucune route n'est encore basculée vers NestJS (tout passe par `server` en fallback).

**Commande de lancement :**

```bash
# Lance l'ensemble des conteneurs (client, server, server-nestjs, nginx-strangler,
# keycloak, postgres, pgadmin, opencds mock) avec Docker Compose Watch
# keycloak, postgres, opencds mock) avec Docker Compose Watch
pnpm docker:dev
```

Expand Down Expand Up @@ -235,10 +235,10 @@ Le `nginx-strangler` et `server-nestjs` sont également inclus dans ce docker-co
# Option 1 : Tout conteneurisé, branché sur l'environnement d'intégration
pnpm docker:integ

# Option 2 : Seulement l'infra en Docker (postgres, pgadmin), server et client en local avec mode integ
# Option 2 : Seulement l'infra en Docker postgres, server et client en local avec mode integ
pnpm integ
# Puis dans d'autres terminaux :
pnpm --filter server run dev
pnpm --filter server-nestjs run start:dev
pnpm --filter server-nestjs run dev
pnpm --filter client run dev
```
16 changes: 7 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ L'application peut se lancer de plusieurs manières, à savoir :
__Déploiement local du client et du serveur de la console, le reste dans des conteneurs :__

```shell
# Lancer keycloak, postgres et pgadmin dans des conteneurs
# Lancer keycloak et postgres dans des conteneurs
pnpm run dev

# Lancer le serveur dans un shell (la commande va afficher les logs)
Expand All @@ -142,10 +142,10 @@ pnpm --filter @cpn-console/client run dev

# …une fois que vous terminé d'utiliser l'application:

# Supprimer les conteneurs keycloak, postgres et pgadmin
# Supprimer les conteneurs keycloak et postgres
pnpm run dev:clean

# Supprimer les conteneurs keycloak, postgres et pgadmin (supprime les volumes docker)
# Supprimer les conteneurs keycloak et postgres (supprime les volumes docker)
pnpm run dev:delete
```

Expand All @@ -171,7 +171,7 @@ L'application peut se lancer de plusieurs manières, à savoir :
__Déploiement local du client et du serveur de la console, le reste dans des conteneurs :__

```shell
# Lancer postgres et pgadmin dans des conteneurs
# Lancer postgres dans des conteneurs
# (le keycloak utilisé devra être configuré dans les .env.integ)
pnpm run integ

Expand All @@ -181,10 +181,10 @@ pnpm --filter @cpn-console/server run integ
# Lancer le client
pnpm --filter @cpn-console/client run integ

# Supprimer les conteneurs postgres et pgadmin
# Supprimer les conteneurs postgres
pnpm run integ:clean

# Supprimer les conteneurs postgres et pgadmin (supprime les volumes docker)
# Supprimer les conteneurs postgres (supprime les volumes docker)
pnpm run integ:delete
```

Expand Down Expand Up @@ -233,7 +233,6 @@ Les services sont disponibles via les ports suivants :
| ---------------------------------------------- | ----------------------- |
| Interface graphique *- (client)* | <http://localhost:8080> |
| Serveur *- (api)* | <http://localhost:4000> |
| Interface d'administration de base de données | <http://localhost:8081> |
| Interface d'administration du serveur keycloak | <http://localhost:8090> |

*__Notes:__ ⚠ Il est possible que le navigateur utilisé (particulièrement Brave ou Firefox) bloque les cookies utilisés entre le frontend et keycloak, il est nécessaire de désactiver les protections de ce type dans votre navigateur (ex: Brave Shield).*
Expand All @@ -246,8 +245,7 @@ Les comptes utilisés pendant le développement sont les suivants :
| ------------------ | ----------------- | ------------ |
| Keycloak *(admin)* | `admin` | `admin` |
| Keycloak *(user)* | `test` | `test` |
| PgAdmin | `admin@dso.fr` | `admin` |
| Postgres | `admin@dso.fr` | `admin` |
| Postgres | `admin` | `admin` |

> La liste complète des comptes Keycloak pré-créés est disponible [ici](./keycloak/realms/realm-dev.json).

Expand Down
2 changes: 1 addition & 1 deletion apps/client/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ WORKDIR /app
COPY --chown=node:root package.json ./

# Install pnpm version defined in package.json "packageManager" property
RUN npm install --global corepack@latest && corepack enable && corepack enable pnpm
RUN corepack enable

COPY --chown=node:root pnpm-workspace.yaml pnpm-lock.yaml ./
COPY --chown=node:root patches ./patches
Expand Down
22 changes: 11 additions & 11 deletions apps/client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,21 @@
"url": "https://github.com/cloud-pi-native/console"
},
"scripts": {
"build": "pnpm run icons && pnpm run type-check && pnpm run build-only",
"build-only": "vite --mode=production build",
"check": "vue-tsc --noEmit -p tsconfig.json",
"prebuild": "pnpm run build:icons",
"build": "vite --mode=production build",
"build:icons": "vue-dsfr-icons -s scripts/icons.js -t src/icon-collections.ts",
"build:clean": "rimraf ./dist ./tsconfig.tsbuildinfo",
"dev": "vite --mode=development",
"format": "NODE_OPTIONS='--no-warnings=ExperimentalWarning' eslint ./ --fix",
"format:style": "stylelint ./src/**/*.{css,vue} --fix",
"icons": "vue-dsfr-icons -s scripts/icons.js -t src/icon-collections.ts",
"format": "pnpm --filter @cpn-console/client run \"/^format:.*/\"",
"format:eslint": "eslint . --fix",
"format:stylelint": "stylelint ./src/**/*.{css,vue} --fix",
"integ": "vite --mode=integration",
"lint": "pnpm run --parallel \"/^lint:.*/\"",
"lint:style": "stylelint ./src/**/*.{css,vue}",
"lint:ts": "NODE_OPTIONS='--no-warnings=ExperimentalWarning' eslint ./",
"preview": "vite preview --port 8080",
"lint": "pnpm --filter @cpn-console/client run \"/^lint:.*/\"",
"lint:eslint": "eslint .",
"lint:stylelint": "stylelint ./src/**/*.{css,vue}",
"test": "vitest run",
"test:cov": "vitest run --coverage",
"type-check": "vue-tsc --noEmit -p tsconfig.json"
"test:cov": "vitest run --coverage"
},
"dependencies": {
"@cpn-console/logger": "workspace:^",
Expand Down
4 changes: 2 additions & 2 deletions apps/server-nestjs/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ WORKDIR /app
COPY --chown=node:root package.json ./

# Activer pnpm via corepack (version définie dans package.json "packageManager")
RUN npm install --global corepack@latest && corepack enable && corepack enable pnpm
RUN corepack enable

# Copier les manifestes workspace (nécessaires pour que pnpm résolve les dépendances)
COPY --chown=node:root pnpm-workspace.yaml pnpm-lock.yaml ./
Expand Down Expand Up @@ -53,7 +53,7 @@ RUN pnpm --filter @cpn-console/server-nestjs exec prisma generate \
--schema=src/prisma/schema

ENTRYPOINT ["pnpm", "--filter", "server-nestjs", "run"]
CMD ["start:dev"]
CMD ["dev"]

# Build stage ----------------------------------------------------------------------
FROM dev AS build
Expand Down
16 changes: 7 additions & 9 deletions apps/server-nestjs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,19 @@
},
"scripts": {
"build": "nest build",
"build:clean": "rimraf ./dist ./tsconfig.tsbuildinfo",
"db:generate": "prisma generate",
"db:migrate": "prisma migrate dev --name dso",
"db:reset": "prisma migrate reset",
"format": "eslint ./ --fix",
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
"start": "nest start",
"start:debug": "nest start --debug --watch",
"start:dev": "nest start --watch",
"start:prod": "node dist/main",
"debug": "nest start --debug --watch",
"dev": "nest start --watch",
"format": "eslint . --fix",
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\"",
"start": "node dist/main",
"pretest": "pnpm run db:generate",
"test": "vitest run",
"test:watch": "vitest",
"pretest:cov": "pnpm run db:generate",
"test:cov": "vitest run --coverage",
"test:debug": "vitest --inspect"
"test:cov": "vitest run --coverage"
},
"dependencies": {
"@cpn-console/argocd-plugin": "workspace:^",
Expand Down
2 changes: 1 addition & 1 deletion apps/server/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ WORKDIR /app
COPY --chown=node:root package.json ./

# Install pnpm version defined in package.json "packageManager" property
RUN npm install --global corepack@latest && corepack enable && corepack enable pnpm
RUN corepack enable

COPY --chown=node:root pnpm-workspace.yaml pnpm-lock.yaml ./
COPY --chown=node:root patches ./patches
Expand Down
11 changes: 4 additions & 7 deletions apps/server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,27 +19,24 @@
"build": "tspc",
"build:clean": "rimraf ./dist ./types ./tsconfig.tsbuildinfo",
"db:deploy": "prisma migrate deploy",
"db:diff": "prisma migrate diff",
"db:generate": "prisma generate",
"db:migrate": "prisma migrate dev --name dso",
"db:reset": "prisma migrate reset",
"predev": "pnpm run db:deploy",
"dev": "nodemon --exec 'vite-node src/bootstrap.ts'",
"predebug": "pnpm run db:migrate",
"debug": "nodemon --exec 'NODE_OPTIONS=\"--inspect-brk=0.0.0.0\" vite-node src/bootstrap.ts'",
"format": "eslint ./ --fix",
"format": "eslint . --fix",
"preinteg": "INTEGRATION=true pnpm run db:migrate",
"integ": "INTEGRATION=true nodemon --exec 'vite-node src/bootstrap.ts'",
"lint": "eslint ./",
"prepublishOnly": "pnpm run db:generate",
"prestart": "npm run db:deploy",
"lint": "eslint .",
"prestart": "pnpm run db:deploy",
"start": "node --enable-source-maps dist/bootstrap.js",
"pretest": "pnpm run db:generate",
"test": "vitest run",
"pretest:cov": "pnpm run db:generate",
"test:cov": "vitest run --coverage",
"test:e2e": "pnpm run dev",
"test:e2e-ci": "pnpm run start"
"prepublishOnly": "pnpm run db:generate"
},
"dependencies": {
"@cpn-console/argocd-plugin": "workspace:^",
Expand Down
14 changes: 6 additions & 8 deletions ci/scripts/run-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ PROJECT_DIR="$(git rev-parse --show-toplevel)"

# Get versions
NODE_VERSION="$(node --version)"
NPM_VERSION="$(npm --version)"
DOCKER_VERSION="$(docker --version)"
DOCKER_BUILDX_VERSION="$(docker buildx version)"

Expand Down Expand Up @@ -95,7 +94,6 @@ checkBuildxPlugin () {
# Settings
printf "\nScript settings:
-> node version: ${NODE_VERSION}
-> npm version: ${NPM_VERSION}
-> docker version: ${DOCKER_VERSION}
-> docker buildx version: ${DOCKER_BUILDX_VERSION}
-> run unit tests: ${RUN_UNIT_TESTS}
Expand All @@ -107,13 +105,13 @@ cd "$PROJECT_DIR"

# Run lint
if [ "$RUN_LINT" == "true" ]; then
npm run lint
pnpm run lint
fi


# Run unit tests
if [ "$RUN_UNIT_TESTS" == "true" ]; then
npm run test:cov
pnpm run test:cov
fi

# Run e2e tests
Expand All @@ -123,8 +121,8 @@ if [ "$RUN_E2E_TESTS" == "true" ]; then
printf "\n${red}${i}.${no_color} Launch e2e tests\n"
i=$(($i + 1))

npm --prefix $PROJECT_DIR/packages/shared run build
npm --prefix $PROJECT_DIR/packages/test-utils run build
pnpm --prefix $PROJECT_DIR/packages/shared run build
pnpm --prefix $PROJECT_DIR/packages/test-utils run build

if [[ -n "$TAG" ]]; then
docker pull ghcr.io/cloud-pi-native/console/server:$TAG && docker tag ghcr.io/cloud-pi-native/console/server:$TAG dso-console/server:ci
Expand All @@ -133,10 +131,10 @@ if [ "$RUN_E2E_TESTS" == "true" ]; then
docker pull ghcr.io/cloud-pi-native/console/nginx-strangler:$TAG && docker tag ghcr.io/cloud-pi-native/console/client:$TAG dso-console/nginx-strangler:ci
fi

npm run docker:e2e-ci
pnpm run docker:e2e-ci

printf "\n${red}${i}.${no_color} Remove resources\n"
i=$(($i + 1))

npm run docker:e2e-ci:delete
pnpm run docker:e2e-ci:delete
fi
2 changes: 1 addition & 1 deletion docker/docker-compose.ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ services:
image: docker.io/postgres:15.3
container_name: dso-console_postgres
ports:
- 8081:80
- 5432:5432
environment:
POSTGRES_DB: dso-console-db
POSTGRES_USER: admin
Expand Down
21 changes: 1 addition & 20 deletions docker/docker-compose.dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,24 +41,6 @@ services:
- dso-network
attach: false

pgadmin:
restart: unless-stopped
image: docker.io/dpage/pgadmin4:latest
container_name: dso-console_pgadmin
depends_on:
- postgres
volumes:
- ../pgadmin/servers-docker.json:/pgadmin4/servers.json
- dso-pgadmin-data-dev:/var/lib/pgadmin
ports:
- 8081:80
environment:
PGADMIN_DEFAULT_EMAIL: admin@dso.fr
PGADMIN_DEFAULT_PASSWORD: admin
networks:
- dso-network
attach: false

server:
restart: unless-stopped
build:
Expand Down Expand Up @@ -117,7 +99,7 @@ services:
target: dev
image: dso-console/server-nestjs:dev
container_name: dso-console_server-nestjs
command: [start:dev]
command: [dev]
ports:
- 3001:3001
depends_on:
Expand Down Expand Up @@ -235,5 +217,4 @@ networks:

volumes:
dso-keycloak-dsfr-theme:
dso-pgadmin-data-dev:
dso-postgres-data-dev:
Loading
Loading