Skip to content

further optimization #41

further optimization

further optimization #41

Workflow file for this run

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 }}