# Релизы и версионирование EvoBGP EvoBGP использует [Conventional Commits](https://www.conventionalcommits.org/) и [semantic-release](https://semantic-release.gitbook.io/) для полностью автоматических релизов на Gitea (`git.shts.su`). Ручное повышение версии в коде не требуется. ## Как определяется версия | Тип коммита | Bump | |-------------|------| | `feat` | minor (1.0.0 → 1.1.0) | | `fix`, `perf` | patch (1.0.0 → 1.0.1) | | `feat!`, `fix!` или `BREAKING CHANGE:` в теле | major (1.0.0 → 2.0.0) | | `docs`, `chore`, `ci`, `test`, `refactor` | без релиза | Первый релиз при отсутствии git-тегов — **1.0.0**, если есть releasable-коммиты. Подробные правила сообщений коммитов: [.cursor/rules/conventional-commits.mdc](../.cursor/rules/conventional-commits.mdc). ## CI-пайплайн ```text push/merge в main → CI (openapi, web, go, bird2, commitlint на PR) → Release (semantic-release после успешного CI) → git tag vX.Y.Z → CHANGELOG.md + commit [skip ci] → Gitea Release с notes → Publish (push тега v*) → docker buildx bake с VERSION из тега → образы: latest, vX.Y.Z, sha-*, короткий SHA ``` Workflow-файлы: - [.gitea/workflows/ci.yaml](../.gitea/workflows/ci.yaml) — quality gates - [.gitea/workflows/release.yaml](../.gitea/workflows/release.yaml) — semantic-release - [.gitea/workflows/publish.yaml](../.gitea/workflows/publish.yaml) — публикация образов Конфиг semantic-release: [.releaserc.json](../.releaserc.json). ## Секреты Gitea Один PAT в репозитории — **`ACTIONS_PAT`** (Settings → Actions → Secrets). Используется для semantic-release, push тегов/CHANGELOG и docker login в registry. | Право PAT | Зачем | |-----------|--------| | push / write repository | commit `CHANGELOG.md`, push тегов | | releases | Gitea Release через semantic-release | | packages (Container Registry) | workflow **Publish** | Если `ACTIONS_PAT` не задан, workflow пробует **`gitea.token`** job-токен (нужны права на releases и packages в настройках Gitea). ## Источник правды для версии в runtime Semver из git-тега пробрасывается в Go-бинарники через `-ldflags` при сборке Docker (`deploy/docker/gobinary/Dockerfile`). Пакет [`internal/version`](../internal/version/version.go): - локально (`go run`) — `version: "dev"` - в образе после релиза — совпадает с тегом (например `1.2.3`) API: - `GET /version` - `GET /v1/version` Ответ включает `version`, `git_sha`, `build_time`; поле `api_version` — deprecated alias. Web UI показывает версию из API (footer sidebar, страница «Мониторинг»). ## CHANGELOG Файл [`CHANGELOG.md`](../CHANGELOG.md) создаётся и обновляется semantic-release. Копия прикрепляется к Gitea Release. ## Проверка после релиза 1. В Gitea: тег `vX.Y.Z` и Release с notes. 2. Container Registry: образы с тегом `vX.Y.Z`. 3. `curl http://localhost:8080/version` → `"version":"X.Y.Z"`. 4. Footer Web UI → `vX.Y.Z`. ## Первый релиз (bootstrap) Merge PR в `main` с conventional commit типа `feat(release): ...` (не `chore` — иначе релиз не создастся). Ожидаемый результат: **v1.0.0**. После merge убедитесь, что workflow **Release** завершился успешно и workflow **Publish** собрал образы по тегу.