# Gitea Actions Workflow: [workflows/ci.yaml](workflows/ci.yaml). | Job | PR | push в main | |-----|-----|-------------| | changes, openapi, web, go, bird2 | quality gates | quality gates | | commitlint | да | — | | **release** | — | semantic-release + docker push (один run) | Подробнее: [docs/releasing.md](../docs/releasing.md). ## CI (quality gates) Job **changes** вычисляет флаги по путям в diff. Изменение `.gitea/workflows/*` поднимает полный прогон. На **pull request** — **commitlint** (Conventional Commits). Runner: `ubuntu-latest`, **bird2** из apt, Docker для job **release**. ## Release (job в ci.yaml) После успешных quality gates на **push в main** job **release**: 1. `npx semantic-release` — тег `vX.Y.Z` на **текущий commit** (без дополнительного commit в main). 2. Gitea Release + `CHANGELOG.md` как attachment (не в git). 3. `docker buildx bake default --push` с `VERSION=X.Y.Z` — в том же job. Если releasable-коммитов нет — semantic-release no-op, образы не публикуются. ### Секреты **`ACTIONS_PAT`**: push tags, releases, Container Registry. Fallback: **`gitea.token`**. ### Теги образов ```text git.shts.su//<имя>:latest git.shts.su//<имя>:v1.2.3 git.shts.su//<имя>:1.2.3 git.shts.su//<имя>: git.shts.su//<имя>:sha- ``` Имена образов: `evobgp-api`, `evobgp-all`, `evobgp-scheduler`, `evobgp-ingest`, `evobgp-render`, `evobgp-deploy`, `evobgp-node`, `evobgp-web`, `evobgp-web-all`, `evobgp-agent`, `evobgp-bird2`. Пример: ```bash docker pull git.shts.su/myuser/evobgp-api:1.2.3 ``` См. [deploy/docker/README.md](../deploy/docker/README.md), [docs/quickstart.md](../docs/quickstart.md).