ci: 添加云效流水线配置 (pipeline.yml)
- lint 阶段:pnpm 安装 + vue-tsc 类型检查 - build-linux 阶段:Tauri 系统依赖 + Rust 安装 + pnpm tauri build - 支持 TAURI_SIGNING_KEY 签名更新构件 - release 阶段(标签触发):生成更新 JSON 元数据
This commit is contained in:
+133
@@ -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
|
||||
Reference in New Issue
Block a user