name: Development Test on: workflow_dispatch: inputs: run_windows: description: "运行 Windows" required: false type: boolean default: true run_macos_aarch64: description: "运行 macOS aarch64" required: false type: boolean default: true run_windows_arm64: description: "运行 Windows ARM64" required: false type: boolean default: true run_linux_amd64: description: "运行 Linux amd64" required: false type: boolean default: true permissions: write-all env: TAG_NAME: deploytest TAG_CHANNEL: DeployTest CARGO_INCREMENTAL: 0 RUST_BACKTRACE: short HUSKY: 0 concurrency: group: "${{ github.workflow }} - ${{ github.head_ref || github.ref }}" cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} jobs: dev: strategy: fail-fast: false matrix: include: - os: windows-latest target: x86_64-pc-windows-msvc bundle: nsis id: windows input: run_windows - os: macos-latest target: aarch64-apple-darwin bundle: dmg id: macos-aarch64 input: run_macos_aarch64 - os: windows-latest target: aarch64-pc-windows-msvc bundle: nsis id: windows-arm64 input: run_windows_arm64 - os: ubuntu-22.04 target: x86_64-unknown-linux-gnu bundle: deb id: linux-amd64 input: run_linux_amd64 runs-on: ${{ matrix.os }} steps: - name: Skip job if not selected if: github.event.inputs[matrix.input] != 'true' run: echo "Job ${{ matrix.id }} skipped as requested" - name: Checkout Repository if: github.event.inputs[matrix.input] == 'true' uses: actions/checkout@v6 - name: Install Rust Stable if: github.event.inputs[matrix.input] == 'true' uses: dtolnay/rust-toolchain@1.91.0 - name: Rust Cache uses: Swatinem/rust-cache@v2 with: save-if: ${{ github.ref == 'refs/heads/dev' }} prefix-key: "v1-rust" key: "rust-shared-stable-${{ matrix.os }}-${{ matrix.target }}" workspaces: | . -> target cache-all-crates: true cache-workspace-crates: true - name: Install dependencies (ubuntu only) if: matrix.os == 'ubuntu-22.04' && github.event.inputs[matrix.input] == 'true' run: | sudo apt-get update sudo apt-get install -y libxslt1.1 libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf - uses: pnpm/action-setup@v4 name: Install pnpm if: github.event.inputs[matrix.input] == 'true' with: run_install: false - name: Install Node if: github.event.inputs[matrix.input] == 'true' uses: actions/setup-node@v6 with: node-version: "24.11.1" cache: "pnpm" - name: Pnpm Cache uses: actions/cache@v4 with: path: ~/.pnpm-store key: "pnpm-shared-stable-${{ matrix.os }}-${{ matrix.target }}" restore-keys: | pnpm-shared-stable-${{ matrix.os }}-${{ matrix.target }} lookup-only: true - name: Pnpm install and check if: github.event.inputs[matrix.input] == 'true' run: | pnpm i pnpm run prebuild ${{ matrix.target }} - name: Release ${{ env.TAG_CHANNEL }} Version if: github.event.inputs[matrix.input] == 'true' run: pnpm release-version ${{ env.TAG_NAME }} - name: Add Rust Target if: github.event.inputs[matrix.input] == 'true' run: | # Ensure cross target is installed for the pinned toolchain; fallback without explicit toolchain if needed rustup target add ${{ matrix.target }} --toolchain 1.91.0 || rustup target add ${{ matrix.target }} rustup target list --installed echo "Rust target ${{ matrix.target }} installed." - name: Tauri build if: github.event.inputs[matrix.input] == 'true' uses: tauri-apps/tauri-action@v0 env: NODE_OPTIONS: "--max_old_space_size=4096" GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} # 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 }} with: tauriScript: pnpm args: --target ${{ matrix.target }} -b ${{ matrix.bundle }} - name: Upload Artifacts (macOS) if: matrix.os == 'macos-latest' && github.event.inputs[matrix.input] == 'true' uses: actions/upload-artifact@v5 with: name: ${{ matrix.target }} path: target/${{ matrix.target }}/release/bundle/dmg/*.dmg if-no-files-found: error - name: Upload Artifacts (Windows) if: matrix.os == 'windows-latest' && github.event.inputs[matrix.input] == 'true' uses: actions/upload-artifact@v5 with: name: ${{ matrix.target }} path: target/${{ matrix.target }}/release/bundle/nsis/*.exe if-no-files-found: error - name: Upload Artifacts (Linux) if: matrix.os == 'ubuntu-22.04' && github.event.inputs[matrix.input] == 'true' uses: actions/upload-artifact@v5 with: name: ${{ matrix.target }} path: target/${{ matrix.target }}/release/bundle/deb/*.deb if-no-files-found: error