name: Deploy # Авто-деплой в прод при пуше в main. # Джоба выполняется на self-hosted runner'е в host-режиме прямо на app-хосте # 1.32 (label "deploy"), поэтому имеет доступ к его docker и сети до Proxmox. on: push: branches: [main] workflow_dispatch: {} concurrency: group: deploy-prod cancel-in-progress: false jobs: test: runs-on: deploy steps: - name: Клонировать репозиторий (depth 1 — для тестов история не нужна) run: | set -euo pipefail SRC="$(mktemp -d)" echo "SRC=$SRC" >> "$GITHUB_ENV" git clone --branch main --depth 1 \ https://gitea.jze9.ru/jze9/anti-plagiarism.git "$SRC" - name: Линт (ruff + mypy) — быстрый гейт, падаем раньше тестов run: | set -euo pipefail cd "$SRC" bash scripts/run_lint.sh - name: Юнит-тесты (L1 winnowing, L2 minhash, L3 FAISS, ГОСТ) в контейнерах run: | set -euo pipefail cd "$SRC" bash scripts/run_tests.sh - name: Убрать временный чекаут if: always() # Часть файлов (mypy/pytest кэш) создана внутри Docker-контейнеров от # root — обычный пользователь раннера не может их удалить. Это не # повод валить джобу: код уже проверен, чистка — best-effort. run: rm -rf "${SRC:-/tmp/none}" || true deploy: needs: test # деплой только если юнит-тесты прошли runs-on: deploy steps: - name: Клонировать репозиторий (полностью — нужен git-лог для diff) run: | set -euo pipefail SRC="$(mktemp -d)" echo "SRC=$SRC" >> "$GITHUB_ENV" git clone --branch main \ https://gitea.jze9.ru/jze9/anti-plagiarism.git "$SRC" - name: Деплой (бэкенд 1.32 + фронтенд CT 102) env: PVE_PASSWORD: ${{ secrets.PVE_PASSWORD }} INFISICAL_CLIENT_ID: ${{ secrets.INFISICAL_CLIENT_ID }} INFISICAL_CLIENT_SECRET: ${{ secrets.INFISICAL_CLIENT_SECRET }} run: | set -euo pipefail cd "$SRC" bash scripts/deploy.sh - name: Убрать временный чекаут if: always() # Часть файлов (mypy/pytest кэш) создана внутри Docker-контейнеров от # root — обычный пользователь раннера не может их удалить. Это не # повод валить джобу: код уже проверен, чистка — best-effort. run: rm -rf "${SRC:-/tmp/none}" || true