Skip to content

Commit 6e4489e

Browse files
committed
feat: enhance release workflow with version verification and cleanup on failure
1 parent 469a555 commit 6e4489e

File tree

1 file changed

+56
-1
lines changed

1 file changed

+56
-1
lines changed

.github/workflows/release.yml

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ jobs:
2727
with:
2828
node-version: 20
2929
registry-url: https://registry.npmjs.org
30-
always-auth: false
3130

3231
- name: Prepare npm trusted publishing context
3332
run: |
@@ -67,6 +66,24 @@ jobs:
6766
6867
- name: Publish package with provenance
6968
run: npm publish --provenance --access public
69+
env:
70+
NODE_AUTH_TOKEN: ""
71+
NPM_TOKEN: ""
72+
73+
- name: Verify published version on npm registry
74+
run: |
75+
VERSION="${{ steps.pkg.outputs.version }}"
76+
for i in 1 2 3 4 5 6; do
77+
PUBLISHED_VERSION=$(npm view vitepress-mermaid-renderer version || true)
78+
if [ "$PUBLISHED_VERSION" = "$VERSION" ]; then
79+
echo "Verified npm latest=$PUBLISHED_VERSION"
80+
exit 0
81+
fi
82+
echo "Waiting for npm propagation... attempt $i (latest=$PUBLISHED_VERSION, expected=$VERSION)"
83+
sleep 10
84+
done
85+
echo "Published version was not visible on npm after waiting."
86+
exit 1
7087
7188
- name: Extract release notes from changelog
7289
run: |
@@ -90,3 +107,41 @@ jobs:
90107
tag_name: ${{ steps.pkg.outputs.tag }}
91108
name: ${{ steps.pkg.outputs.tag }}
92109
body_path: RELEASE_NOTES.md
110+
111+
- name: Cleanup release and tag on failure
112+
if: failure() && steps.pkg.outputs.tag != ''
113+
uses: actions/github-script@v7
114+
with:
115+
script: |
116+
const tag = "${{ steps.pkg.outputs.tag }}";
117+
const owner = context.repo.owner;
118+
const repo = context.repo.repo;
119+
120+
// Delete release if it exists.
121+
try {
122+
const release = await github.rest.repos.getReleaseByTag({
123+
owner,
124+
repo,
125+
tag,
126+
});
127+
await github.rest.repos.deleteRelease({
128+
owner,
129+
repo,
130+
release_id: release.data.id,
131+
});
132+
core.info(`Deleted release for tag ${tag}`);
133+
} catch (error) {
134+
core.info(`No release to delete for tag ${tag}: ${error.message}`);
135+
}
136+
137+
// Delete git tag ref if it exists.
138+
try {
139+
await github.rest.git.deleteRef({
140+
owner,
141+
repo,
142+
ref: `tags/${tag}`,
143+
});
144+
core.info(`Deleted tag ${tag}`);
145+
} catch (error) {
146+
core.info(`No tag to delete (${tag}) or delete failed: ${error.message}`);
147+
}

0 commit comments

Comments
 (0)