From e4dd64b5356d62dc21c793b38905e853ffaadc4a Mon Sep 17 00:00:00 2001 From: Johan LEROY Date: Tue, 4 Aug 2026 13:27:32 +0200 Subject: [PATCH] =?UTF-8?q?ci:=20corrige=20le=20contr=C3=B4le=20d'autonomi?= =?UTF-8?q?e=20du=20tarball=20et=20all=C3=A8ge=20le=20typecheck=20desktop?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le contrôle « paquet autonome » cherchait la chaîne `@arboretum/shared` n'importe où dans le JS publié. Un commentaire de code qui mentionne le paquet (pour dire où vit la règle partagée, cf. core/session-match.ts) suffisait donc à faire échouer le job, alors que l'inlining était correct. Le grep vise désormais les vraies formes d'import (from / require( / import(), ce qui est ce que la garde veut réellement interdire. L'étape de typecheck desktop téléchargeait ~100 Mo de binaire Electron, sur les deux versions de la matrice : le job passait de 3 à 12 minutes. ELECTRON_SKIP_BINARY_DOWNLOAD=1 et une seule version de Node suffisent pour un `tsc --noEmit`. --- .gitea/workflows/ci.yml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 4f97ec4..2059a85 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -30,8 +30,13 @@ jobs: - run: npm run build:site - run: npx vitest run # packages/desktop est HORS des workspaces (CI daemon allégée) : sans cette étape, son code - # n'était JAMAIS typechecké avant un tag de release. + # n'était JAMAIS typechecké avant un tag de release. Une seule version de Node suffit, et + # ELECTRON_SKIP_BINARY_DOWNLOAD évite de télécharger ~100 Mo de binaire Electron dont un + # typecheck n'a aucun besoin (c'est ce qui rendait le job très long). - name: Typecheck desktop shell + if: matrix.node == '22' + env: + ELECTRON_SKIP_BINARY_DOWNLOAD: '1' run: | npm --prefix packages/desktop ci npm run typecheck:desktop @@ -63,9 +68,11 @@ jobs: rm -rf /tmp/inspect && mkdir -p /tmp/inspect && tar -xzf "$tgz" -C /tmp/inspect test -f /tmp/inspect/package/dist/_shared/index.js \ || { echo "ERREUR: dist/_shared/index.js absent de $tgz : inline-shared n'a pas tourné ?"; exit 1; } - if grep -rq '@arboretum/shared' /tmp/inspect/package/dist; then + # On cherche les vraies formes d'IMPORT, pas la simple chaîne : un commentaire de code qui + # mentionne le paquet (pour dire où vit la règle partagée) est légitime et ne casse rien. + if grep -rqE "(from|require\(|import\()[[:space:]]*['\"]@arboretum/shared" /tmp/inspect/package/dist; then echo "ERREUR: import bare '@arboretum/shared' encore présent dans le JS publié" - grep -rn '@arboretum/shared' /tmp/inspect/package/dist; exit 1 + grep -rnE "(from|require\(|import\()[[:space:]]*['\"]@arboretum/shared" /tmp/inspect/package/dist; exit 1 fi echo "OK: paquet autonome : shared inliné dans dist/_shared, aucun import externe" - name: Install tarball in an empty project