Skip to content

Fix setup script compatibility #11

Fix setup script compatibility

Fix setup script compatibility #11

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
# Cache keys for better hit rates
RUST_CACHE_KEY: v1
PLAYWRIGHT_BROWSERS_PATH: ${{ github.workspace }}/.cache/ms-playwright
jobs:
# ─────────────────────────────────────────────────────────────
# Rust Checks (fast, single platform)
# ─────────────────────────────────────────────────────────────
rust-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- uses: Swatinem/rust-cache@v2
- name: Install Linux deps
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libsecret-1-dev
- name: Format check
run: cargo fmt --all --check
- name: Clippy
run: cargo clippy --workspace -- -D warnings
- name: Check (no features)
run: cargo check --workspace
# ─────────────────────────────────────────────────────────────
# TypeScript Checks (fast)
# ─────────────────────────────────────────────────────────────
ts-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
with:
version: 9
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- run: pnpm install --frozen-lockfile
- run: pnpm typecheck
- run: pnpm lint
- name: TypeScript tests
run: pnpm test:ts
# ─────────────────────────────────────────────────────────────
# Rust Tests (cross-platform matrix)
# ─────────────────────────────────────────────────────────────
rust-test:
needs: rust-check
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
- os: windows-latest
target: x86_64-pc-windows-msvc
- os: macos-latest
target: aarch64-apple-darwin
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.target }}
# Linux dependencies for Tauri
- name: Install Linux deps
if: matrix.os == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libsecret-1-dev
# Install cargo-nextest
- name: Install nextest
uses: taiki-e/install-action@nextest
# Run unit tests (fast, no external deps)
- name: Unit tests
run: cargo nextest run --workspace --lib --profile ci
# Run doc tests (nextest doesn't support)
- name: Doc tests
run: cargo test --workspace --doc
# Run integration tests
- name: Integration tests
run: cargo nextest run -p tests --profile ci
# ─────────────────────────────────────────────────────────────
# Build Verification (ensures app compiles on all platforms)
# ─────────────────────────────────────────────────────────────
build:
needs: [rust-check, ts-check]
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
- os: windows-latest
target: x86_64-pc-windows-msvc
- os: macos-latest
target: aarch64-apple-darwin
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.target }}-build
- uses: pnpm/action-setup@v4
with:
version: 9
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- name: Install Linux deps
if: matrix.os == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libsecret-1-dev
- run: pnpm install --frozen-lockfile
- run: pnpm build
env:
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
# ─────────────────────────────────────────────────────────────
# E2E Tests (Web-only Playwright for UI smoke tests)
# Skip with [skip e2e] in commit message for faster PR iteration
# ─────────────────────────────────────────────────────────────
e2e-web:
needs: [ts-check]
if: "!contains(github.event.head_commit.message, '[skip e2e]')"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
with:
version: 9
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- run: pnpm install --frozen-lockfile
# Cache Playwright browsers
- name: Cache Playwright browsers
uses: actions/cache@v4
id: playwright-cache
with:
path: ${{ env.PLAYWRIGHT_BROWSERS_PATH }}
key: playwright-${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }}
- name: Install Playwright browsers
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: pnpm exec playwright install --with-deps chromium
- name: Run web-only E2E tests
run: pnpm test:e2e:web --project=chromium
- name: Upload test results
uses: actions/upload-artifact@v4
if: failure()
with:
name: playwright-report
path: tests/e2e/reports/
retention-days: 7
# ─────────────────────────────────────────────────────────────
# E2E Tests (Full Tauri with WebDriver - Linux/Windows only)
# macOS not supported: no WKWebView driver
# Only runs on main branch or when [e2e] in commit message
# ─────────────────────────────────────────────────────────────
e2e-tauri:
needs: [build]
# Run on main, or when explicitly requested with [e2e] tag
if: github.ref == 'refs/heads/main' || contains(github.event.head_commit.message, '[e2e]')
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
- os: windows-latest
# macOS NOT supported - no WKWebView driver
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.os }}-e2e
- uses: pnpm/action-setup@v4
with:
version: 9
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- name: Install Linux deps
if: matrix.os == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libsecret-1-dev webkit2gtk-driver xvfb
# Cache tauri-driver binary
- name: Cache tauri-driver
uses: actions/cache@v4
id: tauri-driver-cache
with:
path: ~/.cargo/bin/tauri-driver*
key: tauri-driver-${{ runner.os }}-${{ hashFiles('**/Cargo.lock') }}
- name: Install tauri-driver
if: steps.tauri-driver-cache.outputs.cache-hit != 'true'
run: cargo install tauri-driver --locked
- run: pnpm install --frozen-lockfile
- name: Build app
run: pnpm build
env:
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
- name: Run Tauri E2E tests (Linux)
if: matrix.os == 'ubuntu-latest'
run: xvfb-run --auto-servernum pnpm test:e2e
- name: Run Tauri E2E tests (Windows)
if: matrix.os == 'windows-latest'
run: pnpm test:e2e