Skip to content

feat: update deps

feat: update deps #4

Workflow file for this run

name: NPM Publish
on:
push:
tags:
- 'v*'
permissions:
id-token: write # Required for OIDC
contents: read
jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0 # 重要:确保 Lerna 能识别 Git Tag
# 设置 Node
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 24
registry-url: https://registry.npmjs.org
- run: npm install -g npm@latest
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- name: pnpm Install dependencies
run: pnpm install
- name: Get Changed Packages and Publish
# env:
# NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: |
# optionally ensure always-auth is not set
npm config delete always-auth || true
pnpm config delete always-auth || true
# 1. 获取变动的包列表 (JSON 格式)
# 使用 || echo "[]" 防止无变动时 CI 报错停止
CHANGED_JSON=$(npx lerna changed --json --loglevel=silent || echo "[]")
echo "Detected changes: $CHANGED_JSON"
# 2. 解析 JSON 并循环发布
# 遍历 JSON 数组中的每一个对象,提取 name 和 version
echo "$CHANGED_JSON" | jq -c '.[]' | while read -r pkg; do
NAME=$(echo "$pkg" | jq -r '.name')
VERSION=$(echo "$pkg" | jq -r '.version')
echo "Processing $NAME at version $VERSION..."
# 3. 判断版本号,决定 tag
# 逻辑:如果版本号包含字符(如 1.0.0-beta.1),发布到 beta 标签;否则发布到 latest
if [[ "$VERSION" == *"-"* ]]; then
# 取出 '-' 后的预发行部分,去掉 build metadata (+...),再取第一个 dot 之前的标识
prerelease="${VERSION#*-}" # e.g. "alpha.1" 或 "beta.2+exp"
prerelease="${prerelease%%+*}" # remove +buildmeta -> "alpha.1"
label="${prerelease%%.*}" # "alpha" 或 "beta" 或 "rc"
# 映射预发行 label 到 npm tag(根据需要调整映射)
case "$label" in
alpha) TAG="alpha" ;;
beta) TAG="beta" ;;
rc) TAG="beta" ;; # 将 rc 映射到 beta(如需 rc 标签改为 TAG="rc")
*) TAG="beta" ;; # 其他未知的预发行标识默认走 beta(可改为其它策略)
esac
else
TAG="latest"
fi
echo "Publishing $NAME@$VERSION with tag [$TAG]"
# 4. 执行针对性发布
# 使用 from-package 确保发布的是当前 package.json 里的版本
pnpm --filter "$NAME" publish --access public --tag "$TAG" --no-git-checks
done