Skip to content

Commit 04449e8

Browse files
committed
chore: add OIDC diagnostics for npm trusted publishing
1 parent 5d577c6 commit 04449e8

1 file changed

Lines changed: 42 additions & 0 deletions

File tree

.github/workflows/npm.yml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,48 @@ jobs:
4545
echo "exists=false" >> "$GITHUB_OUTPUT"
4646
fi
4747
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+
4890
- name: Publish package on NPM
4991
if: steps.exists.outputs.exists == 'false'
5092
run: npm publish --access public --provenance

0 commit comments

Comments
 (0)