Автоматические релизы
Как проходит релиз
- Изменение библиотеки приходит в feature PR. CI устанавливает зависимости через Bun, проверяет типы, сборку, тесты и связку локальных React/Zustand. При ошибке PR исправляют: перехода к выпуску нет.
- После merge в
mainrelease-please разбирает Conventional Commits и изменённые пути пакетов. Scope вfix(react): …помогает читать историю, но сам по себе пакет не выбирает: важно, какие файлы изменены. - Один общий release PR содержит независимые версии, CHANGELOG и изменения зависимостей всех затронутых пакетов. Это не одна общая версия монорепозитория. CI проверяет и этот PR, включая итоговую связку с новыми диапазонами.
- После проверки и merge release PR release-please создаёт отдельные теги и GitHub Releases. GitHub Release ещё не означает успешную публикацию в npm.
- Publish job собирает результат и публикует только пути из
paths_released, последовательно в порядке зависимостей: React прежде Zustand, если выпущены оба. Ошибка останавливает дальнейшие публикации. Неизменившийся OpenAPI не публикуется. Затем проверяем npm и обновляем проект-потребитель.
Каскад зависимых версий
Для каскада добавляем в release-please-config.json плагин. Это минимальный фрагмент, а не полный конфиг: отдельно нужны пути трёх пакетов, компоненты тегов и manifest версий.
{
"plugins": [
{
"type": "node-workspace",
"updatePeerDependencies": true
}
]
}По официальному описанию node-workspace плагин обновляет ссылки на локальные пакеты и добавляет зависимому пакету patch и CHANGELOG, даже когда его исходники не менялись. Обновление peerDependencies включается отдельно указанной опцией. В CDD сохраняем локальную dev-связь Zustand с React из workspace, optional peer и экспорт ./vanilla. В публикуемом архиве диапазоны должны быть semver, например ^1.2.1, без workspace:* и личного скоупа.
Примеры после первоначальной настройки:
| Изменение | React | Zustand | OpenAPI |
|---|---|---|---|
Только fix React | 1.2.0 → 1.2.1 | 1.0.0 → 1.0.1, peer React ^1.2.1, запись в CHANGELOG | Остаётся 0.2.0, без выпуска |
Только fix Zustand | Без выпуска | Собственный patch | Без выпуска |
Только docs: / test:, без breaking change и других накопленных релизных изменений | Без выпуска | Без выпуска | Без выпуска |
В последней строке новый release PR не создаётся; уже накопленные релизные изменения нужно учитывать отдельно. Схема показывает первую строку — каскад после исправления React.
Работающий пример и источники
Это отдельный пример TP-Prepare, не описание уже работающего CI CDD. Release PR #19 показывает: исправлялся core, а addon получил patch и dependency ^1.1.1. Успешный workflow выпуска опубликовал core перед addon. Реализация на SHA 00e8548745e6f04933f798a73f9c395c1eb4febd:
- Конфиг release-please: независимые пакеты и
node-workspace. - Workflow release.yml:
paths_released, отдельный publish job, сборка Bun и публикация npm. - Порядок и остановка публикаций, вызов npm CLI и обработка ошибки.
- Официальный manifest-releaser: каскад и опция обновления peer; точка отсчёта и manifest.
Установка addon из npm подтягивает его обычную dependency core. Перенос этого механизма в CDD требует отдельно сохранить optional peer/vanilla и проверить React/Zustand до публикации и в потребителе.