ci: 将 npm 发布触发器从标签推送改为分支推送

修改 GitHub Actions 工作流,将发布触发条件从推送特定标签改为推送到 main 或 master 分支。
添加版本检查逻辑,仅在本地 package.json 版本与 npm 上已发布版本不同时才执行发布步骤,避免重复发布相同版本。
This commit is contained in:
anghunk
2026-01-31 12:03:38 +08:00
parent dd3f7c3707
commit cdaecab7ae

View File

@@ -2,8 +2,9 @@ name: Publish npm
on:
push:
tags:
- "widget-v*"
branches:
- main
- master
jobs:
publish:
@@ -22,16 +23,47 @@ jobs:
node-version: "20"
registry-url: "https://registry.npmjs.org"
- name: Get local package info
id: pkg
working-directory: docs/widget
run: |
name=$(node -p "require('./package.json').name")
version=$(node -p "require('./package.json').version")
echo "name=$name" >> $GITHUB_OUTPUT
echo "version=$version" >> $GITHUB_OUTPUT
- name: Get npm published version
id: npm
run: |
PUBLISHED_VERSION=$(npm view "${{ steps.pkg.outputs.name }}" version || echo "none")
echo "version=$PUBLISHED_VERSION" >> $GITHUB_OUTPUT
- name: Decide whether to publish
id: decision
run: |
echo "local=${{ steps.pkg.outputs.version }}"
echo "remote=${{ steps.npm.outputs.version }}"
if [ "${{ steps.npm.outputs.version }}" = "none" ]; then
echo "should_publish=true" >> $GITHUB_OUTPUT
elif [ "${{ steps.pkg.outputs.version }}" != "${{ steps.npm.outputs.version }}" ]; then
echo "should_publish=true" >> $GITHUB_OUTPUT
else
echo "should_publish=false" >> $GITHUB_OUTPUT
fi
- name: Install dependencies
if: steps.decision.outputs.should_publish == 'true'
working-directory: docs/widget
run: npm ci
- name: Build widget
if: steps.decision.outputs.should_publish == 'true'
working-directory: docs/widget
run: npm run build
- name: Publish to npm
if: steps.decision.outputs.should_publish == 'true'
working-directory: docs/widget
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npm publish --access public
run: npm publish --access public