diff --git a/.gitea/workflows/pull-request.yml b/.gitea/workflows/pull-request.yml index c161627..681f0a5 100644 --- a/.gitea/workflows/pull-request.yml +++ b/.gitea/workflows/pull-request.yml @@ -104,9 +104,41 @@ jobs: with: node-version: '22' + # 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