From d580c9a1071f711df0ba56bd3909533ecd7eea3c Mon Sep 17 00:00:00 2001 From: Manus CI Date: Fri, 21 Aug 2026 11:10:29 +0000 Subject: [PATCH] =?UTF-8?q?CI=20:=20workflow=20validate.yml,=20manifeste?= =?UTF-8?q?=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 | 10 +++++-- package.json | 5 ++-- server/__tests__/localAuth.test.ts | 5 +++- server/_core/index.ts | 5 +++- 5 files changed, 64 insertions(+), 6 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 d5b46e6..a1ccb5a 100644 --- a/app.json +++ b/app.json @@ -2,9 +2,15 @@ "id": "formation-manager-itinova", "name": "Formation Manager", "category": "ITINOVA", - "urls": {"recette": "https://formations.recette.santinova-soft.org", "prod": "https://formations.santinova-soft.org"}, + "urls": { + "recette": "https://formations.recette.santinova-soft.org", + "prod": "https://formations.santinova-soft.org" + }, "containerName": "formation-manager-itinova", "image": "images/formation-manager.png", "giteaRepo": "formation-manager-itinova", - "giteaOwner": "manus-admin" + "giteaOwner": "manus-admin", + "ci": { + "required": true + } } diff --git a/package.json b/package.json index 9204fed..d1bff07 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", @@ -144,4 +145,4 @@ "sharp" ] } -} \ No newline at end of file +} diff --git a/server/__tests__/localAuth.test.ts b/server/__tests__/localAuth.test.ts index 4385110..6504191 100644 --- a/server/__tests__/localAuth.test.ts +++ b/server/__tests__/localAuth.test.ts @@ -1,9 +1,12 @@ import { describe, it, expect, beforeAll } from "vitest"; + +// En CI, skip si pas de DATABASE_URL. +const describeIntegration = process.env.DATABASE_URL ? describe : describe.skip; import { getDb } from "../db"; import { users } from "../../drizzle/schema"; import { eq } from "drizzle-orm"; -describe("Local Authentication", () => { +describeIntegration("Local Authentication", () => { beforeAll(async () => { // Vérifier que la base de données est accessible const db = await getDb(); diff --git a/server/_core/index.ts b/server/_core/index.ts index 3ca2c06..f0bceb5 100644 --- a/server/_core/index.ts +++ b/server/_core/index.ts @@ -94,4 +94,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); +}