chore: nothing #8
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |