打包编辑器界面语言包 #1244
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
| # 此工作流会安装 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 | |
| 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 && node translate.js | |
| 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: ${{ secrets.GH_TOKEN }} |