Первый настоящий автоматический тест-суит проекта — раньше регрессии ловились руками. Покрыта чистая логика детекции и форматирования (без БД/Redis/GPU/Ollama): - worker-indexer: L1 Winnowing (точные совпадения, идемпотентность отпечатка, диапазон signed int64) и L2 MinHash LSH (шинглы, Jaccard, near-duplicate + upsert через in-memory-фолбэк). - worker-gpu: L3 FAISS — возврат doc_id из PostgreSQL (IndexIDMap2), идемпотентность add_vectors (remove-before-add, без дублей), self-match ≈ 1, ранжирование. Прямо стережёт баги, из-за которых индекс переписывался. - worker-gost: ГОСТ 7.1-2003 и 7.0.5-2008 — авторы (≤3 / 4+ «и др.»/et al.), статья/книга/web, DOI, порядок сортировки кириллица→латиница, стр. в ссылке. Обвязка: per-service pytest.ini/conftest/requirements-test. scripts/run_tests.sh гоняет тесты в изолированных python:3.11-slim контейнерах (не засоряя хост), через Tsinghua-зеркало. CI: job `test` теперь гейтит `deploy` (needs: test) — падение тестов блокирует прод-деплой. make test / make test-one SVC=... Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
60 lines
1.9 KiB
YAML
60 lines
1.9 KiB
YAML
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: Юнит-тесты (L1 winnowing, L2 minhash, L3 FAISS, ГОСТ) в контейнерах
|
||
run: |
|
||
set -euo pipefail
|
||
cd "$SRC"
|
||
bash scripts/run_tests.sh
|
||
|
||
- name: Убрать временный чекаут
|
||
if: always()
|
||
run: rm -rf "${SRC:-/tmp/none}"
|
||
|
||
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 }}
|
||
run: |
|
||
set -euo pipefail
|
||
cd "$SRC"
|
||
bash scripts/deploy.sh
|
||
|
||
- name: Убрать временный чекаут
|
||
if: always()
|
||
run: rm -rf "${SRC:-/tmp/none}"
|