fix(release): make publish idempotent + verify packages landed on the registry
The first 0.9.0 run published 6/7 npm packages: npm printed `+ @colbymchenry/codegraph-linux-x64@0.9.0` but the registry never persisted it (a known npm flake), so the job went green while linux-x64 npm installs were broken. Now: - the GitHub Release step is idempotent (create, else upload --clobber); - the publish loop skips packages already on the registry, so a re-run only fills gaps; - a new verify step queries the registry (with retries) and fails the job if any package@version is missing — green now means actually shipped. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
630c60f852
commit
cc1b13056b
@@ -55,18 +55,44 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ github.token }}
|
GH_TOKEN: ${{ github.token }}
|
||||||
run: |
|
run: |
|
||||||
gh release create "v${{ steps.ver.outputs.version }}" \
|
TAG="v${{ steps.ver.outputs.version }}"
|
||||||
release/codegraph-* \
|
# Idempotent: create the release once, otherwise (re-run) refresh assets.
|
||||||
--title "v${{ steps.ver.outputs.version }}" \
|
if gh release view "$TAG" >/dev/null 2>&1; then
|
||||||
--notes-file notes.md
|
gh release upload "$TAG" release/codegraph-* --clobber
|
||||||
|
else
|
||||||
|
gh release create "$TAG" release/codegraph-* --title "$TAG" --notes-file notes.md
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Publish to npm
|
- name: Publish to npm
|
||||||
env:
|
env:
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
bash scripts/pack-npm.sh "${{ steps.ver.outputs.version }}"
|
V="${{ steps.ver.outputs.version }}"
|
||||||
|
bash scripts/pack-npm.sh "$V"
|
||||||
# Platform packages first, then the main shim (which depends on them).
|
# Platform packages first, then the main shim (which depends on them).
|
||||||
|
# Skip any already on the registry so a re-run only fills in gaps.
|
||||||
for dir in release/npm/codegraph-* release/npm/main; do
|
for dir in release/npm/codegraph-* release/npm/main; do
|
||||||
echo "publishing $dir"
|
name=$(node -p "require('./$dir/package.json').name")
|
||||||
|
if npm view "$name@$V" version >/dev/null 2>&1; then
|
||||||
|
echo "skip $name@$V (already published)"
|
||||||
|
else
|
||||||
|
echo "publishing $name@$V"
|
||||||
( cd "$dir" && npm publish --access public )
|
( cd "$dir" && npm publish --access public )
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Verify every package is actually on the registry
|
||||||
|
run: |
|
||||||
|
V="${{ steps.ver.outputs.version }}"
|
||||||
|
# npm publish can print success without persisting; confirm against the
|
||||||
|
# registry (with retries for propagation) so green means really shipped.
|
||||||
|
for dir in release/npm/codegraph-* release/npm/main; do
|
||||||
|
name=$(node -p "require('./$dir/package.json').name")
|
||||||
|
ok=
|
||||||
|
for i in 1 2 3 4 5 6; do
|
||||||
|
if npm view "$name@$V" version >/dev/null 2>&1; then ok=1; break; fi
|
||||||
|
echo "waiting for $name@$V to appear ($i)…"; sleep 10
|
||||||
|
done
|
||||||
|
[ -n "$ok" ] || { echo "::error::$name@$V never appeared on the registry"; exit 1; }
|
||||||
|
echo "verified $name@$V"
|
||||||
done
|
done
|
||||||
|
|||||||
Reference in New Issue
Block a user