further optimization #41
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release Build | |
| on: | |
| push: | |
| branches: | |
| - main | |
| tags: | |
| - "v*" | |
| permissions: | |
| contents: write | |
| jobs: | |
| linux: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - system: x86_64-linux | |
| runner: ubuntu-latest | |
| arch_env: "" | |
| - system: aarch64-linux | |
| runner: ubuntu-24.04-arm | |
| arch_env: "arm_aarch64" | |
| runs-on: ${{ matrix.runner }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Nix | |
| uses: DeterminateSystems/determinate-nix-action@v3 | |
| # sccache caches Rust compilation and works inside Nix builds | |
| - name: Setup sccache | |
| uses: mozilla-actions/sccache-action@v0.0.6 | |
| - name: Setup swap space | |
| uses: actionhippie/swap-space@v1 | |
| with: | |
| size: 8G | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y \ | |
| libfuse2 libgtk-3-dev libwebkit2gtk-4.1-dev \ | |
| libayatana-appindicator3-dev librsvg2-dev patchelf \ | |
| xdg-utils libglib2.0-bin desktop-file-utils \ | |
| mold clang | |
| - name: Build binary | |
| env: | |
| # Enable sccache for Rust | |
| RUSTC_WRAPPER: sccache | |
| SCCACHE_GHA_ENABLED: "true" | |
| # Limit parallel jobs to reduce memory pressure | |
| CARGO_BUILD_JOBS: "1" | |
| # Reduce codegen units to lower memory usage | |
| CARGO_PROFILE_RELEASE_CODEGEN_UNITS: "1" | |
| # Use mold linker for faster linking | |
| RUSTFLAGS: "-C linker=clang -C link-arg=-fuse-ld=mold" | |
| # Disable incremental compilation for release (saves memory) | |
| CARGO_INCREMENTAL: "0" | |
| run: nix build .#packages.${{ matrix.system }}.korppi-bin --accept-flake-config | |
| - name: Upload binary | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: korppi-${{ matrix.system }} | |
| path: result/bin/* | |
| if-no-files-found: error | |
| # ───────────────────────────────────────────── | |
| # macOS (.dmg) | |
| # ───────────────────────────────────────────── | |
| macos: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - system: aarch64-darwin | |
| runner: macos-latest | |
| runs-on: ${{ matrix.runner }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Nix | |
| uses: DeterminateSystems/determinate-nix-action@v3 | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| workspaces: src-tauri | |
| cache-on-failure: true | |
| - name: Build .dmg | |
| run: | | |
| nix develop .# --impure --accept-flake-config -c \ | |
| bash -c "npm install && npm run tauri build" | |
| - name: Upload dmg | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: korppi-${{ matrix.system }}-dmg | |
| path: src-tauri/target/**/release/bundle/dmg/*.dmg | |
| if-no-files-found: error | |
| # ───────────────────────────────────────────── | |
| # Windows (.exe + .msi) | |
| # ───────────────────────────────────────────── | |
| windows: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - arch: x86_64 | |
| target: x86_64-pc-windows-msvc | |
| runner: windows-latest | |
| - arch: aarch64 | |
| target: aarch64-pc-windows-msvc | |
| runner: windows-latest | |
| runs-on: ${{ matrix.runner }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup Node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| - name: Setup Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: ${{ matrix.target }} | |
| - name: Install dependencies | |
| run: npm install | |
| - name: Build Windows binaries | |
| run: npm run tauri build -- --target ${{ matrix.target }} | |
| - name: Upload MSI | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: korppi-windows-${{ matrix.arch }}-msi | |
| path: src-tauri/target/**/release/bundle/msi/*.msi | |
| if-no-files-found: warn | |
| - name: Upload EXE | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: korppi-windows-${{ matrix.arch }}-exe | |
| path: src-tauri/target/**/release/bundle/nsis/*.exe | |
| if-no-files-found: warn | |
| # ───────────────────────────────────────────── | |
| # Release | |
| # ───────────────────────────────────────────── | |
| release: | |
| needs: [linux, macos, windows] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Download artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| - name: Create GitHub Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| draft: false | |
| generate_release_notes: true | |
| files: | | |
| artifacts/**/*.AppImage | |
| artifacts/**/*.dmg | |
| artifacts/**/*.exe | |
| artifacts/**/*.msi | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |