From 62f358a743d09cd2d0088a5adc124505a0069d8d Mon Sep 17 00:00:00 2001 From: skjnldsv Date: Thu, 11 Dec 2025 09:51:32 +0100 Subject: [PATCH] fix: drop npm token publishing and use trusted publisher Signed-off-by: skjnldsv --- workflow-templates/npm-publish.yml | 49 ++++++++++++++++-------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/workflow-templates/npm-publish.yml b/workflow-templates/npm-publish.yml index 5573b8a..c5da54b 100644 --- a/workflow-templates/npm-publish.yml +++ b/workflow-templates/npm-publish.yml @@ -13,41 +13,33 @@ on: types: [published] permissions: + id-token: write # Required for OIDC contents: read jobs: publish: runs-on: ubuntu-latest - name: Build and publish to npm - permissions: - packages: write + environment: npm-publish steps: - - name: Check actor permission level - uses: skjnldsv/check-actor-permission@69e92a3c4711150929bca9fcf34448c5bf5526e7 # v3.0 - with: - require: admin - - name: Checkout uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: persist-credentials: false - - name: Read package.json node and npm engines version - uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 + - name: Read package.json + uses: nextcloud/parse-package-engines-action@122ae05d4257008180a514e1ddeb0c1b9d094bdd # v0.1.0 id: versions - with: - fallbackNode: '^24' - fallbackNpm: '^11.3' - - name: Set up node ${{ steps.versions.outputs.nodeVersion }} - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 + - name: Set up node + uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 with: - node-version: ${{ steps.versions.outputs.nodeVersion }} + node-version: ${{ steps.versions.outputs.node-version }} + registry-url: https://registry.npmjs.org - - name: Set up npm ${{ steps.versions.outputs.npmVersion }} - run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}' + - name: Set up npm + run: npm i -g 'npm@${{ steps.versions.outputs.package-manager-version }}' - name: Check tag matches package.json run: | @@ -64,12 +56,25 @@ jobs: env: CYPRESS_INSTALL_BINARY: 0 run: | - npm ci + npm ci --ignore-scripts npm run build --if-present + - name: Fetch latest tag + id: latest-tag + run: | + TAG=$(gh release list \ + --exclude-drafts \ + --exclude-pre-releases \ + --json isLatest,tagName \ + --jq 'map(select(.isLatest == true))[].tagName' \ + -R ${{ github.repository }}) + echo "Latest tag is $TAG" + echo "LATEST_TAG=$TAG" >> $GITHUB_OUTPUT + env: + GH_TOKEN: ${{ github.token }} + - name: Publish run: | - npm config set //registry.npmjs.org/:_authToken=$NODE_AUTH_TOKEN - npm publish + npm publish --tag $RELEASE_GROUP env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + RELEASE_GROUP: ${{ (contains(github.ref, 'rc') || contains(github.ref, 'beta') || contains(github.ref, 'alpha')) && 'next' || ((steps.latest-tag.outputs.LATEST_TAG != github.event.release.tag_name) && 'stable' || 'latest') }}