Skip to content

feat: surface unclassified income categories in settings (#224) #640

feat: surface unclassified income categories in settings (#224)

feat: surface unclassified income categories in settings (#224) #640

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
# Frontend: lint -> build (tsc -b) -> test, via the shared reusable workflow.
frontend:
uses: Sagargupta16/shared-workflows/.github/workflows/node-ci.yml@main
with:
working-directory: frontend
# Backend: real gating (ruff + mypy + pytest). The shared python-ci workflow
# swallows failures with `|| true`, so we run an inline job that actually
# fails the build on lint/type/test errors.
backend:
runs-on: ubuntu-latest
timeout-minutes: 15
defaults:
run:
working-directory: backend
env:
PYTHONPATH: src
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- name: Install uv
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
with:
python-version: "3.13"
enable-cache: true
- name: Install dependencies
# --group dev pulls ruff/mypy/pytest (declared in [dependency-groups],
# PEP 735) -- they are not extras, so --all-extras alone misses them.
run: uv sync --locked --no-build --no-install-project --all-extras --group dev
- name: Ruff lint
run: uv run --no-sync --locked --no-build ruff check src/ tests/
- name: Ruff format check
run: uv run --no-sync --locked --no-build ruff format --check src/ tests/
- name: Mypy
run: uv run --no-sync --locked --no-build mypy src/
- name: Pytest
run: uv run --no-sync --locked --no-build pytest tests/ -q
security:
uses: Sagargupta16/shared-workflows/.github/workflows/security-scan.yml@main
permissions:
contents: read
security-events: write