name: CI on: push: branches: [main] pull_request: branches: [main] concurrency: group: ci-${{ github.ref }} cancel-in-progress: true jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - name: Set up Python uses: actions/setup-python@v6 with: python-version: "3.12" - name: Install uv uses: astral-sh/setup-uv@v8.0.0 - name: Install dependencies run: uv sync --extra dev --extra framework-comparison - name: Ruff check run: uv run ruff check src/ tests/ test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - name: Set up Python uses: actions/setup-python@v6 with: python-version: "3.12" - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable - name: Cargo cache uses: actions/cache@v5 with: path: | ~/.cargo/registry ~/.cargo/git rust/target key: rust-${{ runner.os }}-${{ hashFiles('rust/Cargo.lock') }} restore-keys: rust-${{ runner.os }}- - name: Install uv uses: astral-sh/setup-uv@v8.0.0 - name: Install dependencies run: uv sync --extra dev --extra framework-comparison - name: Build Rust extension run: uv run maturin develop --manifest-path rust/crates/openjarvis-python/Cargo.toml - name: Run tests run: | uv run pytest tests/ -v --tb=short -m "not live and not cloud" \ --cov=openjarvis \ --cov-report=term-missing \ --cov-report=xml \ --cov-fail-under=60 - name: Upload coverage report if: always() uses: actions/upload-artifact@v4 with: name: coverage-xml path: coverage.xml if-no-files-found: warn rust: runs-on: ubuntu-latest defaults: run: working-directory: rust steps: - uses: actions/checkout@v6 - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable with: components: clippy - name: Cargo cache uses: actions/cache@v5 with: path: | ~/.cargo/registry ~/.cargo/git rust/target key: rust-${{ runner.os }}-${{ hashFiles('rust/Cargo.lock') }} restore-keys: rust-${{ runner.os }}- - name: Clippy run: cargo clippy --workspace --all-targets -- -D warnings - name: Test run: cargo test --workspace