From 12b2ca22a56d8ea0b95ad764154723fe94955c8d Mon Sep 17 00:00:00 2001 From: Lacky1234union Date: Fri, 16 Oct 2026 00:13:47 +0300 Subject: [PATCH] =?UTF-8?q?ci:=20CI=20=D0=B1=D0=BE=D1=82=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B0=20Gitea=20Actions=20=E2=80=94=20ruff,=20mypy,=20=D0=BC?= =?UTF-8?q?=D0=B8=D0=B3=D1=80=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BD=D0=B0=20Pos?= =?UTF-8?q?tgres,=20pytest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Как в 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 --- .gitea/workflows/ci.yml | 72 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 .gitea/workflows/ci.yml diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml new file mode 100644 index 0000000..9c8db56 --- /dev/null +++ b/.gitea/workflows/ci.yml @@ -0,0 +1,72 @@ +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