Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 25 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,37 @@ name: Publish to NPM
on:
release:
types:
- created

- published
- released
permissions:
id-token: write
contents: read

jobs:
# When a prerelease is promoted to a full release, update the npm latest tag
promote:
if: github.event.action == 'released'
runs-on: ubuntu-24.04
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Install node 20
uses: actions/setup-node@v6
with:
node-version: '20'
registry-url: https://registry.npmjs.org
- name: Promote edge to latest
run: |
VERSION=$(echo "$TAG_NAME" | sed 's/^v//')
PACKAGE=$(node -p "require('./package.json').name")
npm dist-tag add "$PACKAGE@$VERSION" latest
echo "::notice title=Promoted $VERSION to latest::The latest tag now points to $VERSION (was edge-only)"
env:
TAG_NAME: ${{ github.event.release.tag_name }}
NODE_AUTH_TOKEN: ${{secrets.NPM_DEPLOY_TOKEN}}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Race condition: promote may fail before deploy publishes

Medium Severity

When a non-prerelease is published directly (not promoted from prerelease), GitHub fires both published and released events as separate workflow runs. The promote job is much lighter than deploy (no dependency install, lint, or tests), so it will likely reach npm dist-tag add before the deploy job has finished npm publish. Since the package version doesn't exist on npm yet, npm dist-tag add will fail, producing a confusing red workflow run. The PR description claims this is "harmless" because dist-tag add is idempotent, but idempotency doesn't help when the version hasn't been published yet.

Additional Locations (1)

Fix in Cursor Fix in Web


deploy:
if: github.event.action == 'published'
runs-on: ${{ matrix.os }}
env:
TERM: xterm
Expand Down
Loading