Files
anti-plagiarism/.gitea/workflows/deploy.yml
jze9 251be1d77b
All checks were successful
Deploy / test (push) Successful in 2m33s
Deploy / deploy (push) Successful in 15m1s
fix(ci): не валить джобу на неудачной уборке временного чекаута
Найден реальный root cause, почему ни один деплой не проходил с 11 августа:
джоба test честно проходила линт (ruff+mypy) и все 112 тестов ("All checks
passed!", "Все юнит-тесты прошли"), но затем падала на шаге уборки — rm -rf
временной директории не мог удалить mypy/pytest-кэш, созданный ВНУТРИ Docker-
контейнеров от root (docker run без --user). Обычный пользователь раннера не
может удалить root-owned файлы → rm возвращает ненулевой код → джоба падает →
deploy пропускается (needs: test) — при том что код был полностью исправен.

Починено: rm -rf ... || true в обоих шагах уборки (test и deploy). Чистка
временной папки — best-effort, не критерий готовности кода.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-24 17:07:46 +05:00

72 lines
2.8 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 }}
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