name: Build and Release on: push: branches: - main tags: - 'v*' pull_request: branches: - main env: CARGO_TERM_COLOR: always jobs: build-windows: name: Build Windows runs-on: windows-latest if: startsWith(github.ref, 'refs/tags/v') steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Bun uses: oven-sh/setup-bun@v2 with: bun-version: latest - name: Install dependencies run: bun install - name: Setup Rust uses: actions-rust-lang/setup-rust-toolchain@v1 with: toolchain: stable - name: Build Tauri app run: bun tauri build - name: Upload Windows artifacts uses: actions/upload-artifact@v4 with: name: windows-artifacts path: | src-tauri/target/release/bundle/msi/*.msi src-tauri/target/release/bundle/nsis/*.exe build-linux: name: Build Linux runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/v') steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Bun uses: oven-sh/setup-bun@v2 with: bun-version: latest - name: Install dependencies run: bun install - name: Setup Rust uses: actions-rust-lang/setup-rust-toolchain@v1 with: toolchain: stable - name: Install system dependencies run: | sudo apt-get update sudo apt-get install -y libwebkit2gtk-4.1-dev \ build-essential \ curl \ wget \ file \ libxdo-dev \ libssl-dev \ libayatana-appindicator3-dev \ librsvg2-dev - name: Build Tauri app run: bun tauri build - name: Upload Linux artifacts uses: actions/upload-artifact@v4 with: name: linux-artifacts path: | src-tauri/target/release/bundle/deb/*.deb src-tauri/target/release/bundle/appimage/*.AppImage build-macos: name: Build macOS runs-on: macos-latest if: startsWith(github.ref, 'refs/tags/v') steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Bun uses: oven-sh/setup-bun@v2 with: bun-version: latest - name: Install dependencies run: bun install - name: Setup Rust uses: actions-rust-lang/setup-rust-toolchain@v1 with: toolchain: stable target: aarch64-apple-darwin,x86_64-apple-darwin - name: Build Tauri app (Universal) run: bun tauri build --target universal-apple-darwin - name: Upload macOS artifacts uses: actions/upload-artifact@v4 with: name: macos-artifacts path: | src-tauri/target/universal-apple-darwin/release/bundle/dmg/*.dmg src-tauri/target/universal-apple-darwin/release/bundle/macos/*.app release: name: Create Release runs-on: ubuntu-latest needs: [build-windows, build-linux, build-macos] if: startsWith(github.ref, 'refs/tags/v') steps: - name: Checkout code uses: actions/checkout@v4 - name: Download all artifacts uses: actions/download-artifact@v4 with: path: artifacts - name: Get version from tag id: get_version run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT - name: Create Release uses: softprops/action-gh-release@v2 with: name: Release v${{ steps.get_version.outputs.VERSION }} body: | ## Downloads - **Windows**: `.msi` or `.exe` installer - **Linux**: `.deb` or `.AppImage` - **macOS**: `.dmg` or `.app` ## Installation Download the appropriate file for your platform and install it. files: | artifacts/windows-artifacts/**/* artifacts/linux-artifacts/**/* artifacts/macos-artifacts/**/* draft: false prerelease: false token: ${{ secrets.GITHUB_TOKEN }} dev-build: name: Development Build runs-on: windows-latest if: github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/') steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Bun uses: oven-sh/setup-bun@v2 with: bun-version: latest - name: Install dependencies run: bun install - name: Setup Rust uses: actions-rust-lang/setup-rust-toolchain@v1 with: toolchain: stable - name: Build Tauri app (debug) run: bun tauri build --debug - name: Upload dev build uses: actions/upload-artifact@v4 with: name: dev-build-windows path: src-tauri/target/debug/bundle/**/* retention-days: 7