|
45 | 45 | echo "exists=false" >> "$GITHUB_OUTPUT" |
46 | 46 | fi |
47 | 47 |
|
| 48 | + - name: OIDC trusted publishing diagnostics |
| 49 | + if: steps.exists.outputs.exists == 'false' |
| 50 | + run: | |
| 51 | + echo "=== GitHub context ===" |
| 52 | + echo "repository=$GITHUB_REPOSITORY" |
| 53 | + echo "ref=$GITHUB_REF" |
| 54 | + echo "event_name=$GITHUB_EVENT_NAME" |
| 55 | + echo "workflow_ref=$GITHUB_WORKFLOW_REF" |
| 56 | + echo "workflow_sha=$GITHUB_WORKFLOW_SHA" |
| 57 | +
|
| 58 | + if [ -n "${ACTIONS_ID_TOKEN_REQUEST_URL:-}" ] && [ -n "${ACTIONS_ID_TOKEN_REQUEST_TOKEN:-}" ]; then |
| 59 | + echo "=== OIDC token claims (audience=npm:registry.npmjs.org) ===" |
| 60 | + TOKEN_RESPONSE=$(curl -sSf -H "Authorization: bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" "${ACTIONS_ID_TOKEN_REQUEST_URL}&audience=npm:registry.npmjs.org") |
| 61 | + ID_TOKEN=$(node -e "const r=JSON.parse(process.argv[1]); process.stdout.write(r.value||'')" "$TOKEN_RESPONSE") |
| 62 | +
|
| 63 | + node -e " |
| 64 | + const t = process.argv[1]; |
| 65 | + const p = t.split('.')[1]; |
| 66 | + const b64 = p.replace(/-/g, '+').replace(/_/g, '/'); |
| 67 | + const pad = '='.repeat((4 - (b64.length % 4)) % 4); |
| 68 | + const payload = JSON.parse(Buffer.from(b64 + pad, 'base64').toString('utf8')); |
| 69 | + const picked = { |
| 70 | + iss: payload.iss, |
| 71 | + sub: payload.sub, |
| 72 | + aud: payload.aud, |
| 73 | + repository: payload.repository, |
| 74 | + repository_owner: payload.repository_owner, |
| 75 | + repository_visibility: payload.repository_visibility, |
| 76 | + ref: payload.ref, |
| 77 | + sha: payload.sha, |
| 78 | + event_name: payload.event_name, |
| 79 | + job_workflow_ref: payload.job_workflow_ref, |
| 80 | + workflow_ref: payload.workflow_ref, |
| 81 | + environment: payload.environment |
| 82 | + }; |
| 83 | + console.log(JSON.stringify(picked, null, 2)); |
| 84 | + " "$ID_TOKEN" |
| 85 | + else |
| 86 | + echo "OIDC request environment variables are missing." |
| 87 | + exit 1 |
| 88 | + fi |
| 89 | +
|
48 | 90 | - name: Publish package on NPM |
49 | 91 | if: steps.exists.outputs.exists == 'false' |
50 | 92 | run: npm publish --access public --provenance |
0 commit comments