Skip to content

chore: placeholder test so pytest does not exit 5 on empty scaffold (… #17

chore: placeholder test so pytest does not exit 5 on empty scaffold (…

chore: placeholder test so pytest does not exit 5 on empty scaffold (… #17

Workflow file for this run

name: CI
# Action SHAs are pinned, not floating tags. To bump:
# gh api repos/<owner>/<repo>/commits/<tag> --jq .sha
# (use /commits/<tag>, NOT /git/refs/tags/<tag> — annotated tags would
# return the tag-object SHA, which Actions can't resolve.)
# Update the comment on the right with the new tag for traceability.
on:
push:
branches: [develop, main]
pull_request:
branches: [develop, main]
jobs:
lint:
name: Lint & Format
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with:
python-version: "3.14"
- run: uv sync --frozen --extra dev
- run: uv run ruff check .
- run: uv run ruff format --check .
typecheck:
name: Type Check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with:
python-version: "3.14"
- run: uv sync --frozen --extra dev
- run: uv run mypy --strict src/ tests/
test-unit:
name: Unit tests
runs-on: ubuntu-latest
# Pure in-process tests — completes fast so PR authors get quick feedback.
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with:
python-version: "3.14"
- run: uv sync --frozen --extra dev
- run: uv run pytest tests/ -v -m "not integration" -o "addopts="
coverage:
name: Coverage
runs-on: ubuntu-latest
# Runs the suite with coverage. Until ticket #17 lands real source under
# src/, the template has no measurable coverage; pyproject.toml's
# [tool.coverage.report].fail_under stays at 75 (the eventual target),
# while CI uses --cov-fail-under=0 so the empty scaffold doesn't fail.
# When #17 + #18 ship real source + tests, drop the override here.
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with:
python-version: "3.14"
- run: uv sync --frozen --extra dev
- run: uv run pytest tests/ --cov=src --cov-report=term-missing --cov-fail-under=0
architecture:
name: Architecture (import-linter)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with:
python-version: "3.14"
- run: uv sync --frozen --extra dev
- run: uv run lint-imports
pre-commit:
name: Pre-commit
runs-on: ubuntu-latest
# Runs every hook against all files — ensures a developer who forgot
# `uv run pre-commit install` can't leak unformatted code or a stray
# secret past the first defence layer.
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with:
python-version: "3.14"
- run: uv sync --frozen --extra dev
- run: uv run pre-commit run --all-files --show-diff-on-failure
# Frontend jobs (Frontend Build, Frontend Quality) are added by ticket #21
# when frontend/package.json lands; keeping them out of this file avoids the
# workflow-startup failure observed when `if: hashFiles(...)` guards a job
# whose `cache-dependency-path` references a not-yet-existing file.