docs: merge PRD into canonical design and align docs (#258) #510
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: 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 |