test: юнит-суит L1/L2/L3 + ГОСТ (41 тест) и гейт в CI перед деплоем
Первый настоящий автоматический тест-суит проекта — раньше регрессии ловились руками. Покрыта чистая логика детекции и форматирования (без БД/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>
This commit is contained in:
@@ -13,7 +13,29 @@ concurrency:
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user