Skip to content

Commit b02298e

Browse files
committed
chore: 更新 GitHub Actions 工作流以支持 pnpm,增加依赖安装和构建步骤,并添加 pnpm 锁文件
1 parent 3efa808 commit b02298e

File tree

2 files changed

+4097
-44
lines changed

2 files changed

+4097
-44
lines changed
Lines changed: 57 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,81 +1,94 @@
1-
# 工作流名称:将 n8n-nodes-mineru 包发布到 npm(当推送到 main 分支时)
21
name: Publish n8n-nodes-mineru to npm (on main)
32

4-
# 触发条件:当推送到 main 分支且指定路径下的文件发生变化时
53
on:
64
push:
7-
branches: [ main ] # 仅在 main 分支触发
5+
branches: [ main ]
86
paths:
9-
- 'n8n-nodes-mineru/**' # n8n-nodes-mineru 目录下的任何文件变化
10-
- '.github/workflows/publish-n8n-nodes-mineru.yml' # 工作流文件本身的变化
7+
- 'n8n-nodes-mineru/**'
8+
- '.github/workflows/publish-n8n-nodes-mineru.yml'
119

12-
# 权限设置:读取仓库内容和写入 ID 令牌(用于 OIDC 认证)
1310
permissions:
14-
contents: read # 读取仓库内容的权限
15-
id-token: write # 写入 ID 令牌的权限(用于 npm 发布的 OIDC 认证)
11+
contents: read
12+
id-token: write # OIDC for npm --provenance
1613

17-
# 并发控制:确保同一分支的发布任务不会并发执行
1814
concurrency:
19-
group: publish-n8n-nodes-mineru-${{ github.ref }} # 使用分支引用作为并发组标识
20-
cancel-in-progress: true # 如果有新的任务,取消正在进行的任务
15+
group: publish-n8n-nodes-mineru-${{ github.ref }}
16+
cancel-in-progress: true
2117

22-
# 任务定义
2318
jobs:
24-
release: # 发布任务
25-
runs-on: ubuntu-latest # 运行环境:最新版 Ubuntu
26-
timeout-minutes: 15 # 任务超时时间:15分钟
19+
release:
20+
runs-on: ubuntu-latest
21+
timeout-minutes: 20
2722
defaults:
2823
run:
29-
working-directory: n8n-nodes-mineru # 默认工作目录设置为 n8n-nodes-mineru
24+
working-directory: n8n-nodes-mineru
3025

3126
steps:
32-
# 步骤1:检出代码
3327
- name: Checkout
34-
uses: actions/checkout@v4 # 使用官方检出动作的 v4 版本
28+
uses: actions/checkout@v4
3529

36-
# 步骤2:设置 Node.js 环境
37-
- name: Setup Node
38-
uses: actions/setup-node@v4 # 使用官方 Node.js 设置动作的 v4 版本
30+
- name: Setup Node & Corepack
31+
uses: actions/setup-node@v4
3932
with:
40-
node-version: 20 # 使用 Node.js 20 版本
41-
registry-url: 'https://registry.npmjs.org' # 设置 npm 注册表 URL
33+
node-version: 20
34+
registry-url: 'https://registry.npmjs.org'
35+
- run: corepack enable
4236

43-
# 步骤3:安装依赖
44-
- name: Install deps
45-
run: npm ci || npm i # 优先使用 npm ci(更快、更可靠),失败时回退到 npm i
37+
- name: Setup pnpm
38+
uses: pnpm/action-setup@v4
39+
with:
40+
version: 9
41+
42+
# 缓存 pnpm store(基于子包 lockfile)
43+
- name: Cache pnpm store
44+
uses: actions/cache@v4
45+
with:
46+
path: ~/.pnpm-store
47+
key: ${{ runner.os }}-pnpm-${{ hashFiles('n8n-nodes-mineru/pnpm-lock.yaml') }}
48+
restore-keys: |
49+
${{ runner.os }}-pnpm-
50+
51+
# 如果有 pnpm-lock.yaml,用严格模式;否则首次允许生成锁文件
52+
- name: Install deps (pnpm)
53+
run: |
54+
if [ -f pnpm-lock.yaml ]; then
55+
pnpm install --frozen-lockfile
56+
else
57+
echo "No pnpm-lock.yaml found, installing without frozen lockfile..."
58+
pnpm install --no-frozen-lockfile
59+
fi
4660
47-
# 步骤4:构建项目(健全性检查)
4861
- name: Build (sanity)
49-
run: npm run build --if-present # 如果存在 build 脚本则执行构建
62+
run: pnpm run build --if-present
63+
64+
# 可选:提前暴露打包/忽略问题(不真正发布)
65+
- name: Dry-run pack
66+
run: |
67+
pnpm pack --dry-run || true
68+
npm publish --dry-run || true
5069
51-
# 步骤5:检查是否需要发布
5270
- name: Check if publish needed
53-
id: need # 设置步骤 ID,供后续步骤引用
71+
id: need
5472
run: |
55-
# 从 package.json 中获取包名和版本
5673
PKG_NAME=$(node -p "require('./package.json').name")
5774
PKG_VER=$(node -p "require('./package.json').version")
5875
echo "package=$PKG_NAME version=$PKG_VER"
59-
60-
# 获取 npm 上已发布的最新版本(如果不存在则为空)
6176
PUBLISHED_VER=$(npm view "$PKG_NAME@latest" version || true)
6277
echo "published=$PUBLISHED_VER"
63-
64-
# 比较版本,决定是否需要发布
6578
if [ "$PKG_VER" = "$PUBLISHED_VER" ]; then
66-
echo "should_publish=false" >> $GITHUB_OUTPUT # 版本相同,不需要发布
79+
echo "should_publish=false" >> $GITHUB_OUTPUT
6780
else
68-
echo "should_publish=true" >> $GITHUB_OUTPUT # 版本不同,需要发布
81+
echo "should_publish=true" >> $GITHUB_OUTPUT
6982
fi
7083
71-
# 步骤6:发布到 npm(使用 OIDC 认证和来源证明
84+
# npm 发布以启用 provenance(与 pnpm 安装不冲突
7285
- name: Publish with provenance (OIDC)
73-
if: steps.need.outputs.should_publish == 'true' # 仅在需要发布时执行
86+
if: steps.need.outputs.should_publish == 'true'
7487
env:
75-
NPM_CONFIG_PROVENANCE: true # 启用来源证明配置
76-
run: npm publish --provenance --access public # 发布包,启用来源证明,设置为公开访问
88+
NPM_CONFIG_PROVENANCE: true
89+
NPM_CONFIG_LOGLEVEL: verbose
90+
run: npm publish --provenance --access public
7791

78-
# 步骤7:跳过发布(版本未变化)
7992
- name: Skip (version unchanged)
80-
if: steps.need.outputs.should_publish != 'true' # 仅在不需要发布时执行
81-
run: echo "Version already on npm, skip." # 输出跳过信息
93+
if: steps.need.outputs.should_publish != 'true'
94+
run: echo "Version already on npm, skip."

0 commit comments

Comments
 (0)