# Publication du paquet @johanleroy/git-arboretum sur le registre npm du Gitea, # déclenchée UNIQUEMENT par un tag vX.Y.Z (jamais sur un push de branche). name: Release on: push: tags: ['v*'] permissions: contents: read packages: write jobs: publish: name: Publish to Gitea npm registry runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 22 registry-url: 'https://git.lidge.fr/api/packages/johanleroy/npm/' scope: '@johanleroy' cache: npm - run: npm ci - run: npm run build # Garde-fou : le tag (sans le "v") doit correspondre à la version du paquet. # GITHUB_REF_NAME est une variable d'env du runner (pas d'interpolation ${{ }} dans le shell). - name: Verify tag matches package version run: | pkg=$(node -p "require('./packages/server/package.json').version") tag="${GITHUB_REF_NAME#v}" if [ "$pkg" != "$tag" ]; then echo "ERREUR: tag '$tag' != version paquet '$pkg'" exit 1 fi echo "OK: tag $tag == version $pkg" # Publication idempotente : skip si la version est déjà sur le registre (utile quand un tag # est re-poussé). Mapper le secret du registre sur NODE_AUTH_TOKEN lu par le .npmrc de setup-node. - name: Publish (skip if already published) run: | pkg=$(node -p "require('./packages/server/package.json').version") if npm view "@johanleroy/git-arboretum@$pkg" version >/dev/null 2>&1; then echo "Version $pkg déjà publiée — publication ignorée." else npm publish -w @johanleroy/git-arboretum fi env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # SBOM (transparence supply-chain entreprise) : généré pour le paquet publié et exposé en artefact. # upload-artifact@v3 : Gitea Actions (GHES-like) ne supporte pas @v4 (@actions/artifact v2+). - name: Generate SBOM (CycloneDX) run: npx --yes @cyclonedx/cyclonedx-npm --omit dev --output-format JSON --output-file sbom.json -w @johanleroy/git-arboretum || npx --yes @cyclonedx/cyclonedx-npm --omit dev --output-format JSON --output-file sbom.json - uses: actions/upload-artifact@v3 with: name: sbom path: sbom.json