Справочник
Архитектура
Каждая команда стартует с одного и того же конфиг-файла (roots/packages), разворачиваемого в плоский список репозиториев. Read-only проверки (git-статус, поиск тега/релиза/реестра/PR) выполняются через небольшой параллельный map с ограничением по конкурентности, так что полный list или doctor по многим репозиториям не ждёт каждый репозиторий по очереди. Всё, что меняет состояние — коммит, push, merge, тег — идёт через один общий слой выполнения git/gh/npm, который всегда печатает команду, которую собирается выполнить, и для мутирующих шагов одинаково для всех команд учитывает --dry-run.
bump — единственная команда с реальным состоянием, которое нужно отслеживать между запусками: вместо того чтобы хранить что-то самому, она каждый раз заново вычисляет, как далеко зашла предыдущая попытка (запушена ли ветка? открыт ли PR? смёрджен ли он?), прямо из git/GitHub при каждом запуске — именно это делает повторный запуск после прерывания безопасным, без какого-либо локального состояния, которое могло бы устареть.
Сравнение
Более узкий по охвату инструмент, чем оркестратор сборки монорепозитория (Nx, Turborepo, часть Lerna, отвечающая за запуск задач) — polyrepo-cli не строит граф зависимостей задач и не кеширует их результат, потому что рассчитан на папку независимых репозиториев, у каждого из которых свой package.json и свой GitHub-remote, а не единый workspace. Он также не заменяет инструмент версионирования/changelog вроде Changesets — черновик записи в CHANGELOG.md он пишет как часть bump, но реально автоматизирует именно git/GitHub/npm-механику релиза (ветка, PR, merge, тег, GitHub Release, публикация в npm) сразу по многим репозиториям, а не накопление changeset'ов внутри одного.
Разработка
git clone https://github.com/macrulezru/polyrepo-cli.git
cd polyrepo-cli
npm install
npm testЮнит-тесты покрывают чистую логику, не требующую настоящего git/gh/npm — бамп версии, вставку записи в CHANGELOG.md, обнаружение рассинхронизации зависимостей между пакетами и распознавание имён bump-веток — с использованием настоящих временных файлов на диске, а не моков.
Лицензия
MIT — см. LICENSE.