-
Notifications
You must be signed in to change notification settings - Fork 4
231 lines (202 loc) · 9.04 KB
/
Copy pathnode.js.yml
File metadata and controls
231 lines (202 loc) · 9.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
# 此工作流会安装 Node 依赖、构建源码并自动打包 N8N 编辑器界面的中文语言包
# 详细信息请参考: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs
name: 打包编辑器界面语言包
on:
schedule:
- cron: "0 * * * *"
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
environment: test
permissions:
actions: write
contents: write
strategy:
matrix:
node-version: [22.x]
steps:
# 获取 N8N 最新的发布版本号
- name: 获取最新发布版本
id: latest_release
run: |
# 从 GitHub API 获取 releases 列表
LATEST_VERSION=$(curl -s https://api.github.com/repos/n8n-io/n8n/releases/latest | jq -r '.tag_name')
if [ "$LATEST_VERSION" = "null" ] || [ -z "$LATEST_VERSION" ]; then
echo "⚠️ No Prerelease version found!"
exit 1
fi
echo "✅ Latest Release tag: $LATEST_VERSION"
echo "latest=$LATEST_VERSION" >> $GITHUB_OUTPUT
# 配置包管理器 corepack 和 pnpm
- name: 配置包管理器
run: |
npm i -g corepack@0.31
corepack enable
# 检出本地中文化项目仓库
- name: 检出本地仓库
uses: actions/checkout@v4
with:
path: ./n8n-i18n-chinese
# - name: Read version from package.json
# id: get_version
# run: |
# VERSION=$(jq -r '.version' package.json)
# echo "Version: $VERSION"
# echo "version=$VERSION" >> $GITHUB_OUTPUT
# working-directory: /home/runner/work/n8n-i18n-chinese/n8n-i18n-chinese/n8n
# 检查远程仓库是否已存在该标签
- name: 检查标签是否存在
id: check_tag
run: |
TAG="${{ steps.latest_release.outputs.latest }}"
echo "检查远程标签: $TAG"
if git ls-remote --tags origin | grep "refs/tags/$TAG$"; then
echo "exists=true" >> $GITHUB_OUTPUT
else
echo "exists=false" >> $GITHUB_OUTPUT
fi
working-directory: /home/runner/work/n8n-i18n-chinese/n8n-i18n-chinese/n8n-i18n-chinese
# 如果标签已存在,则停止工作流
- name: 标签存在则退出
if: steps.check_tag.outputs.exists == 'true'
run: |
echo "标签已存在,停止工作流"
# 使用 AI 翻译新增的字符串到中文
- name: 翻译新增字符串
if: steps.check_tag.outputs.exists == 'false'
run: pnpm install --frozen-lockfile && pnpm run translate
working-directory: /home/runner/work/n8n-i18n-chinese/n8n-i18n-chinese/n8n-i18n-chinese/script
env:
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
OPENROUTER_MODEL: ${{ vars.OPENROUTER_MODEL }}
OPENROUTER_API_CONCURRENT: ${{ vars.OPENROUTER_API_CONCURRENT }}
# 提交翻译结果到 Git 仓库
- name: 提交翻译结果
if: steps.check_tag.outputs.exists == 'false'
run: |
git config --global user.name "github-actions"
git config --global user.email "github-actions@github.com"
git add languages/* script/en.json || true
# 如果没有变更就跳过
if git diff --cached --quiet; then
echo "No changes to commit."
else
git commit -m "chore: auto translate"
git push origin
fi
working-directory: /home/runner/work/n8n-i18n-chinese/n8n-i18n-chinese/n8n-i18n-chinese
# 检出 N8N 官方仓库的指定版本
- name: 检出 N8N 官方仓库
if: steps.check_tag.outputs.exists == 'false'
uses: actions/checkout@v4
with:
repository: n8n-io/n8n
ref: ${{ steps.latest_release.outputs.latest }}
path: ./n8n
# 设置 Node.js 环境
- name: 设置 Node.js 环境
uses: actions/setup-node@v4.2.0
if: steps.check_tag.outputs.exists == 'false'
with:
node-version: 22.x
# 配置 pnpm 使用最高版本解析模式
- name: 设置 pnpm 解析模式
if: steps.check_tag.outputs.exists == 'false'
run: echo "resolution-mode=highest" >> /home/runner/work/n8n-i18n-chinese/n8n-i18n-chinese/n8n/.npmrc
# 安装项目依赖
- name: 安装项目依赖
run: pnpm install --frozen-lockfile
if: steps.check_tag.outputs.exists == 'false'
working-directory: /home/runner/work/n8n-i18n-chinese/n8n-i18n-chinese/n8n
# 检测 N8N 编辑器目录结构(新版本在 frontend/editor-ui,旧版本在 editor-ui)
- name: 检测编辑器目录结构
id: editorui_dir
run: |
DIR_PATH="/home/runner/work/n8n-i18n-chinese/n8n-i18n-chinese/n8n/packages/frontend/editor-ui" # 新版目录路径
FALLBACK_DIR="/home/runner/work/n8n-i18n-chinese/n8n-i18n-chinese/n8n/packages/editor-ui" # 旧版目录路径
if [ -d "$DIR_PATH" ]; then
echo "flag=new" >> $GITHUB_OUTPUT
echo "dir=$DIR_PATH" >> $GITHUB_OUTPUT
else
echo "flag=old" >> $GITHUB_OUTPUT
echo "dir=$FALLBACK_DIR" >> $GITHUB_OUTPUT
fi
# 复制中文语言包到 N8N i18n 目录
- name: 复制中文语言包
if: steps.check_tag.outputs.exists == 'false'
run: cp -r /home/runner/work/n8n-i18n-chinese/n8n-i18n-chinese/n8n-i18n-chinese/languages/* "/home/runner/work/n8n-i18n-chinese/n8n-i18n-chinese/n8n/packages/frontend/@n8n/i18n/src/locales/"
# 应用中文国际化补丁
- name: 应用国际化补丁
if: steps.editorui_dir.outputs.flag == 'new' && steps.check_tag.outputs.exists == 'false'
run: |
git apply /home/runner/work/n8n-i18n-chinese/n8n-i18n-chinese/n8n-i18n-chinese/patches/feat__i18n_zhCn.patch
echo "==== /packages/frontend/@n8n/i18n/src/index.ts 内容 ===="
head -n 30 /home/runner/work/n8n-i18n-chinese/n8n-i18n-chinese/n8n/packages/frontend/@n8n/i18n/src/index.ts
working-directory: /home/runner/work/n8n-i18n-chinese/n8n-i18n-chinese/n8n
# 构建编辑器界面
- name: 构建编辑器界面
if: steps.check_tag.outputs.exists == 'false'
run: |
# 运行构建命令,如果失败则继续检测
pnpm run build:n8n || echo "构建失败,重新检测是否成功"
if [ -d "/home/runner/work/n8n-i18n-chinese/n8n-i18n-chinese/n8n/packages/frontend/editor-ui/dist" ]; then
echo "n8n-editor-ui:build 存在,构建成功"
else
echo "n8n-editor-ui:build 不存在,构建失败"
exit 1
fi
working-directory: /home/runner/work/n8n-i18n-chinese/n8n-i18n-chinese/n8n
# 压缩构建产物为 tar.gz 归档文件
- name: 打包构建产物
if: steps.check_tag.outputs.exists == 'false'
run: |
tar -czvf editor-ui.tar.gz dist
working-directory: ${{ steps.editorui_dir.outputs.dir }}
# 将构建产物拷贝到本地项目目录
- name: 拷贝构建产物
if: steps.check_tag.outputs.exists == 'false'
run: |
cp -r ${{ steps.editorui_dir.outputs.dir }}/dist /home/runner/work/n8n-i18n-chinese/n8n-i18n-chinese/n8n-i18n-chinese/editor-ui-dist
# 更新 docker-compose.yml 文件中的版本号
- name: 更新 Docker Compose 版本号
if: steps.check_tag.outputs.exists == 'false'
run: |
RAW_TAG="${{ steps.latest_release.outputs.latest }}"
VERSION="${RAW_TAG#n8n@}" # 去掉前缀 n8n@,提取版本号
echo "Replacing {version} with $VERSION in docker-compose.yml"
sed -i "s/{version}/$VERSION/g" /home/runner/work/n8n-i18n-chinese/n8n-i18n-chinese/n8n-i18n-chinese/docker-compose.yml
# 创建 Git 标签并推送到远程仓库
- name: 创建并推送标签
if: steps.check_tag.outputs.exists == 'false'
run: |
TAG="${{ steps.latest_release.outputs.latest }}"
git config --global user.name "github-actions"
git config --global user.email "github-actions@github.com"
git add editor-ui-dist
git add docker-compose.yml
git commit -m "chore: add built editor-ui dist for ${{ steps.latest_release.outputs.latest }}"
git tag $TAG
git push origin $TAG
working-directory: /home/runner/work/n8n-i18n-chinese/n8n-i18n-chinese/n8n-i18n-chinese
# 创建 GitHub Release 并上传构建产物
- name: 创建 GitHub Release
if: steps.check_tag.outputs.exists == 'false'
id: create_release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.latest_release.outputs.latest }}
name: 发布编辑器界面 ${{ steps.latest_release.outputs.latest }}
body: |
自动发布的 N8N 正式版本中文语言包
draft: false
prerelease: false
files: ${{ steps.editorui_dir.outputs.dir }}/editor-ui.tar.gz
env:
GITHUB_TOKEN: ${{ github.token }}
# 只有实际发布了新版本后,才触发 Docker 镜像发布
- name: 触发 Docker 镜像发布
if: steps.check_tag.outputs.exists == 'false'
run: gh workflow run image.yml --ref main -f tag="${{ steps.latest_release.outputs.latest }}"
env:
GH_TOKEN: ${{ github.token }}