8181
8282 - run : npm ci
8383
84- # Decode the GitHub OIDC token to verify the claims that will be sent
85- # to npmjs.com. If the trusted publisher config on npm doesn't match
86- # exactly (repo, workflow filename, environment), the auth will fail.
87- - name : Verify OIDC claims sent to npm
88- run : |
89- TOKEN=$(curl -sSf -H "Authorization: bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \
90- "$ACTIONS_ID_TOKEN_REQUEST_URL&audience=npm:registry.npmjs.org")
91- JWT=$(echo "$TOKEN" | jq -r .value)
92- PAYLOAD=$(echo "$JWT" | cut -d. -f2 | tr '_-' '/+' | base64 -d 2>/dev/null || true)
93- echo "OIDC claims being sent to npm:"
94- echo "$PAYLOAD" | jq '{repository, workflow, workflow_ref, ref, environment, sub, aud}' || echo "$PAYLOAD"
95-
9684 - name : Detect version change
9785 id : check
9886 run : |
@@ -110,21 +98,9 @@ jobs:
11098 echo "::notice::Skipping publish: local=$LOCAL, npm=$NPM"
11199 fi
112100
113- # Show .npmrc state so we can rule out lingering auth config that
114- # would prevent npm from falling through to OIDC.
115- - name : Show .npmrc state
116- if : steps.check.outputs.changed == 'true'
117- run : |
118- echo "--- ~/.npmrc ---"
119- cat ~/.npmrc 2>/dev/null | sed 's/_authToken=.*/_authToken=<MASKED>/' || echo "(no ~/.npmrc)"
120- echo "--- ./.npmrc ---"
121- cat ./.npmrc 2>/dev/null | sed 's/_authToken=.*/_authToken=<MASKED>/' || echo "(no ./.npmrc)"
122- echo "--- npm config (auth) ---"
123- npm config list 2>&1 | grep -iE "registry|auth|provenance" || true
124-
125- - name : Publish to npm (verbose, OIDC)
101+ - name : Publish to npm
126102 if : steps.check.outputs.changed == 'true'
127- run : npm publish --provenance --access public --loglevel=verbose
103+ run : npm publish --provenance --access public
128104
129105 - name : Tag and create GitHub release
130106 if : steps.check.outputs.changed == 'true'
0 commit comments