Skip to content

Commit e8d9b64

Browse files
authored
Add npm trusted publishing workflow
1 parent 38091e0 commit e8d9b64

1 file changed

Lines changed: 29 additions & 2 deletions

File tree

.github/workflows/publish.yml

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: publish
1+
name: Publish to npm
22

33
on:
44
release:
@@ -17,8 +17,35 @@ jobs:
1717
uses: actions/setup-node@v4
1818
with:
1919
node-version: 22
20+
cache: npm
2021
registry-url: https://registry.npmjs.org
2122
- run: npm ci
2223
- run: npm run build
2324
- run: npm test
24-
- run: npm publish --provenance --access public
25+
- name: Check package version
26+
id: package_check
27+
run: |
28+
PACKAGE_NAME=$(node -p "require('./package.json').name")
29+
PACKAGE_VERSION=$(node -p "require('./package.json').version")
30+
echo "package_name=${PACKAGE_NAME}" >> "$GITHUB_OUTPUT"
31+
echo "package_version=${PACKAGE_VERSION}" >> "$GITHUB_OUTPUT"
32+
if NPM_VIEW_OUTPUT=$(npm view "${PACKAGE_NAME}@${PACKAGE_VERSION}" version 2>&1); then
33+
echo "already_published=true" >> "$GITHUB_OUTPUT"
34+
echo "${PACKAGE_NAME}@${PACKAGE_VERSION} is already published, skipping publish."
35+
else
36+
if echo "$NPM_VIEW_OUTPUT" | grep -Eq "E404|404 Not Found"; then
37+
echo "already_published=false" >> "$GITHUB_OUTPUT"
38+
else
39+
echo "$NPM_VIEW_OUTPUT"
40+
exit 1
41+
fi
42+
fi
43+
- name: Publish package
44+
if: steps.package_check.outputs.already_published == 'false'
45+
run: |
46+
PACKAGE_NAME="${{ steps.package_check.outputs.package_name }}"
47+
if [[ "$PACKAGE_NAME" == @* ]]; then
48+
npm publish --provenance --access public
49+
else
50+
npm publish --provenance
51+
fi

0 commit comments

Comments
 (0)