Files
EvoBGP/docs/releasing.md
T
Denozordec bb334b10f5
CI / changes (push) Successful in 7s
CI / commitlint (push) Has been skipped
CI / openapi (push) Successful in 23s
CI / web (push) Successful in 28s
CI / go (push) Successful in 26s
CI / bird2 (push) Successful in 15s
feat: implement versioning and release management in the project
- 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.
2026-05-20 00:56:02 +07:00

3.9 KiB
Raw Permalink Blame History

Релизы и версионирование 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-файлы:

Конфиг 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 /version
  • GET /v1/version

Ответ включает version, git_sha, build_time; поле api_version — deprecated alias.

Web UI показывает версию из API (footer sidebar, страница «Мониторинг»).

CHANGELOG

Файл 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 собрал образы по тегу.