CI / ruff · mypy · pytest (pull_request) Successful in 1m28s
Как в Vobot: PR и push в dev/main → джоб «ruff · mypy · pytest»; uv через pip (setup-uv на self-hosted Gitea не работает); миграции up/down/up на сервисе postgres:16 без маппинга портов. Refs #41 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
73 lines
2.4 KiB
YAML
73 lines
2.4 KiB
YAML
name: CI
|
||
|
||
# Гейт качества на каждый PR и push в dev/main — как в Vobot (.gitea/workflows/backend.yml).
|
||
# CD (.gitea/workflows/deploy.yml) тесты не гоняет: они прошли здесь, на PR.
|
||
on:
|
||
push:
|
||
branches: [dev, main]
|
||
pull_request:
|
||
branches: [dev, main]
|
||
|
||
concurrency:
|
||
group: ci-${{ github.ref }}
|
||
cancel-in-progress: true
|
||
|
||
jobs:
|
||
lint-and-test:
|
||
# Имя джоба — контекст статуса в PR; если включать branch protection, требовать именно его.
|
||
name: ruff · mypy · pytest
|
||
runs-on: ubuntu-latest
|
||
|
||
services:
|
||
postgres:
|
||
image: postgres:16-alpine
|
||
env:
|
||
POSTGRES_DB: tgit_test
|
||
POSTGRES_USER: tgit
|
||
POSTGRES_PASSWORD: tgit
|
||
options: >-
|
||
--health-cmd pg_isready
|
||
--health-interval 5s
|
||
--health-timeout 5s
|
||
--health-retries 10
|
||
# без маппинга портов: act_runner запускает job в контейнере, сервис доступен по имени `postgres`
|
||
# (опыт Vobot: маппинг 5432 на хост конфликтует с postgres самого Gitea)
|
||
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- name: Setup Python 3.12
|
||
uses: actions/setup-python@v5
|
||
with:
|
||
python-version: "3.12"
|
||
|
||
- name: Install uv
|
||
# pip, а не astral-sh/setup-uv: на self-hosted Gitea экшен ходит в GitHub API и падает (опыт Vobot)
|
||
run: pip install uv
|
||
|
||
- name: Install deps
|
||
run: uv sync --frozen
|
||
|
||
- name: Ruff
|
||
run: |
|
||
uv run ruff check .
|
||
uv run ruff format --check .
|
||
|
||
- name: Mypy
|
||
run: uv run mypy
|
||
|
||
- name: Migrations on PostgreSQL — up, down, up
|
||
# pytest гоняет схему на SQLite; здесь — настоящий Postgres: JSONB, BIGINT, CHECK, откат
|
||
env:
|
||
DATABASE_URL: postgresql+asyncpg://tgit:tgit@postgres:5432/tgit_test
|
||
run: |
|
||
uv run alembic upgrade head
|
||
uv run alembic downgrade base
|
||
uv run alembic upgrade head
|
||
|
||
- name: Pytest (+ порог покрытия из pyproject)
|
||
run: |
|
||
git config --global user.name ci
|
||
git config --global user.email ci@ci
|
||
uv run pytest -q --cov --cov-report=term
|