From 41929dc7c2a8d1111bef40b948bab7bc8fe0d47a Mon Sep 17 00:00:00 2001 From: Joe Allen <49467845+LiJoeAllen@users.noreply.github.com> Date: Thu, 20 Aug 2026 15:58:39 +0800 Subject: [PATCH] =?UTF-8?q?ci:=20=E6=B7=BB=E5=8A=A0=E4=BA=91=E6=95=88?= =?UTF-8?q?=E6=B5=81=E6=B0=B4=E7=BA=BF=E9=85=8D=E7=BD=AE=20(pipeline.yml)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - lint 阶段:pnpm 安装 + vue-tsc 类型检查 - build-linux 阶段:Tauri 系统依赖 + Rust 安装 + pnpm tauri build - 支持 TAURI_SIGNING_KEY 签名更新构件 - release 阶段(标签触发):生成更新 JSON 元数据 --- pipeline.yml | 133 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 pipeline.yml diff --git a/pipeline.yml b/pipeline.yml new file mode 100644 index 0000000..5f017b5 --- /dev/null +++ b/pipeline.yml @@ -0,0 +1,133 @@ +# ============================================================================= +# MQTTX — 云效流水线配置 (Alibaba Cloud Flow / Codeup) +# ============================================================================= +# 触发方式:推送 master 分支或创建标签时自动运行 +# 构建环境:云效默认 Linux 构建机 (Ubuntu) +# 产出产物:AppImage (Linux) + 更新签名 +# +# 前置准备 — 在云效流水线「变量」中设置: +# TAURI_SIGNING_KEY — Tauri 更新签名私钥 (base64 编码) +# TAURI_SIGNING_PASSWORD — 签名私钥密码 +# UPDATER_ENDPOINT — 更新服务器地址(可选,用于替换默认值) +# ============================================================================= + +stages: + # ── 阶段 1:代码检查与类型校验 ────────────────────────────────────── + lint: + jobs: + lint-job: + steps: + - checkout: {} + + - run: + name: 安装 pnpm + command: npm install -g pnpm + + - run: + name: 安装依赖 + command: pnpm install + + - run: + name: Vue 类型检查 + command: pnpm exec vue-tsc --noEmit + + # ── 阶段 2:Linux 构建 (AppImage) ────────────────────────────────── + build-linux: + needs: [lint] + jobs: + build-linux-job: + steps: + - checkout: {} + + # ---------- 系统依赖 ---------- + - run: + name: 安装 Tauri 系统依赖 + command: | + apt-get update -qq + apt-get install -y -qq \ + libwebkit2gtk-4.1-dev \ + libgtk-3-dev \ + libayatana-appindicator3-dev \ + librsvg2-dev \ + patchelf \ + libssl-dev \ + libsoup-3.0-dev \ + libjavascriptcoregtk-4.1-dev + + # ---------- Rust ---------- + - run: + name: 安装 Rust 工具链 + command: | + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ + | sh -s -- -y --default-toolchain stable + # 将 cargo 加入全局 PATH 供后续步骤使用 + echo "export PATH=\"$HOME/.cargo/bin:$PATH\"" >> ~/.bashrc + + # ---------- Node.js / pnpm ---------- + - run: + name: 安装 pnpm + command: npm install -g pnpm + + - run: + name: 安装前端依赖 + command: | + source ~/.bashrc + pnpm install + + # ---------- 构建 Tauri (Linux) ---------- + - run: + name: 构建 Tauri 桌面应用 + command: | + source ~/.bashrc + pnpm tauri build 2>&1 + + # ---------- 签名更新包 (可选) ---------- + - run: + name: 签名更新构件 + condition: + - exists: $TAURI_SIGNING_KEY + - exists: $TAURI_SIGNING_PASSWORD + command: | + source ~/.bashrc + BUNDLE_DIR="src-tauri/target/release/bundle" + APPIMAGE=$(ls "$BUNDLE_DIR/appimage/"*.AppImage 2>/dev/null | head -1) + if [ -n "$APPIMAGE" ]; then + echo "签名 AppImage: $APPIMAGE" + echo "$TAURI_SIGNING_KEY" | base64 -d > /tmp/signing.key + pnpm tauri signer sign \ + -k /tmp/signing.key \ + -p "$TAURI_SIGNING_PASSWORD" \ + "$APPIMAGE" + rm -f /tmp/signing.key + fi + + # ---------- 上传构建产物 ---------- + - artifacts: + name: Linux AppImage 安装包 + paths: + - src-tauri/target/release/bundle/appimage/*.AppImage + - src-tauri/target/release/bundle/appimage/*.AppImage.tar.gz + - src-tauri/target/release/bundle/appimage/*.sig + - src-tauri/target/release/bundle/appimage/*.sig.tar.gz + + # ── 阶段 3:发布 (仅标签触发) ────────────────────────────────────── + release: + needs: [build-linux] + condition: + - startsWith: .tag + jobs: + release-job: + steps: + - checkout: {} + + - run: + name: 生成更新 JSON + command: | + VERSION="${GIT_TAG#v}" + echo "{\"version\":\"$VERSION\",\"notes\":\"MQTTX $VERSION 发布\",\"pub_date\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\",\"platforms\":{}}" > update.json + echo "更新 JSON 已生成" + + - artifacts: + name: 更新元数据 + paths: + - update.json \ No newline at end of file