name: CI on: push: branches: [main] pull_request: branches: [main] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: python: name: Python (lint + test) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v4 with: enable-cache: true - name: Install dependencies run: uv sync - name: Ruff check run: uv run ruff check . - name: Deptry (unused dependencies) run: uv run deptry . - name: Tests run: | uv run pytest pipeline/utils/test_haversine.py uv run pytest pipeline/utils/test_poi_counts.py uv run pytest pipeline/transform/postcode_boundaries/test_postcode_boundaries.py frontend: name: Frontend (lint + typecheck) runs-on: ubuntu-latest defaults: run: working-directory: frontend steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 22 cache: npm cache-dependency-path: frontend/package-lock.json - name: Install dependencies run: npm ci - name: ESLint run: npm run lint - name: Prettier check run: npm run format:check - name: TypeScript typecheck run: npm run typecheck rust: name: Rust (lint + test) runs-on: ubuntu-latest defaults: run: working-directory: server-rs steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 with: workspaces: server-rs - name: Clippy run: cargo clippy -- -D warnings - name: Format check run: cargo fmt --check - name: Install cargo-machete run: cargo install cargo-machete - name: Unused dependencies check run: cargo machete - name: Tests run: cargo test