ci(release): FF-промоушн dev→testnet→main вместо merge -X theirs #119

Merged
ant merged 1 commits from feat/ff-release-flow into dev 2026-06-09 18:41:02 +00:00
Owner

Зачем

Релиз регулярно ловит конфликты на ~20 package.json (последний — сегодня, при git pull во время pnpm run production). Корень: publish-alpha.sh/publish-prod.sh бампали версию на каждой ветке через git merge -X theirs + back-merge → два независимых bump-коммита за цикл → расхождение веток → конфликты.

Что меняется

Линейная fast-forward модель:

  • scripts/cut-release.shlerna version ОДИН раз на dev (автобамп lerna сохранён, без ручных бампов).
  • scripts/promote.sh testnet|main — server-side FF-push (origin/dev:testnet, origin/testnet:main), рабочее дерево не трогается.
  • testnet/main не несут своих коммитов → конфликты структурно невозможны.

release.yaml:

  • Триггер: push в testnet/main с изменением lerna.json (вместо тега v*). Окружение определяет ветка (main→prod, testnet→staging), не суффикс -alpha.
  • Версия — из закоммиченного lerna.json (едет с коммитом по FF).
  • Гейты npm-publish/доки → branch == main.

Что НЕ меняется (проверено)

  • playbooks/приёмник деплоя — webhook по-прежнему шлёт версию-строку, образы версия-тегированы (dicoop/*:vX). DOCKER_TAG = {{ tag }} без изменений.
  • -alpha нигде в mono/playbooks не парсится, кроме удаляемого кода.

Команды

pnpm run cut          # бамп версии на dev (без деплоя)
pnpm run testnet      # FF dev→testnet (staging-деплой)
pnpm run production   # FF testnet→main (prod + npm + доки)

Подробно — scripts/RELEASE.md.

⚠️ Перед мерджем / валидация

  • CI-триггер не протестирован на проде. Рекомендую первый прогон проверить на testnet (промоут одного релиза) до доверия проду.
  • Инвариант: в testnet/mainтолько FF-промоушн, никаких прямых коммитов (иначе promote.sh отвергнет push — это гард).

Удалены: publish-alpha.sh/publish-prod.sh, мёртвые дубли (sync:main, components/contracts production/testnet/docs-publish).

🤖 Generated with Claude Code

## Зачем Релиз регулярно ловит конфликты на ~20 package.json (последний — сегодня, при `git pull` во время `pnpm run production`). Корень: `publish-alpha.sh`/`publish-prod.sh` бампали версию **на каждой ветке** через `git merge -X theirs` + back-merge → два независимых bump-коммита за цикл → расхождение веток → конфликты. ## Что меняется Линейная **fast-forward** модель: - `scripts/cut-release.sh` — `lerna version` ОДИН раз на dev (автобамп lerna сохранён, без ручных бампов). - `scripts/promote.sh testnet|main` — server-side FF-push (`origin/dev:testnet`, `origin/testnet:main`), рабочее дерево не трогается. - testnet/main не несут своих коммитов → конфликты **структурно невозможны**. `release.yaml`: - Триггер: push в testnet/main с изменением `lerna.json` (вместо тега `v*`). Окружение определяет **ветка** (main→prod, testnet→staging), не суффикс `-alpha`. - Версия — из закоммиченного `lerna.json` (едет с коммитом по FF). - Гейты npm-publish/доки → `branch == main`. ## Что НЕ меняется (проверено) - **playbooks/приёмник деплоя** — webhook по-прежнему шлёт версию-строку, образы версия-тегированы (`dicoop/*:vX`). `DOCKER_TAG = {{ tag }}` без изменений. - `-alpha` нигде в mono/playbooks не парсится, кроме удаляемого кода. ## Команды ``` pnpm run cut # бамп версии на dev (без деплоя) pnpm run testnet # FF dev→testnet (staging-деплой) pnpm run production # FF testnet→main (prod + npm + доки) ``` Подробно — `scripts/RELEASE.md`. ## ⚠️ Перед мерджем / валидация - CI-триггер не протестирован на проде. Рекомендую первый прогон проверить на testnet (промоут одного релиза) до доверия проду. - Инвариант: в `testnet`/`main` — **только FF-промоушн, никаких прямых коммитов** (иначе `promote.sh` отвергнет push — это гард). Удалены: `publish-alpha.sh`/`publish-prod.sh`, мёртвые дубли (`sync:main`, `components/contracts` production/testnet/docs-publish). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
claude added 1 commit 2026-06-09 18:29:34 +00:00
[@dark-sun] ci(release): FF-промоушн dev→testnet→main вместо merge -X theirs
Typecheck / desktop (pull_request) Failing after 8m19s
Typecheck / controller (pull_request) Successful in 12m30s
44e45dfb00
Релизный флоу переведён на линейную fast-forward модель — устраняет
регулярные конфликты на 20 package.json при релизе.

Корень проблемы: publish-alpha.sh/publish-prod.sh бампали версию НА КАЖДОЙ
ветке (alpha-N на testnet, чистую на main) через `git merge -X theirs` +
back-merge. Два независимых bump-коммита за цикл + merge'и плодили
расхождение веток → конфликты (особенно при гонке push/pull).

Новая модель:
- Версию бампает lerna ОДИН раз на dev (scripts/cut-release.sh).
- Тот же коммит едет вверх по FF: scripts/promote.sh testnet|main
  (server-side fast-forward push, рабочее дерево не трогается).
- testnet/main не несут своих коммитов → ветки не диверджатся → конфликты
  структурно невозможны.

release.yaml:
- Триггер: push в testnet/main с изменением lerna.json (вместо тега v*).
  Окружение определяет ВЕТКА (main→prod, testnet→staging), не суффикс -alpha.
- Версия читается из закоммиченного lerna.json (едет с коммитом по FF).
- Гейты npm-publish/доки: branch == main (вместо !contains '-alpha').
- Образы/webhook по-прежнему версия-тегированы → playbooks/приёмник деплоя
  не затрагиваются.

Удалены publish-alpha.sh/publish-prod.sh и мёртвые дубли тех же merge-X-theirs
скриптов (root sync:main, components/contracts production/testnet/docs-publish).
Документация — scripts/RELEASE.md + CLAUDE.md PR-flow.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ant approved these changes 2026-06-09 18:40:57 +00:00
ant merged commit 4b99780ab8 into dev 2026-06-09 18:41:02 +00:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: C9S/mono#119