- Added automatic versioning based on git tags using semantic-release in Gitea Actions. - Introduced new API endpoints `GET /version` and `GET /v1/version` to expose build metadata. - Updated Docker build process to include version and build time information in Go binaries. - Enhanced documentation with details on release processes and versioning guidelines. - Integrated version display in the web application for better user visibility.
3.9 KiB
Релизы и версионирование EvoBGP
EvoBGP использует Conventional Commits и semantic-release для полностью автоматических релизов на 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.
CI-пайплайн
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 — quality gates
- .gitea/workflows/release.yaml — semantic-release
- .gitea/workflows/publish.yaml — публикация образов
Конфиг semantic-release: .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:
- локально (
go run) —version: "dev" - в образе после релиза — совпадает с тегом (например
1.2.3)
API:
GET /versionGET /v1/version
Ответ включает version, git_sha, build_time; поле api_version — deprecated alias.
Web UI показывает версию из API (footer sidebar, страница «Мониторинг»).
CHANGELOG
Файл CHANGELOG.md создаётся и обновляется semantic-release. Копия прикрепляется к Gitea Release.
Проверка после релиза
- В Gitea: тег
vX.Y.Zи Release с notes. - Container Registry: образы с тегом
vX.Y.Z. curl http://localhost:8080/version→"version":"X.Y.Z".- Footer Web UI →
vX.Y.Z.
Первый релиз (bootstrap)
Merge PR в main с conventional commit типа feat(release): ... (не chore — иначе релиз не создастся). Ожидаемый результат: v1.0.0.
После merge убедитесь, что workflow Release завершился успешно и workflow Publish собрал образы по тегу.