Gitea Actions
В репозитории включён workflow workflows/ci.yaml.
Job changes вычисляет два флага:
openapi— в диффе естьdocs/openapi.yamlилиredocly.yaml→ запускается openapi (Redocly lint).code— в диффе есть хотя бы один файл вне «только документация» → запускаются go, bird2 и при push в main/master docker-images.
Если изменены только файлы из списка ниже, code=false: Go-тесты, bird2 и сборка образов не запускаются; при необходимости всё ещё выполняется openapi, если трогали OpenAPI или redocly.yaml.
Список путей «только документация» (без полной сборки): всё под docs/, корневой README.md, web/README.md, .gitea/README.md, redocly.yaml.
Любой другой путь (в т.ч. .gitea/workflows/ci.yaml, go.mod, web/package.json, deploy/**, **/*.go) включает полный пайплайн.
Требования к runner:
- Метка
ubuntu-latest(или изменитеruns-onпод свои labels). - Job
bird2ставит пакет bird2 черезapt-getна самом runner и вызываетbird -c … -pпо файлам в checkout (без вложенного Docker: иначе bind-mount/workspace/...часто не виден демону Docker на хосте). - Job docker-images требует Docker и (для push) доступ к Container Registry Gitea с runner’а.
Сборка и публикация образов (docker-images)
Запускается только при push в ветки main или master (после успешного job go). Собираются образы из deploy/docker/* (все бинарники через gobinary, плюс evobgp-web, evobgp-agent, evobgp-bird2).
Секреты репозитория (для push в реестр)
Хост Container Registry в workflow зашит: git.shts.su (docker/login-action и теги образов).
В настройках репозитория Gitea: Settings → Actions → Secrets (или аналог):
| Секрет | Назначение |
|---|---|
ACTIONS_PAT |
(Опционально) PAT с правом записи пакетов. Если не задан, для docker login используется gitea.token (нужны права у workflow на пакеты). |
Вход в реестр в workflow:
- registry:
git.shts.su; - username:
${{ gitea.actor }}; - password:
${{ secrets.ACTIONS_PAT || gitea.token }}.
Почему шаг «Log in to Gitea Registry» мог быть skipped
Раньше в if: стояло secrets.ACTIONS_PAT != ''. В Gitea act_runner такая проверка секрета в условии шага часто всегда ложна, из‑за этого логин всегда skipped. Сейчас условие только docker_push == 'true' (всегда при нормальном шаге Prepare), пароль: secrets.ACTIONS_PAT || gitea.token.
Если после правки docker login падает с 401/403 — выдайте job-токену или PAT право записи в Container Registry (в настройках Gitea / организации / репозитория, в зависимости от версии).
Если gitea.token в выражениях недоступен, в ci.yaml замените пароль на ${{ secrets.ACTIONS_PAT || github.token }}.
Имена образов и теги
Формат:
git.shts.su/<owner_lowercase>/<имя>:<тег>
где <имя> — одно из: evobgp-api, evobgp-all, evobgp-scheduler, evobgp-ingest, evobgp-render, evobgp-deploy, evobgp-node, evobgp-web, evobgp-web-all (UI с прокси на evobgp-all для профиля Compose microvps-full), evobgp-agent, evobgp-bird2.
Теги: latest, короткий SHA (7 символов), sha-<полный_commit_sha>.
Пример pull:
docker pull git.shts.su/myuser/evobgp-api:latest
Полная таблица образов, тегов, ссылок на страницы пакетов в Gitea и минимальный docker run для сервера без сборки — в docs/quickstart.md (раздел «Готовые образы без сборки»).
Убедитесь, что в Gitea включены пакеты (Container Registry) и у токена есть права на создание/обновление образов. Другой хост реестра — правьте registry: и префикс IMG= в ci.yaml.
Примечания
- Сборка с платформой
linux/amd64. При необходимости добавьтеlinux/arm64и multi-arch вdocker buildx build. - Для PR job docker-images не выполняется (только push в main/master), чтобы не публиковать образы из чужих форков без явной политики.