# ============================================================================= # 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