release-tool
Описание
Языки
- TypeScript97,3%
- JavaScript2,7%
ONREZA Release
Универсальный инструмент автоматизации релизов с поддержкой Conventional Commits, семантического версионирования и интеграцией с GitVerse, GitHub и GitLab (coming soon).
Возможности
- ✅ Автоматическое версионирование на основе Conventional Commits
- 📝 Генерация CHANGELOG с группировкой по типам коммитов
- 🌐 Мультиплатформенность — поддержка GitVerse, GitHub и GitLab
- 🔄 Автоопределение платформы по git remote или CI окружению
- 📦 Поддержка монорепозиториев с независимым версионированием
- 🏷️ Автоматические git теги и коммиты
- 🔍 Режим dry-run для безопасного тестирования
- ⚙️ Гибкая конфигурация через .onrezarelease.json
- 🔧 Автогенерация commitlint конфига из release конфигурации
- 🪝 Хуки beforeCommit для автоматической подготовки файлов перед релизом
- 📤 Бинарная дистрибуция — публикация платформенных npm-пакетов (по паттерну esbuild/biome)
Установка
💡 Примечание о runtime: CLI работает на Node.js (>= 18), Bun не требуется для использования. Это позволяет запускать инструмент в CI/CD без дополнительной установки Bun.
Быстрый старт
⚠️ Важно: Для создания релизов необходимо настроить токен платформы:
- GitVerse:
GVR_TOKEN- GitHub:
илиGITHUB_TOKENGH_TOKEN- GitLab:
илиGITLAB_TOKENGL_TOKENБез токена инструмент работает в урезанном режиме (только локальные теги и CHANGELOG). См. Настройка токенов
1. Базовое использование
2. Конфигурация
Создайте в корне проекта:
3. Добавьте в package.json
Использование
Conventional Commits
Инструмент автоматически определяет тип версии на основе коммитов:
Pre-Major режим (0.x.x проекты)
Для проектов в стадии разработки (версии ) доступен режим , который контролирует поведение BREAKING CHANGES:
Режимы работы:
(default) - версии"auto"→ minor bump,< 1.0.0→ major bump>= 1.0.0- BREAKING CHANGE всегда делает minor bump (для experimental проектов)"enabled"- стандартное semver поведение (BREAKING → major bump)"disabled"- порог версии (minor bump пока версия < порога)"2.0.0"
Примеры:
Зачем это нужно? По спецификации semver версии
находятся в pre-release фазе, где minor bump уже означает breaking change. Режим0.x.xавтоматически применяет правильную семантику.auto
Программное использование
Примечание для CI:
- GitVerse Actions:
должен быть настроен в SecretsGVR_TOKEN- GitHub Actions:
доступен автоматическиGITHUB_TOKEN- GitLab CI:
должен быть настроен в VariablesGITLAB_TOKENПодробнее см. Настройка токенов
Поддержка монорепозиториев
Конфигурация
Использование
Фильтрация коммитов по scope
Генерация Commitlint конфига
Инструмент может автоматически генерировать из вашей release конфигурации, обеспечивая синхронизацию между форматом коммитов и генерацией релизов.
Быстрый старт
Что генерируется?
Команда автоматически извлекает:
- Типы коммитов из
(feat, fix, docs, etc.)changelog.types - Scopes из названий пакетов в монорепо + дополнительные scopes
- Правила валидации (max length, case, required fields)
Конфигурация defaults
Добавьте секцию в :
Теперь можно просто запускать без параметров!
CLI опции
Примеры использования
Преимущества
✅ Единый источник истины - типы и scopes определяются в одном месте ✅ Автоматическая синхронизация - изменения в release конфиге автоматически отражаются в commitlint ✅ Меньше ошибок - нет риска рассинхронизации конфигов ✅ CI-friendly - легко интегрируется в pipelines для проверки актуальности конфига
Бинарная дистрибуция
Инструмент поддерживает создание и публикацию платформенных npm-пакетов по паттерну, используемому esbuild, biome, bun и другими инструментами.
Как это работает
- Платформенные пакеты (
,@scope/name-linux-x64, ...) содержат только бинарник для конкретной платформы с фильтрами@scope/name-darwin-arm64/osв package.jsoncpu - Основной пакет объявляет их в
и содержит JS wrapper, который находит и запускает нужный бинарникoptionalDependencies - npm автоматически устанавливает только подходящий платформенный пакет
Быстрый старт
Конфигурация
Добавьте секцию в :
Пакеты без scope
опционален. Без него пакеты публикуются как вместо :
Кастомный шаблон имени пакета
Используйте для гибкой настройки имён:
Плейсхолдеры: , ,
Дефолтные шаблоны:
- Без scope: {{name}}-{{platform}}
- Со scope: @{{scope}}/{{name}}-{{platform}}
Структура бинарников
Формат "directory" (по умолчанию)
Бинарники в директориях:
dist/
yougile-linux-x64/
yougile # бинарник для linux x64
yougile-darwin-arm64/
yougile # бинарник для macOS ARM
yougile-win32-x64/
yougile.exe # бинарник для Windows
Формат "tar.gz"
Бинарники в tar.gz архивах (удобно для CI артефактов):
Структура архивов:
dist/
myapp-linux-amd64.tar.gz # содержит cli (или cli внутри поддиректории)
myapp-darwin-arm64.tar.gz
myapp-windows-x64.tar.gz
Опции для tar.gz:
— включает режим архивовinputFormat: "tar.gz"— имя бинарника внутри архива (если отличается отsourceBinName)name— маппинг ключей в именах архивов на npm платформыplatformMap
Генерируемая структура
npm/
@rainypixel/
yougile-linux-x64/
package.json # { "os": ["linux"], "cpu": ["x64"], "bin": {...} }
bin/yougile # скопированный бинарник
README.md
yougile-darwin-arm64/
...
CLI опции
Кастомная команда публикации
Команда публикации поддерживает плейсхолдеры:
Пример dry-run вывода
🔍 DRY RUN MODE
📦 Binary Distribution:
Scope: @rainypixel
Name: yougile
Version: 1.2.3
Platforms: linux-x64, darwin-arm64
📁 Packages to generate:
npm/@rainypixel/yougile-linux-x64/
npm/@rainypixel/yougile-darwin-arm64/
📝 Main package updates:
optionalDependencies:
"@rainypixel/yougile-linux-x64": "1.2.3"
"@rainypixel/yougile-darwin-arm64": "1.2.3"
bin:
"yougile": "bin/yougile.js"
🚀 Publish command: npm publish --access public
Интеграция с CI/CD
Мультиплатформенность
Инструмент поддерживает создание релизов на разных Git платформах с автоматическим определением.
Поддерживаемые платформы
| Платформа | Токен | CI окружение |
|---|---|---|
| GitVerse | | GitVerse Actions |
| GitHub | , | GitHub Actions |
| GitLab | , | GitLab CI |
Автоопределение платформы
Платформа определяется автоматически в следующем порядке:
- CI окружение — по переменным
,GITVERSE_ACTIONS,GITHUB_ACTIONSGITLAB_CI - Git remote URL — по хосту в git remote get-url origin
Конфигурация
Примеры использования
Поддержка Rust
Инструмент поддерживает проекты на Rust с автоматическим чтением и обновлением версии из .
Автоопределение типа проекта
По умолчанию инструмент автоматически определяет тип проекта:
- Если есть
→ Node.js проектpackage.json - Если есть
→ Rust проектCargo.toml
Быстрый старт (Rust)
Конфигурация для Rust
Бинарная дистрибуция для Rust
Для Rust проектов особенно полезна публикация скомпилированных бинарников:
Сборка бинарников для разных платформ:
Структура для бинарной дистрибуции
После сборки бинарники должны быть расположены:
target/release/
myapp-linux-x64/myapp
myapp-darwin-arm64/myapp
myapp-win32-x64/myapp.exe
Или используйте для архивов.
Монорепозиторий с Rust и Node.js
Конфигурация
Полный пример
beforeCommit хук
Хук запускается перед проверкой чистоты working tree и позволяет автоматически подготовить файлы перед созданием релиза:
Как это работает:
- Запускается команда
(например, линтер)beforeCommit - Если команда выполнилась успешно (exit code 0):
- Все измененные файлы добавляются в staging area (
)git add -A - Эти изменения войдут в коммит релиза вместе с version/changelog
- Все измененные файлы добавляются в staging area (
- Проверяется чистота working tree (только unstaged изменения)
Примеры использования:
Важно: Если хук завершается с ошибкой (exit code ≠ 0), изменения НЕ добавляются в staging area и релиз продолжается как обычно.
Переменные окружения
⚠️ Настройка токенов
КРИТИЧЕСКИ ВАЖНО: Без настройки токена платформы инструмент работает в урезанном режиме:
✅ С токеном (полный режим):
- Автоматическое создание релизов на платформе
- Публикация changelog в релиз
- Загрузка ассетов релиза
- Push тегов и коммитов в удаленный репозиторий
⚠️ Без токена (урезанный режим):
- ❌ НЕТ создания релизов на платформе
- ✅ Генерация CHANGELOG локально
- ✅ Создание git тегов локально
- ✅ Коммиты изменений локально
Токены по платформам
| Платформа | Переменные окружения | Где создать |
|---|---|---|
| GitVerse | | Settings → Applications → Generate New Token |
| GitHub | , | Settings → Developer settings → Personal access tokens |
| GitLab | , | Preferences → Access Tokens |
Настройка для GitVerse Actions
Важно: НЕ предоставляется автоматически в GitVerse Actions!
- Создайте Personal Access Token в GitVerse (Settings → Applications)
- Добавьте токен в Secrets: Settings → Secrets and Variables → Actions → New repository secret
- Используйте в workflow:
Настройка для GitHub Actions
В GitHub Actions доступен автоматически, но для создания релизов может потребоваться Personal Access Token с расширенными правами:
Настройка для GitLab CI
Проверка токена (рекомендуется)
CLI опции
Основные команды
Опции для релиза
Аргументы:
package Имя пакета для релиза (для монорепозиториев)
Опции:
--dry-run Запуск без внесения изменений
--config <path> Путь к конфиг файлу (default: .onrezarelease.json)
--package <name> Имя пакета для релиза (для монорепо)
--version <version> Указать конкретную версию
--prerelease [tag] Создать prerelease версию (beta, alpha, rc)
--no-commit Не создавать git коммит
--no-tag Не создавать git тег
--no-push Не пушить в remote
--no-release Не создавать GitVerse Release
--verbose Подробный вывод
--help Показать справку
Опции для generate-commitlint
Опции:
--output <path> Путь для вывода (default: commitlint.config.ts)
--format <ts|js|json> Формат файла (default: ts)
--scopes <scopes> Дополнительные scopes (comma-separated)
--scope-required Требовать обязательный scope
--header-max-length <n> Максимальная длина header (default: 100)
--no-comments Отключить комментарии в файле
--dry-run Preview без записи
--verbose Подробный вывод
Опции для publish-binaries / generate-binary-packages
Опции:
--dry-run Preview без изменений
--version <ver> Override версии (default: из package.json)
--platforms <list> Конкретные платформы (comma-separated)
--generate-only Только генерация, без публикации
--skip-main-package Не обновлять основной package.json
--verbose Подробный вывод
CI/CD интеграция
GitVerse Actions
⚠️ Перед использованием: Убедитесь, что добавлен в Secrets репозитория (см. Настройка токенов)
Что происходит в этом workflow:
- ✅ Проверяет наличие
(workflow упадет с ошибкой, если токен не настроен)GVR_TOKEN - ✅ Устанавливает зависимости через npm
- ✅ Настраивает git для создания коммитов
- ✅ Создает релиз с полным функционалом (CHANGELOG, теги, GitVerse release)
- ✅ Автоматически публикует в GitVerse
- ✅ Записывает outputs для использования в последующих шагах
GitHub Actions
GitLab CI
GitHub Actions Outputs
автоматически записывает outputs в при запуске в GitHub Actions (и GitVerse Actions). Это позволяет использовать результаты релиза в последующих шагах workflow без парсинга stdout.
Доступные outputs:
| Output | Описание | Пример |
|---|---|---|
| Был ли релиз создан успешно | |
| Версия релиза | |
| Тег релиза | |
| URL релиза на платформе | |
Пример использования:
Работа с publish-binaries:
Примечание: Outputs записываются только при успешном выполнении. Если релиз не удался, outputs не будут доступны.
Разработка
Лицензия
MIT © ONREZA
Полезные ссылки
- GitVerse SDK - Основной репозиторий
- Conventional Commits - Спецификация
- Keep a Changelog - Руководство по CHANGELOG
- Semantic Versioning - Семантическое версионирование
- npm пакет
Сообщить об ошибке
Создайте issue на GitVerse
Сделано с ❤️ для GitVerse