diff --git a/.gitea/workflows/pull-request.yml b/.gitea/workflows/pull-request.yml index 5345b97..ccef1f3 100644 --- a/.gitea/workflows/pull-request.yml +++ b/.gitea/workflows/pull-request.yml @@ -106,14 +106,49 @@ jobs: cache: npm cache-dependency-path: frontend/package-lock.json + # Cache de node_modules entier (pas seulement le cache de download npm). + # Cle = hash du lockfile : tant qu'il ne bouge pas, on saute l'extraction + # des ~1300 paquets (369 Mo) et le postinstall. + - name: Cache node_modules + id: node-modules-cache + uses: actions/cache@v4 + with: + path: frontend/node_modules + key: node-modules-${{ hashFiles('frontend/package-lock.json') }} + + # npm ci uniquement en cache miss (il efface node_modules de toute facon). - name: Install Node dependencies + if: steps.node-modules-cache.outputs.cache-hit != 'true' run: npm ci + # En cache hit, node_modules est restaure tel quel : le postinstall + # (nuxt prepare) n'a pas tourne. On regenere les types .nuxt a la main + # pour que lint/vitest/build disposent du contexte Nuxt. + - name: Prepare Nuxt (cache hit) + if: steps.node-modules-cache.outputs.cache-hit == 'true' + run: npm run postinstall + + # Cache des artefacts de build Nuxt/Vite pour eviter un build a froid a + # chaque PR. Cle par commit + restore-keys pour repartir du build le plus + # recent ; Vite invalide ses entrees obsoletes par hash de contenu. + - name: Cache Nuxt/Vite build + uses: actions/cache@v4 + with: + path: | + frontend/.nuxt + frontend/node_modules/.cache + key: nuxt-build-${{ github.sha }} + restore-keys: | + nuxt-build- + - name: ESLint run: npm run lint - name: Unit tests (Vitest) run: npm run test + # `nuxt build` (et non `build:dist`/`nuxt generate`) : l'app est en SSR off + # (SPA), le prerender de generate n'apporte rien a une quality gate — on + # veut seulement valider que le bundle compile. - name: Build production (nuxt build) - run: npm run build:dist + run: npm run build