Skip to content

docs: merge PRD into canonical design and align docs (#258) #510

docs: merge PRD into canonical design and align docs (#258)

docs: merge PRD into canonical design and align docs (#258) #510

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
types: [opened, synchronize]
env:
CI: 1
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
# ============================================
# Change Detection
# ============================================
changes:
name: Detect Changes
runs-on: 'ubuntu-latest'
outputs:
rust: ${{ steps.filter.outputs.rust }}
frontend: ${{ steps.filter.outputs.frontend }}
mobile: ${{ steps.filter.outputs.mobile }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: dorny/paths-filter@v3
id: filter
with:
token: ''
filters: |
rust:
- 'Cargo.toml'
- 'Cargo.lock'
- '**/*.rs'
- '.rustfmt.toml'
- 'rust-toolchain'
- '.github/workflows/CI.yml'
frontend:
- 'apps/**'
- 'packages/**'
- 'pnpm-lock.yaml'
- 'package.json'
- 'turbo.json'
mobile:
- 'Cargo.toml'
- 'Cargo.lock'
- '**/*.rs'
- '.github/workflows/CI.yml'
# ============================================
# Rust Jobs
# ============================================
rust-fmt:
name: Rust Format
runs-on: 'ubuntu-latest'
needs: changes
if: needs.changes.outputs.rust == 'true'
steps:
- uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
- run: |
rustup component add rustfmt
- name: Check formatting
run: cargo fmt --all -- --check
rust-clippy:
name: Rust Clippy
runs-on: 'ubuntu-latest'
needs: changes
if: needs.changes.outputs.rust == 'true'
steps:
- uses: actions/checkout@v4
- name: Install Tauri dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
libwebkit2gtk-4.1-dev \
libappindicator3-dev \
librsvg2-dev \
patchelf
- name: Create frontend dist placeholder
run: mkdir -p apps/tauri-app/dist && echo "<html></html>" > apps/tauri-app/dist/index.html
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
- run: |
rustup component add clippy
- name: Cache cargo
if: ${{ runner.environment != 'self-hosted' }}
uses: Swatinem/rust-cache@v2
- name: Run Clippy
run: cargo clippy --all-targets --all-features -- -D warnings
rust-test:
name: Rust Test
runs-on: 'ubuntu-latest'
needs: changes
if: needs.changes.outputs.rust == 'true'
steps:
- uses: actions/checkout@v4
- name: Install Tauri dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
libwebkit2gtk-4.1-dev \
libappindicator3-dev \
librsvg2-dev \
patchelf
- name: Create frontend dist placeholder
run: mkdir -p apps/tauri-app/dist && echo "<html></html>" > apps/tauri-app/dist/index.html
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo
if: ${{ runner.environment != 'self-hosted' }}
uses: Swatinem/rust-cache@v2
- name: Run tests
run: cargo test --all-features
# ============================================
# Frontend Jobs
# ============================================
frontend-typecheck:
name: Frontend TypeCheck
runs-on: 'ubuntu-latest'
steps:
- uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "pnpm"
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: TypeScript check (tauri-app)
run: pnpm --filter tauri-app exec tsc --noEmit
frontend-lint:
name: Frontend Lint
runs-on: 'ubuntu-latest'
steps:
- uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "pnpm"
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Lint
run: pnpm lint
frontend-build:
name: Frontend Build
runs-on: 'ubuntu-latest'
steps:
- uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "pnpm"
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Configure environment variables
run: |
pnpm i -g vercel
pnpm run --parallel prepare:app
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
- name: Build
run: pnpm build
# ============================================
# Mobile Build Jobs
# ============================================
# android-build:
# name: Android Build
# runs-on: 'ubuntu-latest'
# needs: changes
# if: needs.changes.outputs.mobile == 'true'
# env:
# # tauri needs CI to be true to build
# CI: 'true'
# steps:
# - uses: actions/checkout@v4
# - 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: Setup Android NDK
# run: |
# sdkmanager --install "ndk;27.0.12077973"
# echo "NDK_HOME=$ANDROID_HOME/ndk/27.0.12077973" >> $GITHUB_ENV
# - name: Setup pnpm
# uses: pnpm/action-setup@v4
# - name: Setup Node.js
# uses: actions/setup-node@v4
# with:
# node-version: "20"
# cache: "pnpm"
# - name: Setup Rust
# uses: dtolnay/rust-toolchain@stable
# with:
# targets: aarch64-linux-android,armv7-linux-androideabi,i686-linux-android,x86_64-linux-android
# - name: Cache cargo
# if: ${{ runner.environment != 'self-hosted' }}
# uses: Swatinem/rust-cache@v2
# - name: Install dependencies
# run: pnpm install --frozen-lockfile
# - name: Configure environment variables
# run: |
# pnpm i -g vercel
# pnpm run --parallel prepare:app
# env:
# VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
# - name: Build Android
# run: pnpm --filter tauri-app exec tauri android build --target aarch64
# env:
# NDK_HOME: ${{ env.NDK_HOME }}
ios-build:
name: iOS Build
runs-on: 'macos-latest'
needs: changes
if: needs.changes.outputs.mobile == 'true'
env:
# tauri needs CI to be true to build
CI: 'true'
steps:
- uses: actions/checkout@v4
- name: Setup Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '16.2'
- name: Install iOS Simulator runtime
run: |
xcrun simctl list > /dev/null # Required to prevent the next command from sometimes not working
xcodebuild -downloadPlatform iOS
xcrun simctl list runtimes
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "pnpm"
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-apple-ios,aarch64-apple-ios-sim
- name: Cache cargo
if: ${{ runner.environment != 'self-hosted' }}
uses: Swatinem/rust-cache@v2
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Configure environment variables
run: |
pnpm i -g vercel
pnpm run --parallel prepare:app
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
- name: Build iOS (Simulator)
run: pnpm --filter tauri-app exec tauri ios build --target aarch64-sim
# # ============================================
# # Full Build (Tauri)
# # ============================================
# tauri-build:
# name: Tauri Build
# strategy:
# fail-fast: false
# matrix:
# include:
# - platform: ubuntu-latest
# target: x86_64-unknown-linux-gnu
# - platform: macos-latest
# target: aarch64-apple-darwin
# - platform: windows-latest
# target: x86_64-pc-windows-msvc
# runs-on: ${{ matrix.platform }}
# steps:
# - uses: actions/checkout@v4
# - name: Install Tauri dependencies (Linux)
# if: matrix.platform == 'ubuntu-latest'
# run: |
# sudo apt-get update
# sudo apt-get install -y \
# libwebkit2gtk-4.1-dev \
# libappindicator3-dev \
# librsvg2-dev \
# patchelf
# - name: Setup pnpm
# uses: pnpm/action-setup@v4
# - name: Setup Node.js
# uses: actions/setup-node@v4
# with:
# node-version: "20"
# cache: "pnpm"
# - name: Setup Rust
# uses: dtolnay/rust-toolchain@stable
# with:
# targets: ${{ matrix.target }}
# - name: Cache cargo
# uses: Swatinem/rust-cache@v2
# - name: Install dependencies
# run: pnpm install --frozen-lockfile
# - name: Build Tauri app
# run: pnpm tauri build --target ${{ matrix.target }}
# env:
# TAURI_SIGNING_PRIVATE_KEY: ""
# TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ""
# ============================================
# CI Done - Required Check
# ============================================
# Set this job as a required status check in GitHub settings
# to easily enforce all CI jobs pass before merging
ci-done:
name: CI Done
runs-on: 'ubuntu-latest'
if: always()
needs:
- changes
- rust-fmt
- rust-clippy
- rust-test
- frontend-typecheck
- frontend-lint
- frontend-build
# - android-build
- ios-build
# - tauri-build
steps:
- name: Check all jobs passed
if: ${{ !contains(needs.*.result, 'failure') }}
run: echo "All CI jobs passed!"
- name: Some jobs failed
if: ${{ contains(needs.*.result, 'failure') }}
run: |
echo "One or more jobs failed"
exit 1