#!/bin/bash # Run all project checks — agents run this after significant changes set -e ERRORS=0 ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)" echo "=== Rust checks ===" if [ -f "$ROOT_DIR/src-tauri/Cargo.toml" ]; then cd "$ROOT_DIR/src-tauri" cargo fmt --check || { echo "FAIL: cargo fmt"; ERRORS=$((ERRORS+1)); } cargo clippy -- -D warnings || { echo "FAIL: cargo clippy"; ERRORS=$((ERRORS+1)); } cargo test || { echo "FAIL: cargo test"; ERRORS=$((ERRORS+1)); } else echo "SKIP: src-tauri not set up yet" fi echo "" echo "=== Python checks ===" if [ -f "$ROOT_DIR/python/pyproject.toml" ]; then cd "$ROOT_DIR/python" ruff check . || { echo "FAIL: ruff check"; ERRORS=$((ERRORS+1)); } ruff format --check . || { echo "FAIL: ruff format"; ERRORS=$((ERRORS+1)); } python -m pytest tests/ -v || { echo "FAIL: pytest"; ERRORS=$((ERRORS+1)); } else echo "SKIP: python not set up yet" fi echo "" echo "=== Frontend checks ===" if [ -f "$ROOT_DIR/package.json" ]; then cd "$ROOT_DIR" npm run check 2>/dev/null || { echo "FAIL: svelte-check"; ERRORS=$((ERRORS+1)); } npm run lint 2>/dev/null || { echo "FAIL: eslint"; ERRORS=$((ERRORS+1)); } npm run test -- --run 2>/dev/null || { echo "FAIL: vitest"; ERRORS=$((ERRORS+1)); } else echo "SKIP: frontend not set up yet" fi echo "" if [ $ERRORS -eq 0 ]; then echo "=== All checks passed ===" else echo "=== $ERRORS check(s) failed ===" exit 1 fi