CI sur Gitea Actions par le workflow commun avalon-vanguard/ci

.gitea/workflows/ci.yml appelle node.yml@v1 sur la même matrice (Node 20.x,
22.x, 24.x) et les mêmes déclencheurs que .github/workflows/ci.yml. Comme
node.yml ne connaît que lint, typecheck, test, build et check :
- « typecheck » renvoie à « type-check » ;
- « check » enchaîne, dans l'ordre de la CI GitHub, les contrôles
  post-build : points d'entrée publiés, démo, check:types, check:docs,
  check:docs-sync.

Les cinq « node -e » de chargement des points d'entrée passent dans
scripts/check-entry-points.mjs, que la CI GitHub appelle aussi : les deux
CI vérifient la même chose.

node.yml lance « npm test » et non « test:coverage » : vitest.config.ts ne
fixe aucun seuil et rien ne lit le rapport lcov, donc ce sont les mêmes
tests qui décident. La CI GitHub garde test:coverage.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-10-01 17:03:33 +02:00
co-authored by Claude Opus 5.5
parent 68d5d46ec0
commit e4b8c0f6aa
4 changed files with 46 additions and 6 deletions
+25
View File
@@ -0,0 +1,25 @@
# Contrôles de .github/workflows/ci.yml sur Gitea, par le workflow commun avalon-vanguard/ci.
# Ce dossier fait ignorer .github/workflows par Gitea ; GitHub continue d'exécuter les siens
# (CI, Pages, publication npm). Les contrôles post-build (points d'entrée, démo, types publiés,
# page de docs) sont regroupés dans le script « check ».
#
# node.yml lance « npm test », pas « test:coverage » : vitest.config.ts ne fixe aucun seuil de
# couverture et rien ne lit le rapport lcov, donc les mêmes tests décident du résultat.
name: CI
on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]
jobs:
verify:
strategy:
fail-fast: false
matrix:
node: [20.x, 22.x, 24.x]
uses: avalon-vanguard/ci/.gitea/workflows/node.yml@v1
with:
node-version: ${{ matrix.node }}
secrets: inherit
+1 -6
View File
@@ -34,12 +34,7 @@ jobs:
- name: Build - name: Build
run: npm run build run: npm run build
- name: Verify published entry points load - name: Verify published entry points load
run: | run: node scripts/check-entry-points.mjs
node --input-type=module -e "import * as m from './dist/esm/index.js'; if (typeof m.toInstance !== 'function') throw new Error('ESM entry point broken');"
node --input-type=commonjs -e "const m = require('./dist/cjs/index.js'); if (typeof m.toInstance !== 'function') throw new Error('CJS entry point broken');"
node --input-type=module -e "import { standardDecorators } from './dist/esm/vite.js'; if (standardDecorators().enforce !== 'pre') throw new Error('ESM cereale/vite broken');"
node --input-type=commonjs -e "const { standardDecorators } = require('./dist/cjs/vite.js'); if (standardDecorators().enforce !== 'pre') throw new Error('CJS cereale/vite broken');"
node --input-type=module -e "import * as m from './dist/cereale.min.js'; if (typeof m.toInstanceSync !== 'function') throw new Error('flat bundle broken');"
- name: Run Demo - name: Run Demo
run: npm run demo run: npm run demo
- name: Published types stand alone - name: Published types stand alone
+2
View File
@@ -42,6 +42,7 @@
"build:docs": "node scripts/build-docs.mjs", "build:docs": "node scripts/build-docs.mjs",
"demo": "node --no-warnings=ExperimentalWarning --loader ts-node/esm src/example.ts", "demo": "node --no-warnings=ExperimentalWarning --loader ts-node/esm src/example.ts",
"type-check": "tsc --noEmit", "type-check": "tsc --noEmit",
"typecheck": "npm run type-check",
"test": "vitest run", "test": "vitest run",
"test:watch": "vitest", "test:watch": "vitest",
"test:coverage": "vitest run --coverage", "test:coverage": "vitest run --coverage",
@@ -49,6 +50,7 @@
"lint:fix": "eslint . --fix", "lint:fix": "eslint . --fix",
"verify": "npm run type-check && npm run lint && npm run test && npm run build && npm run check:types && npm run check:docs", "verify": "npm run type-check && npm run lint && npm run test && npm run build && npm run check:types && npm run check:docs",
"prepublishOnly": "npm run verify", "prepublishOnly": "npm run verify",
"check": "node scripts/check-entry-points.mjs && npm run demo && npm run check:types && npm run check:docs && npm run check:docs-sync",
"check:docs": "node scripts/check-docs.mjs", "check:docs": "node scripts/check-docs.mjs",
"check:types": "node scripts/check-types.mjs", "check:types": "node scripts/check-types.mjs",
"check:docs-sync": "npm run build:docs && node scripts/check-docs-sync.mjs" "check:docs-sync": "npm run build:docs && node scripts/check-docs-sync.mjs"
+18
View File
@@ -0,0 +1,18 @@
/**
* Fails if a published entry point does not load from dist/: `.` and `./vite`, each as ESM
* and as CommonJS, and the flat `./min` bundle. Run after `npm run build` (first step of
* `npm run check`). Moved here from inline `node -e` lines in .github/workflows/ci.yml so
* that the GitHub and Gitea workflows run the same check.
*/
import { createRequire } from 'node:module';
const require = createRequire(import.meta.url);
const assert = (ok, what) => {
if (!ok) throw new Error(`${what} broken`);
};
assert(typeof (await import('../dist/esm/index.js')).toInstance === 'function', 'ESM entry point');
assert(typeof require('../dist/cjs/index.js').toInstance === 'function', 'CJS entry point');
assert((await import('../dist/esm/vite.js')).standardDecorators().enforce === 'pre', 'ESM cereale/vite');
assert(require('../dist/cjs/vite.js').standardDecorators().enforce === 'pre', 'CJS cereale/vite');
assert(typeof (await import('../dist/cereale.min.js')).toInstanceSync === 'function', 'flat bundle');