name: '🏗️ Build and Test JellyTau' on: push: branches: - master paths-ignore: - '**/*.md' pull_request: branches: - master paths-ignore: - '**/*.md' workflow_dispatch: jobs: test: name: Run Tests # A release push triggers build-release.yml on the tag, which runs this exact # test suite itself — and on a single-slot runner the two ~1h workflows would # otherwise serialize/contend. Skip the duplicate for chore(release) commits. # (head_commit is absent on pull_request/workflow_dispatch; startsWith(null,…) # is false there, so those events still run.) if: "!startsWith(github.event.head_commit.message, 'chore(release)')" runs-on: linux/amd64 container: image: gitea.tourolle.paris/dtourolle/jellytau-builder:latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Cache Rust dependencies uses: actions/cache@v3 with: path: | ~/.cargo/registry ~/.cargo/git src-tauri/target key: ${{ runner.os }}-cargo-host-${{ hashFiles('**/Cargo.lock') }} restore-keys: | ${{ runner.os }}-cargo-host- - name: Cache Node dependencies uses: actions/cache@v3 with: path: | ~/.bun/install/cache node_modules key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lock') }} restore-keys: | ${{ runner.os }}-bun- - name: Install dependencies run: | bun install # Tripwire for domain-taxonomy leaks into the presentation layer (a # multi-type includeItemTypes query defining a category in the frontend). # See scripts/check-frontend-boundary.sh and # docs/specs/scoped-search-boundary.md. - name: Check frontend/backend boundary run: bash scripts/check-frontend-boundary.sh - name: Run frontend tests run: | bunx svelte-kit sync bun run test # CLAUDE.md has required `cargo fmt` + `cargo clippy` before every commit # for as long as the rule has existed, but nothing in CI checked either, # so the requirement rested entirely on memory. Both components are baked # into the builder image (Dockerfile.builder: `rustup component add # rustfmt clippy`) — nothing is installed at job time. - name: Check Rust formatting run: | cd src-tauri cargo fmt --all -- --check # ⚠️ Advisory for now — clippy warnings do NOT fail this job yet. # # The tree carries ~51 pre-existing warnings; adding `-D warnings` today # would paint CI red on unrelated work. A compile *error* still fails the # step, so this is not a no-op: it stops new breakage and surfaces the # backlog in every run. # # TODO: once the existing warnings are cleared, tighten this to # cargo clippy --all-targets -- -D warnings # Flip that flag — do not delete the step. Track progress with # `cd src-tauri && cargo clippy --all-targets 2>&1 | grep -c '^warning'`. - name: Run clippy (advisory) run: | cd src-tauri cargo clippy --all-targets - name: Run Rust tests run: | cd src-tauri cargo test cd .. # Fast per-commit Android compile check. This does NOT build a shippable APK: # the full signed release APK is built only on tag pushes by build-release.yml # (which runs sync-android-sources.sh + signing). Running the full bundle here # too would duplicate a ~15min build and, without the sync step, produced an # unsigned APK missing our custom sources/icons/proguard rules anyway. # `cargo check` for the Android target (~1min) catches Android-specific Rust # breakage without linking, bundling, or signing. android-check: name: Android Compile Check runs-on: linux/amd64 needs: test container: image: gitea.tourolle.paris/dtourolle/jellytau-builder:latest env: ANDROID_HOME: /opt/android-sdk ANDROID_SDK_ROOT: /opt/android-sdk NDK_HOME: /opt/android-sdk/ndk/27.0.11902837 ANDROID_NDK_HOME: /opt/android-sdk/ndk/27.0.11902837 steps: - name: Checkout repository uses: actions/checkout@v4 - name: Cache Rust dependencies uses: actions/cache@v3 with: path: | ~/.cargo/registry ~/.cargo/git src-tauri/target key: ${{ runner.os }}-cargo-android-${{ hashFiles('**/Cargo.lock') }} restore-keys: | ${{ runner.os }}-cargo-android- - name: Cache Node dependencies uses: actions/cache@v3 with: path: | ~/.bun/install/cache node_modules key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lock') }} restore-keys: | ${{ runner.os }}-bun- - name: Install dependencies run: bun install - name: Cargo check (aarch64-linux-android) run: | TC="$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin" export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="$TC/aarch64-linux-android24-clang" export CC_aarch64_linux_android="$TC/aarch64-linux-android24-clang" export AR_aarch64_linux_android="$TC/llvm-ar" cd src-tauri cargo check --target aarch64-linux-android --lib