Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
153 changes: 153 additions & 0 deletions .github/workflows/build-desktop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
name: Build Desktop (Tauri)

on:
push:
branches: [main, develop]
paths:
- 'src-tauri/**'
- 'src/**'
- 'package.json'
- 'pnpm-lock.yaml'
pull_request:
branches: [main]
paths:
- 'src-tauri/**'
- 'src/**'
- 'package.json'
- 'pnpm-lock.yaml'
workflow_dispatch:

# Minimal permissions — only what's needed for CI builds
permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
CARGO_INCREMENTAL: 0
RUST_BACKTRACE: short
NODE_VERSION: '22'
PNPM_VERSION: '9'

jobs:
# Supply chain audit job — runs before builds
audit:
runs-on: ubuntu-22.04
name: Security Audit
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: ${{ env.PNPM_VERSION }}

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: npm audit (production)
run: pnpm audit --prod
continue-on-error: true

- name: Install Rust stable
uses: dtolnay/rust-toolchain@stable

- name: Install cargo-audit
run: cargo install cargo-audit

- name: Cargo audit
run: cd src-tauri && cargo audit
continue-on-error: true

build:
needs: audit
strategy:
fail-fast: false
matrix:
include:
- platform: macos-latest
target: aarch64-apple-darwin
label: macOS-arm64
- platform: macos-latest
target: x86_64-apple-darwin
label: macOS-x64
- platform: ubuntu-22.04
target: x86_64-unknown-linux-gnu
label: Linux-x64
- platform: windows-latest
target: x86_64-pc-windows-msvc
label: Windows-x64

runs-on: ${{ matrix.platform }}
name: Build (${{ matrix.label }})

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install Rust stable
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}

- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: src-tauri -> target

- name: Install Linux dependencies
if: matrix.platform == 'ubuntu-22.04'
run: |
sudo apt-get update
sudo apt-get install -y \
libwebkit2gtk-4.1-dev \
libappindicator3-dev \
librsvg2-dev \
patchelf \
libssl-dev \
libgtk-3-dev \
libayatana-appindicator3-dev

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: ${{ env.PNPM_VERSION }}

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Build Tauri app (unsigned CI)
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Disable code signing for CI builds
CSC_IDENTITY_AUTO_DISCOVERY: 'false'
with:
args: --target ${{ matrix.target }}

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: desktop-${{ matrix.label }}
path: |
src-tauri/target/${{ matrix.target }}/release/bundle/**/*.dmg
src-tauri/target/${{ matrix.target }}/release/bundle/**/*.app.tar.gz
src-tauri/target/${{ matrix.target }}/release/bundle/**/*.deb
src-tauri/target/${{ matrix.target }}/release/bundle/**/*.AppImage
src-tauri/target/${{ matrix.target }}/release/bundle/**/*.msi
src-tauri/target/${{ matrix.target }}/release/bundle/**/*.exe
src-tauri/target/${{ matrix.target }}/release/bundle/**/*.nsis.zip
retention-days: 7
150 changes: 150 additions & 0 deletions .github/workflows/build-mobile.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
name: Build Mobile (Tauri)

on:
push:
branches: [main, develop]
paths:
- 'src-tauri/**'
- 'src/**'
- 'package.json'
- 'pnpm-lock.yaml'
pull_request:
branches: [main]
paths:
- 'src-tauri/**'
- 'src/**'
- 'package.json'
- 'pnpm-lock.yaml'
workflow_dispatch:

# Minimal permissions for CI builds
permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
CARGO_INCREMENTAL: 0
RUST_BACKTRACE: short
NODE_VERSION: '22'
PNPM_VERSION: '9'

jobs:
android:
runs-on: ubuntu-22.04
name: Build Android (APK)

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install Rust stable
uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-linux-android,armv7-linux-androideabi,x86_64-linux-android,i686-linux-android

- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: src-tauri -> target

- name: Install Linux dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
libwebkit2gtk-4.1-dev \
libappindicator3-dev \
librsvg2-dev \
patchelf \
libssl-dev \
libgtk-3-dev

- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17

- name: Setup Android SDK
uses: android-actions/setup-android@v3

- name: Install Android NDK
run: sdkmanager "ndk;27.0.12077973"

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: ${{ env.PNPM_VERSION }}

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Initialize Android project
run: pnpm tauri android init

- name: Build Android APK (debug)
env:
NDK_HOME: ${{ env.ANDROID_HOME }}/ndk/27.0.12077973
run: pnpm tauri android build --debug

- name: Upload Android APK
uses: actions/upload-artifact@v4
with:
name: android-debug-apk
path: |
src-tauri/gen/android/app/build/outputs/apk/**/*.apk
retention-days: 7

ios:
runs-on: macos-latest
name: Build iOS (unsigned)

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install Rust stable
uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-apple-ios,aarch64-apple-ios-sim,x86_64-apple-ios

- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: src-tauri -> target

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: ${{ env.PNPM_VERSION }}

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Initialize iOS project
run: pnpm tauri ios init

- name: Build iOS (debug, simulator)
run: pnpm tauri ios build --debug
continue-on-error: true

- name: Upload iOS build
uses: actions/upload-artifact@v4
if: success()
with:
name: ios-debug-build
path: |
src-tauri/gen/apple/build/**/*.app
retention-days: 7
Loading
Loading