44 workflow_dispatch :
55
66permissions :
7- contents : read
7+ contents : write
88 id-token : write
99
1010jobs :
@@ -31,14 +31,43 @@ jobs:
3131 run : npm run typecheck
3232
3333 - name : Verify package is unpublished
34+ id : package
3435 run : |
3536 PACKAGE_NAME=$(node -p "require('./package.json').name")
3637 PACKAGE_VERSION=$(node -p "require('./package.json').version")
38+ TAG_NAME="v${PACKAGE_VERSION}"
39+
40+ echo "name=${PACKAGE_NAME}" >> "$GITHUB_OUTPUT"
41+ echo "version=${PACKAGE_VERSION}" >> "$GITHUB_OUTPUT"
42+ echo "tag=${TAG_NAME}" >> "$GITHUB_OUTPUT"
3743
3844 if npm view "${PACKAGE_NAME}@${PACKAGE_VERSION}" version >/dev/null 2>&1; then
3945 echo "${PACKAGE_NAME}@${PACKAGE_VERSION} is already published"
4046 exit 1
4147 fi
4248
49+ if git ls-remote --exit-code --tags origin "refs/tags/${TAG_NAME}" >/dev/null 2>&1; then
50+ echo "${TAG_NAME} already exists"
51+ exit 1
52+ fi
53+
4354 - name : Publish
44- run : npm publish
55+ run : npm publish --provenance
56+
57+ - name : Create GitHub release
58+ env :
59+ GH_TOKEN : ${{ github.token }}
60+ PACKAGE_NAME : ${{ steps.package.outputs.name }}
61+ PACKAGE_VERSION : ${{ steps.package.outputs.version }}
62+ TAG_NAME : ${{ steps.package.outputs.tag }}
63+ run : |
64+ awk "/^## v${PACKAGE_VERSION}$/{flag=1; next} /^## /{flag=0} flag" CHANGELOG.md > release-notes.md
65+
66+ if [ ! -s release-notes.md ]; then
67+ echo "Published ${PACKAGE_NAME}@${PACKAGE_VERSION} to npm." > release-notes.md
68+ fi
69+
70+ gh release create "${TAG_NAME}" \
71+ --target "${GITHUB_SHA}" \
72+ --title "${TAG_NAME}" \
73+ --notes-file release-notes.md
0 commit comments