Files
grabber-ai/.gitea/workflows/docker.yml
T
DenozordecandClaude Sonnet 5.5 efc9a4f56a
docker / build (push) Failing after 39s
Docker-сервис, выбор основы и сравнение моделей, сборщик датасета
- Docker: Dockerfile (CPU), compose с FlareSolverr, настройка через DUB_* переменные,
  токен доступа к /predict, tools/pack_models.py, workflow Gitea Actions, docs/docker.md
- Модель грузится офлайн (config.json рядом с весами); общий код вынесен в src/spans.py,
  сервису не нужны sklearn/matplotlib/pandas
- Обучение: профили tiny2/base/large/modern, запуски в models/runs, реестр и честное
  сравнение на одной тестовой выборке (src/runs.py), пункт меню «Модели»
- Датасет: язык и аудио-параметры дорожек, 18+ по строкам «Аудио», ручные метки по ссылкам,
  переиндексация сохранённого HTML, параллельная сборка, сбалансированная выборка
- Тексты страниц (data/pages) больше не хранятся в git

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-28 17:19:10 +07:00

98 lines
4.2 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.
# Сборка и публикация Docker-образа DUB-AI в реестр контейнеров Gitea.
#
# Запускается: пуш в main/master, тег v*, вручную (workflow_dispatch).
# Нужно один раз настроить (подробно — docs/docker.md, раздел «CI/CD в Gitea»):
# * включить Actions в репозитории и зарегистрировать act_runner с доступом к Docker;
# * Secrets репозитория:
# REGISTRY_USER пользователь Gitea
# REGISTRY_TOKEN токен с правами write:package
# MODELS_URL (необязательно) ссылка на models-bundle.tar.gz; без неё образ собирается без моделей
# MODELS_TOKEN (необязательно) токен для скачивания по MODELS_URL
name: docker
on:
push:
branches: [main, master]
tags: ["v*"]
workflow_dispatch:
env:
IMAGE_NAME: dub-ai
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Проверка синтаксиса кода сервиса
run: |
python3 -m compileall -q src
python3 -c "import ast,sys; [ast.parse(open(f, encoding='utf-8').read()) for f in ('tools/pack_models.py',)]"
- name: Модели (docker-models/models)
env:
MODELS_URL: ${{ secrets.MODELS_URL }}
MODELS_TOKEN: ${{ secrets.MODELS_TOKEN }}
run: |
if [ -n "$MODELS_URL" ]; then
echo "скачиваю модели"
if [ -n "$MODELS_TOKEN" ]; then
curl -fsSL -H "Authorization: token $MODELS_TOKEN" "$MODELS_URL" -o models-bundle.tar.gz
else
curl -fsSL "$MODELS_URL" -o models-bundle.tar.gz
fi
tar -xzf models-bundle.tar.gz -C docker-models
test -f docker-models/models/best/model.pt
ls -la docker-models/models/best docker-models/models/segmenter
else
echo "MODELS_URL не задан: образ будет без моделей (их нужно смонтировать: -v ./models:/app/models:ro)"
fi
- name: Теги образа
id: meta
run: |
REGISTRY="${GITHUB_SERVER_URL#*://}" # хост Gitea без схемы
REPO="$(echo "${GITHUB_REPOSITORY}" | tr '[:upper:]' '[:lower:]')"
IMAGE="${REGISTRY}/${REPO}/${IMAGE_NAME}"
TAGS="${IMAGE}:sha-${GITHUB_SHA::8}"
if [ "${GITHUB_REF_TYPE}" = "tag" ]; then
TAGS="$TAGS ${IMAGE}:${GITHUB_REF_NAME}"
fi
case "${GITHUB_REF_NAME}" in main|master) TAGS="$TAGS ${IMAGE}:latest";; esac
echo "registry=${REGISTRY}" >> "$GITHUB_OUTPUT"
echo "tags=${TAGS}" >> "$GITHUB_OUTPUT"
echo "теги: ${TAGS}"
- name: Сборка
run: |
set -e
ARGS=""
for t in ${{ steps.meta.outputs.tags }}; do ARGS="$ARGS -t $t"; done
docker build $ARGS .
- name: Проверка образа (если модели внутри)
run: |
set -e
FIRST="$(echo '${{ steps.meta.outputs.tags }}' | cut -d' ' -f1)"
if [ ! -f docker-models/models/best/model.pt ]; then
echo "моделей в образе нет — запуск пропущен"; exit 0
fi
docker run -d --name dub-smoke "$FIRST"
for i in $(seq 1 60); do
if docker exec dub-smoke python -c "import urllib.request as u; print(u.urlopen('http://127.0.0.1:8000/health', timeout=4).read().decode())"; then
docker rm -f dub-smoke; exit 0
fi
sleep 5
done
docker logs dub-smoke; docker rm -f dub-smoke; exit 1
- name: Публикация в реестр Gitea
env:
REGISTRY_USER: ${{ secrets.REGISTRY_USER }}
REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }}
run: |
set -e
echo "$REGISTRY_TOKEN" | docker login "${{ steps.meta.outputs.registry }}" -u "$REGISTRY_USER" --password-stdin
for t in ${{ steps.meta.outputs.tags }}; do docker push "$t"; done