# ClawPanel 发布构建工作流 # 推送 v* 标签时自动构建跨平台产物并创建 GitHub Release name: Release on: push: tags: - "v*" workflow_dispatch: inputs: tag_name: description: '发布版本号 (例如: v1.0.0)' required: true type: string default: 'v1.0.0' jobs: # ── 跨平台构建 job ───────────────────────────────────────────────────────── build: name: 构建 (${{ matrix.platform.name }}) runs-on: ${{ matrix.platform.os }} permissions: contents: write strategy: fail-fast: false matrix: platform: - name: macOS (Apple Silicon) os: macos-latest args: --target aarch64-apple-darwin rust_target: aarch64-apple-darwin - name: macOS (Intel) os: macos-latest args: --target x86_64-apple-darwin rust_target: x86_64-apple-darwin - name: Linux (x64) os: ubuntu-latest args: "" rust_target: "" - name: Windows (x64) os: windows-latest args: "" rust_target: "" steps: - name: 签出代码 uses: actions/checkout@v4 with: fetch-depth: 0 - name: 设置版本标签 id: vars shell: bash run: | if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then echo "TAG_NAME=${{ github.event.inputs.tag_name }}" >> "$GITHUB_ENV" else echo "TAG_NAME=${{ github.ref_name }}" >> "$GITHUB_ENV" fi - name: 安装 Node.js uses: actions/setup-node@v4 with: node-version: 22 cache: npm - name: 安装前端依赖 run: npm ci - name: 安装 Rust 工具链 uses: dtolnay/rust-toolchain@stable with: targets: ${{ matrix.platform.rust_target }} - name: Rust 编译缓存 uses: swatinem/rust-cache@v2 with: workspaces: src-tauri -> target key: ${{ matrix.platform.name }} - name: 安装 Linux 系统依赖 if: runner.os == 'Linux' run: | sudo apt-get update sudo apt-get install -y \ libwebkit2gtk-4.1-dev \ librsvg2-dev \ patchelf \ libssl-dev \ libgtk-3-dev \ libayatana-appindicator3-dev - name: 构建 Tauri 应用 uses: tauri-apps/tauri-action@v0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # macOS 代码签名(可选) # APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }} # APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} # APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }} # APPLE_ID: ${{ secrets.APPLE_ID }} # APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} # APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} # Windows 代码签名(可选) # TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }} # TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }} with: tagName: ${{ env.TAG_NAME }} releaseName: "ClawPanel ${{ env.TAG_NAME }}" releaseBody: "正在构建所有平台安装包,请稍候..." releaseDraft: false prerelease: false args: ${{ matrix.platform.args }} # ── 所有平台构建完成后,统一更新 Release Notes ───────────────────────────── # 独立 job 确保只执行一次,彻底避免多个 matrix job 的竞争条件 update-release-notes: name: 更新 Release Notes needs: build runs-on: ubuntu-latest if: always() && needs.build.result != 'cancelled' permissions: contents: write steps: - name: 签出代码 uses: actions/checkout@v4 with: fetch-depth: 0 - name: 设置版本标签 shell: bash run: | if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then echo "TAG_NAME=${{ github.event.inputs.tag_name }}" >> "$GITHUB_ENV" else echo "TAG_NAME=${{ github.ref_name }}" >> "$GITHUB_ENV" fi - name: 生成并更新 Release Notes shell: bash env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} BUILD_RESULT: ${{ needs.build.result }} run: | VERSION="${TAG_NAME#v}" PREV_TAG=$(git tag --sort=-v:refname | grep -E '^v' | sed -n '2p' || echo "") if [ -n "$PREV_TAG" ]; then CHANGELOG=$(git log "${PREV_TAG}..HEAD" --pretty=format:"- %s" --no-merges | head -30 || echo "") CHANGELOG_HEADER="自 ${PREV_TAG} 以来的变更" else CHANGELOG=$(git log --pretty=format:"- %s" --no-merges -20 || echo "") CHANGELOG_HEADER="主要变更" fi # 构建状态标记 if [ "$BUILD_RESULT" = "success" ]; then STATUS_BADGE="✅ 全部平台构建成功" else STATUS_BADGE="⚠️ 部分平台构建失败,请查看 [Actions 日志](https://github.com/${{ github.repository }}/actions)" fi cat > release_body.md << 'ENDOFBODY' PLACEHOLDER ENDOFBODY cat > release_body.md << ENDOFBODY ${STATUS_BADGE} ## 下载安装 根据你的操作系统选择对应安装包: ### macOS | 芯片 | 安装包 | |------|--------| | Apple Silicon (M1/M2/M3/M4) | \`ClawPanel_${VERSION}_aarch64.dmg\` | | Intel | \`ClawPanel_${VERSION}_x64.dmg\` | > 首次打开提示"无法验证开发者":前往**系统设置 → 隐私与安全性**,点击「仍要打开」。 ### Windows | 格式 | 安装包 | |------|--------| | EXE 安装器(推荐) | \`ClawPanel_${VERSION}_x64-setup.exe\` | | MSI 安装器 | \`ClawPanel_${VERSION}_x64_en-US.msi\` | ### Linux | 格式 | 安装包 | |------|--------| | AppImage(免安装) | \`ClawPanel_${VERSION}_amd64.AppImage\` | | DEB(Debian/Ubuntu) | \`ClawPanel_${VERSION}_amd64.deb\` | | RPM(Fedora/RHEL) | \`ClawPanel-${VERSION}-1.x86_64.rpm\` | --- ## ${CHANGELOG_HEADER} ${CHANGELOG} --- 完整日志见 [CHANGELOG.md](https://github.com/${{ github.repository }}/blob/main/CHANGELOG.md) ENDOFBODY gh release edit "$TAG_NAME" --notes-file release_body.md