Skip to content

Polyrepo

v1.3.1CLI-инструментNode.js

Интерактивный CLI для управления папкой локальных npm-пакетов на GitHub и GitLab: бамп версии через PR/MR, публикация в npm, релизы и отслеживание рассинхронизации зависимостей — всё из одного инструмента.

Polyrepo
Начать знакомство →
npm install -g polyrepo-cli
01 — Назначение

Когда это пригодится

Один пакет — это git clone и npm publish. Пятнадцать пакетов в одной папке — это уже вопрос дисциплины: какая ветка где называется, что не запушено, кто забыл прогнать тесты перед релизом. polyrepo-cli берёт этот процесс на себя.

Релиз каждого пакета — ручной ритуал по кругу

Зайти в директорию, поднять версию, открыть PR, дождаться мерджа, поставить тег — и повторить то же самое для следующего пакета. Чекбокс с выбором нужных пакетов запускает весь цикл сразу для всех, один раз.

В одном репозитории основная ветка — master, в другом — main

Один и тот же скрипт с фиксированным именем ветки ломается ровно там, где кто-то переименовал основную ветку на хостинге. Актуальное имя определяется для каждого репозитория отдельно, и остальные команды работают одинаково независимо от него — как и от того, GitHub это или GitLab.

Публикация в npm обрывается на середине списка

Логин истёк, а узнаётся об этом только когда пятый пакет из десяти уже собран для публикации. Авторизация проверяется и при необходимости обновляется один раз, до того как начнётся сама публикация.

После десятков релизов в репозиториях копится мусор

Ветки после смёрдженных PR/MR остаются висеть и локально, и в списке удалённых веток, ссылки на давно удалённые на хостинге ветки не исчезают сами. Периодическая проверка находит это и предлагает безопасно убрать.

Один из репозиториев — сам по себе pnpm-монорепо с несколькими пакетами

Папка с пакетами не всегда означает ровно один пакет на репозиторий — иногда внутри одного репозитория живёт сразу несколько публикуемых пакетов со своими версиями. Такой репозиторий определяется сам, и каждый пакет внутри него версионируется, тегируется и публикуется отдельно, без единой ручной настройки.

02 — Фичи

Коротко о главном

Настройка и обнаружение репозиториев

Настройка и обнаружение репозиториев

Список папок с пакетами хранится в конфиге — без ручного редактирования JSON. Отдельная команда сверяет список репозиториев GitHub-организации или GitLab-группы с тем, что уже склонировано локально, и подтягивает недостающее.

Статус всех пакетов одним взглядом

Статус всех пакетов одним взглядом

Локальная версия, ветка, git-статус, версия на origin, тег, релиз и версия в npm-реестре для каждого пакета — проверяются параллельно. Устаревшие зависимости, уязвимости и открытые PR/MR агрегируются по всем репозиториям сразу, с экспортом в Markdown, JSON, CSV или HTML.

Диагностика с безопасным автофиксом

Диагностика с безопасным автофиксом

Проверяется окружение, дрейф основной ветки от реального состояния на хостинге, расхождение с origin, защита ветки и мёртвые ветки после релизов — и там, где это безопасно, чинится само.

Синхронизация веток без сюрпризов

Синхронизация веток без сюрпризов

Выбранные репозитории подтягиваются до актуальной основной ветки — какой бы она ни называлась, master или main. Полный сброс грязного репозитория доступен только по явному флагу, никогда по умолчанию.

Управляемый релизный процесс

Управляемый релизный процесс

Версия поднимается через ветку и PR/MR — обычным бампом, пререлизом или точной версией, процесс продолжается с того места, где прервался предыдущий запуск, черновик CHANGELOG.md пишется сам из истории коммитов. Несколько пакетов в одном репозитории получают отдельные, никогда не пересекающиеся теги, даже если их номера версий совпадают. Отдельные шаги закрывают процесс тегом и релизом.

Публикация и произвольные команды

Публикация и произвольные команды

В npm публикуются только пакеты, реально обогнавшие реестр — приватные пакеты и служебный корень монорепозитория в список даже не попадают, а истёкший логин подхватывается сам. Любая команда прогоняется по выбранным пакетам одна за другой, с живым выводом в терминал.

Веб-интерфейс

Веб-интерфейс

polyrepo ui открывает локальный веб-интерфейс: таблица всех пакетов с проблемами и цветными блоками монорепозиториев, форма для каждой команды, отчёты и логи запусков в реальном времени. После каждого исхода он подсказывает, что делать дальше. Сервер слушает только 127.0.0.1 под одноразовым токеном.