From e65d6209ac6f07eb0801cdb5671bd3699ac926e2 Mon Sep 17 00:00:00 2001 From: manus-admin Date: Wed, 8 Jul 2026 12:45:25 +0200 Subject: [PATCH 1/4] fix: move DB to web network (Docker 29.4.0 ICC bug) --- docker-compose.yml | 49 ++++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 0f50e2f..ee308f7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,32 +4,32 @@ services: container_name: itinova-budget-si-app restart: unless-stopped environment: - - NODE_ENV=production - - DATABASE_URL=mysql://budget_user:BudgetSI2027!@db:3306/budget_si - - JWT_SECRET=${JWT_SECRET:-budget-si-recette-jwt-secret-2027} - - VITE_APP_ID=${VITE_APP_ID:-} - - OAUTH_SERVER_URL=${OAUTH_SERVER_URL:-} - - VITE_OAUTH_PORTAL_URL=${VITE_OAUTH_PORTAL_URL:-} - - OWNER_OPEN_ID=${OWNER_OPEN_ID:-} - - OWNER_NAME=${OWNER_NAME:-Administrateur} - - BUILT_IN_FORGE_API_URL=${BUILT_IN_FORGE_API_URL:-} - - BUILT_IN_FORGE_API_KEY=${BUILT_IN_FORGE_API_KEY:-} - - VITE_FRONTEND_FORGE_API_KEY=${VITE_FRONTEND_FORGE_API_KEY:-} - - VITE_FRONTEND_FORGE_API_URL=${VITE_FRONTEND_FORGE_API_URL:-} - - VITE_ANALYTICS_ENDPOINT=${VITE_ANALYTICS_ENDPOINT:-} - - VITE_ANALYTICS_WEBSITE_ID=${VITE_ANALYTICS_WEBSITE_ID:-} + - NODE_ENV=production + - DATABASE_URL=mysql://budget_user:BudgetSI2027!@db:3306/budget_si + - JWT_SECRET=${JWT_SECRET:-budget-si-recette-jwt-secret-2027} + - VITE_APP_ID=${VITE_APP_ID:-} + - OAUTH_SERVER_URL=${OAUTH_SERVER_URL:-} + - VITE_OAUTH_PORTAL_URL=${VITE_OAUTH_PORTAL_URL:-} + - OWNER_OPEN_ID=${OWNER_OPEN_ID:-} + - OWNER_NAME=${OWNER_NAME:-Administrateur} + - BUILT_IN_FORGE_API_URL=${BUILT_IN_FORGE_API_URL:-} + - BUILT_IN_FORGE_API_KEY=${BUILT_IN_FORGE_API_KEY:-} + - VITE_FRONTEND_FORGE_API_KEY=${VITE_FRONTEND_FORGE_API_KEY:-} + - VITE_FRONTEND_FORGE_API_URL=${VITE_FRONTEND_FORGE_API_URL:-} + - VITE_ANALYTICS_ENDPOINT=${VITE_ANALYTICS_ENDPOINT:-} + - VITE_ANALYTICS_WEBSITE_ID=${VITE_ANALYTICS_WEBSITE_ID:-} depends_on: db: condition: service_healthy networks: - - budget-internal - - web + - web + - web labels: - - "traefik.enable=true" - - "traefik.http.routers.budget-si.rule=Host(`budget-si.recette.santinova-soft.org`)" - - "traefik.http.routers.budget-si.entrypoints=websecure" - - "traefik.http.routers.budget-si.tls.certresolver=letsencrypt" - - "traefik.http.services.budget-si.loadbalancer.server.port=3000" + - "traefik.enable=true" + - "traefik.http.routers.budget-si.rule=Host(`budget-si.recette.santinova-soft.org`)" + - "traefik.http.routers.budget-si.entrypoints=websecure" + - "traefik.http.routers.budget-si.tls.certresolver=letsencrypt" + - "traefik.http.services.budget-si.loadbalancer.server.port=3000" db: image: mysql:8.0 @@ -41,20 +41,17 @@ services: MYSQL_USER: budget_user MYSQL_PASSWORD: BudgetSI2027! volumes: - - db_data:/var/lib/mysql + - db_data:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-pBudgetSI2027!"] interval: 10s timeout: 5s retries: 5 networks: - - budget-internal - + - web volumes: db_data: networks: - budget-internal: - driver: bridge web: external: true From 81f57d9895e8684f910975ab03a45daad5826aac Mon Sep 17 00:00:00 2001 From: manus-admin Date: Wed, 8 Jul 2026 12:49:52 +0200 Subject: [PATCH 2/4] fix: deduplicate web network (Docker 29.4.0) --- docker-compose.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index ee308f7..11b499e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,7 +23,6 @@ services: condition: service_healthy networks: - web - - web labels: - "traefik.enable=true" - "traefik.http.routers.budget-si.rule=Host(`budget-si.recette.santinova-soft.org`)" From 2422784aebb16e6281b872f4a5e19d4253008896 Mon Sep 17 00:00:00 2001 From: Manus Date: Mon, 17 Aug 2026 22:35:47 +0200 Subject: [PATCH 3/4] =?UTF-8?q?chore:=20versionner=20le=20manifeste=20de?= =?UTF-8?q?=20d=C3=A9ploiement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 app.json diff --git a/app.json b/app.json new file mode 100644 index 0000000..026fcce --- /dev/null +++ b/app.json @@ -0,0 +1,13 @@ +{ + "id": "itinova-budget-si", + "name": "Gestion Budget Informatique", + "category": "SANTINOVA", + "urls": { + "recette": "https://budget-si.recette.santinova-soft.org", + "prod": "https://budget-si.santinova-soft.org" + }, + "containerName": "itinova-budget-si-app", + "image": "images/budget-si.png", + "giteaRepo": "itinova-budget-si", + "giteaOwner": "manus-admin" +} From 06afee0d0b2559a4b1deb5ba67e6ba2d318f7f36 Mon Sep 17 00:00:00 2001 From: Manus CI Date: Fri, 21 Aug 2026 10:31:26 +0000 Subject: [PATCH 4/4] =?UTF-8?q?CI=20:=20workflow=20validate.yml,=20manifes?= =?UTF-8?q?te=20ci.required:true,=20garde=20VITEST,=20tests=20isol=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/validate.yml | 45 +++++++++++++++++++++++++++++++++++ app.json | 5 +++- package.json | 5 ++-- server/_core/index.ts | 5 +++- 4 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 .gitea/workflows/validate.yml diff --git a/.gitea/workflows/validate.yml b/.gitea/workflows/validate.yml new file mode 100644 index 0000000..7023c2b --- /dev/null +++ b/.gitea/workflows/validate.yml @@ -0,0 +1,45 @@ +name: Validation applicative + +on: + push: + branches: [main, master] + paths-ignore: + - "**.md" + - "docs/**" + pull_request: + branches: [main, master] + paths-ignore: + - "**.md" + - "docs/**" + workflow_dispatch: + +jobs: + verify: + name: TypeScript, tests et build + # Label dédié : image locale avec Node 22, pnpm verrouillé et Bash déjà installés. + runs-on: ci-node22 + timeout-minutes: 15 + steps: + - name: Récupérer les sources + uses: actions/checkout@v4 + + - name: Calculer la clé de cache pnpm + id: pnpm-cache-key + shell: bash + run: | + echo "store=$(pnpm store path --silent)" >> "$GITHUB_OUTPUT" + echo "lock=$(sha256sum pnpm-lock.yaml | cut -d ' ' -f 1)" >> "$GITHUB_OUTPUT" + + - name: Restaurer le store pnpm + uses: actions/cache@v4 + with: + path: ${{ steps.pnpm-cache-key.outputs.store }} + key: pnpm-${{ runner.os }}-${{ steps.pnpm-cache-key.outputs.lock }} + restore-keys: | + pnpm-${{ runner.os }}- + + - name: Installer les dépendances verrouillées + run: pnpm install --frozen-lockfile --prefer-offline + + - name: Vérifier TypeScript, tests et build + run: pnpm verify diff --git a/app.json b/app.json index 026fcce..ff2eee2 100644 --- a/app.json +++ b/app.json @@ -9,5 +9,8 @@ "containerName": "itinova-budget-si-app", "image": "images/budget-si.png", "giteaRepo": "itinova-budget-si", - "giteaOwner": "manus-admin" + "giteaOwner": "manus-admin", + "ci": { + "required": true + } } diff --git a/package.json b/package.json index 4bcef33..41f60ae 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,8 @@ "check": "tsc --noEmit", "format": "prettier --write .", "test": "vitest run", - "db:push": "drizzle-kit generate && drizzle-kit migrate" + "db:push": "drizzle-kit generate && drizzle-kit migrate", + "verify": "pnpm check && pnpm test && pnpm build" }, "dependencies": { "@aws-sdk/client-s3": "^3.693.0", @@ -115,4 +116,4 @@ "tailwindcss>nanoid": "3.3.7" } } -} \ No newline at end of file +} diff --git a/server/_core/index.ts b/server/_core/index.ts index 3aecafd..70a2540 100644 --- a/server/_core/index.ts +++ b/server/_core/index.ts @@ -63,4 +63,7 @@ async function startServer() { }); } -startServer().catch(console.error); +// Vitest ne doit jamais démarrer un serveur HTTP. +if (!process.env.VITEST) { + startServer().catch(console.error); +}