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