Files
cloudflare-domain-manager/docs/releasing.md
T
Denozordec b2dbb4ad98
quality / commitlint (push) Skipped
CD / update-wiki (push) Successful in 5s
quality / changes (push) Successful in 5s
quality / docker-check (push) Skipped
quality / web (push) Successful in 54s
quality / api (push) Successful in 52s
CD / quality (push) Successful in 1m55s
CD / publish (push) Successful in 1m54s
feat(health-checks): enhance health check configuration and UI components
- Introduced a new HealthProviderToggle component to manage health check providers (local/cloudflare) in the UI.
- Updated health check configuration to include additional parameters such as retries and consecutive success/failure counts.
- Improved the service edit and group edit sheets to support the new health check provider options.
- Enhanced documentation to clarify the use of ACTIONS_PAT and GITEA_TOKEN for wiki updates.

This commit improves the health check management experience and expands the configuration options for better service monitoring.
2026-08-19 12:39:33 +07:00

5.5 KiB
Raw Blame History

Релизы и версионирование Cloudflare Domain Manager

CFDM использует Conventional Commits и semantic-release для полностью автоматических релизов на Gitea (git.shx.one). Ручное повышение версии в коде не требуется.

Заголовок после тип(scope):на русском (см. .cursor/rules/commit-messages-ru.mdc). Analyzer смотрит только префикс feat / fix / …

Как определяется версия

Тип коммита Bump
feat minor (1.0.0 → 1.1.0)
fix, perf, ci, refactor patch (1.5.1 → 1.5.2)
feat!, fix! или BREAKING CHANGE: в теле major (1.0.0 → 2.0.0)
docs, chore, test без релиза

Scope: один идентификатор без запятых (web, api, ci). Заголовок refactor(a, b): … не парсится semantic-release → релиз не создаётся (commitlint на PR это тоже отклонит).

refactor — patch без новых функций: перестройка кода/UI при том же поведении для пользователя.

Первый релиз при отсутствии git-тегов — 1.0.0, если есть releasable-коммиты.

CI-пайплайн (push в main)

push/merge в main
  → workflow CD: quality (web, api)
  → job publish:
       → semantic-release: git tag vX.Y.Z на текущий commit (без доп. commit)
       → Gitea Release + CHANGELOG.md как attachment
       → зеркало base-образов в cfdm-buildcache:base-*
       → docker buildx bake с VERSION=X.Y.Z (pull=false, named builder cfdm)
       → образы: latest, vX.Y.Z, X.Y.Z, sha-*, короткий SHA
  → job update-wiki (параллельно publish): docs/Home.md → wiki

Pull request: workflow CI — quality gates + commitlint; релиз и образы не публикуются.

Workflows: .gitea/workflows/ci.yaml, .gitea/workflows/cd.yaml, reusable .gitea/workflows/quality.yaml.

Конфиг semantic-release: .releaserc.json — без @semantic-release/git (CHANGELOG не коммитится в репозиторий).

Секреты Gitea

Один PAT — ACTIONS_PAT (Settings → Actions → Secrets).

Право PAT Зачем
push tags git tag vX.Y.Z на commit merge
releases Gitea Release + notes
packages (Container Registry) push образов

Fallback для git tag: gitea.token, если PAT недоступен. Push образов в Container Registry — только ACTIONS_PAT (у job token Gitea нет права packages).

Wiki: секрет ACTIONS_PAT (fallback GITEA_TOKEN) для clone/push *.wiki.git на https://git.shx.one (не внутренний GITEA_INSTANCE_URL раннера). Токен передаётся в URL (oauth2:<PAT>): Gitea на неаутентифицированный wiki push отвечает 404, а не 401.

Источник правды для версии

Semver из git-тега пробрасывается в образ как APP_VERSION / GIT_SHA / BUILD_TIME при bake (deploy/docker/cfdm/Dockerfile).

Scope и semantic-release

Парсер conventional-commits не понимает запятые в scope. Правило: один scope (web, api, ci, docker).

На push в main job publish запускает scripts/commit/verify-release-commits.mjs — в логе будут предупреждения о непарсящихся коммитах.

Если релиз «не создался», а CI зелёный: смотрите лог release — часто No releasable commits. Исправление: новый коммит с корректным заголовком (например fix(web): …).

Перезапуск упавшего job publish

semantic-release пишет .release-version только в successCmd при новом релизе. Если тег vX.Y.Z уже создан, а docker buildx bake упал, повторный run того же SHA делает semantic-release no-op (файла нет). Job publish тогда берёт версию из git-тега на HEAD и публикует образы.

Перезапускать нужно весь job publish, не отдельный шаг bake: checkout + semantic-release + detect + bake идут подряд.

CHANGELOG

Release notes — в Gitea Release; файл CHANGELOG.md генерируется в CI и прикрепляется как asset, не попадает в git history.

Проверка после релиза

  1. Один run workflow CD на push в main: job publish зелёный.
  2. Gitea: тег vX.Y.Z на том же commit, что и merge; Release с notes.
  3. Container Registry: cfdm:vX.Y.Z, cfdm:X.Y.Z, cfdm:latest и алиас cloudflare-domain-manager с теми же тегами.
  4. curl http://localhost:8080/health"status":"ok".

Первый релиз (bootstrap)

Merge в main с feat(release): …v1.0.0 в том же CI run.