ci: проверки бота в SourceCraft CI — ruff, mypy, pytest с порогом покрытия

push в любую ветку (зеркало из Gitea, ADR-010) → кубы lint и test параллельно.
Порог покрытия — храповик в pyproject (fail_under), одинаков локально и в CI.

Refs #6

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-13 23:39:05 +03:00
co-authored by Claude Opus 5.5
parent bbd4ac5bc1
commit 9e13da0189
2 changed files with 36 additions and 0 deletions
+33
View File
@@ -0,0 +1,33 @@
# CI бота. Код приходит push-зеркалом из Gitea (ADR-010): PR живут в Gitea, поэтому
# триггер pull_request здесь не сработает — проверяем каждый push в любую ветку.
# Деплой на хост (workflow deploy на push в main) — #12.
on:
push:
- workflows: [check]
filter:
branches: ["**"]
workflows:
check:
settings:
max_cube_duration: 10m
tasks:
- name: quality
cubes:
- name: lint
image: ghcr.io/astral-sh/uv:0.8-python3.12-bookworm-slim
env:
UV_LINK_MODE: copy
script:
- uv sync --frozen
- uv run ruff check .
- uv run ruff format --check .
- uv run mypy
- name: test
needs: ["-"]
image: ghcr.io/astral-sh/uv:0.8-python3.12-bookworm-slim
env:
UV_LINK_MODE: copy
script:
- uv sync --frozen
- uv run pytest -q --cov --cov-report=term
+3
View File
@@ -57,7 +57,10 @@ testpaths = ["tests"]
[tool.coverage.run]
source = ["app"]
branch = true
omit = ["app/__main__.py"]
[tool.coverage.report]
show_missing = true
skip_covered = true
# Ratchet: raise as code lands, never lower. Target by M4 — 70 (SPEC §5.2).
fail_under = 45