Инструменты CI/CD

Генератор чейнджлога из коммитовверсия, чейнджлог и номер сборки из одних и тех же коммитов

Вставьте коммиты, укажите текущую версию — и получите предложение по версии, черновик чейнджлога и номер сборки.

Генератор чейнджлога из коммитов

Коммиты (один заголовок в строке)

Коммиты и номер версии разбираются прямо в браузере. Ничего не отправляется, и ни один сервис Git или CI не вызывается.

Результат

Вставьте коммиты или введите версию, чтобы начать.

Настройки

Нераспознанные строки никогда не блокируют расчёт; эта настройка лишь решает, показывать ли их в разделе «Other» черновика чейнджлога.

Вставьте коммиты или введите версию, чтобы начать.

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

Отличие от ручного повышения версии или переноса строк в CHANGELOG.md в том, что каждое предложение получается из разбора заголовка каждого коммита по той же грамматике, что и наш Conventional Commit Builder, а не из угадывания diff или обращения к ИИ. Всё, что вы вставляете, не покидает браузер, и инструмент никогда не создаёт тег, не делает push и не обращается ни к какому API Git или CI — он только формирует текст, которым вы пользуетесь сами.

Почему стоит использовать этот генератор чейнджлога из коммитов

Что меняется, когда версия, чейнджлог и номер сборки берутся из одних и тех же коммитов.

Детерминированные предложения, а не угадывание ИИ

Некоторые калькуляторы релизной версии просят описать изменения свободным текстом и отправляют его в ИИ, чтобы та угадала повышение версии. Этот инструмент вместо этого разбирает заголовок каждого коммита по той же грамматике, что и наш Conventional Commit Builder — одинаковый ввод всегда даёт одинаковое предложение, и ни один сетевой запрос никогда не отправляется.

Список заголовков коммитов с типом, областью и меткой обратной несовместимости, разобранный в значок влияния на версию, без единого сетевого запроса

Версия, чейнджлог и номер сборки используют одно и то же число

Отдельный калькулятор версии, генератор чейнджлога и генератор номера сборки не знают о результатах друг друга. Здесь предложенная версия сразу попадает в заголовок чейнджлога и в плейсхолдер {version} вашего шаблона номера сборки, поэтому все три результата остаются синхронными. Готовый чейнджлог заодно работает как генератор release notes, которые можно сразу публиковать.

Предложенный номер версии, который попадает и в заголовок чейнджлога, и в шаблон номера сборки

Переход к ENV diff перед релизом

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

Панель результата с исходящей ссылкой из сформированного плана релиза на инструмент ENV diff

Три момента, которые сбивают с толку в первый раз

Что стоит знать перед тем, как вставить первую партию коммитов.

01

Вставляйте по одному заголовку коммита в строке

Вставляйте строки так, как их печатает `git log --pretty=format:%s` — по одной строке `type(scope)!: subject` на коммит. Многострочные сообщения коммитов с телом или футером `BREAKING CHANGE:` здесь не разбираются; обратную несовместимость отмечайте знаком `!` сразу после типа или области.

  • Сначала загрузите один из примеров, чтобы увидеть точный синтаксис заголовка, прежде чем вставлять свои коммиты.
Перейти к калькулятору
02

Укажите текущую версию и шаблон номера сборки

Введите текущую версию в строгом формате SemVer (например, 1.4.2) и при необходимости измените шаблон номера сборки. Шаблон по умолчанию `{version}+{yyyyMMdd}.{count}` использует предложенную версию, сегодняшнюю дату и счётчик сборки, который вы вводите сами — у инструмента нет контекста CI, из которого можно было бы прочитать реальный номер сборки.

Отключите автогенерацию, чтобы отредактировать несколько полей перед пересчётом, а затем нажмите Ctrl/Cmd+Enter, чтобы запустить расчёт вручную один раз.

03

Проверьте значок влияния, а затем экспортируйте

Значок (мажорная, минорная, патч или без изменений) показывает, какой коммит вызвал повышение версии — метка обратной несовместимости всегда важнее обычного feat или fix. Скопируйте или скачайте чейнджлог, скопируйте номер сборки или перейдите по ссылке ENV diff перед тем, как ставить тег.

Любое изменение ввода делает предыдущий результат тусклым и отключает копирование и скачивание, пока вы не сгенерируете заново.

Что не разбирается

Что калькулятор делает с вашими коммитами

Четыре части, которые превращают партию заголовков коммитов в готовый черновик релиза.

Парсер conventional commit, читающий только заголовок

Этот инструмент читает строки `type(scope)!: subject` по той же грамматике, что и наш Conventional Commit Builder, оценивает влияние каждой распознанной строки и берёт самое высокое — достаточно одного `!` или одного `feat` в партии, чтобы поднять весь релиз.

Черновик чейнджлога в стиле Keep a Changelog, с несовместимыми изменениями наверху

Распознанные коммиты группируются в Breaking Changes, Features, Fixes и Other и выводятся как Markdown, который можно скопировать или скачать в виде CHANGELOG.md — записи о несовместимости всегда идут первыми.

Шаблон номера сборки, который вы настраиваете сами

Комбинируйте `{version}`, `{yyyy}`, `{yyyyMM}`, `{yyyyMMdd}` и введённый вручную `{count}`, чтобы получить любой формат номера сборки, нужный вашему пайплайну; неизвестные плейсхолдеры остаются как есть и помечаются, а не пропадают молча.

Нераспознанные строки никогда не блокируют результат

Строка, которая не является корректным заголовком коммита, пропускается при расчёте версии и считается отдельно, не останавливая весь расчёт — отключите «игнорировать», чтобы всё равно увидеть её в разделе Other чейнджлога.

Что этот инструмент разбирает, а что нет

Граничные случаи, которые стоит знать перед тем, как вставить коммиты настоящего релиза.

Читаются только однострочные заголовки коммитов
Многострочные сообщения коммитов с телом или футером `BREAKING CHANGE:` не поддерживаются — как только сообщения склеены построчно, границу футера, отделённого пустой строкой, уже нельзя надёжно отличить от заголовка следующего коммита. Отмечайте несовместимость знаком `!` вместо этого.
До 1000 строк или 100 000 символов за один запуск
Превышение этого лимита возвращает ошибку, а не молча обрезает ваши коммиты — разделите очень большое окно релиза на меньшие партии.
Текущая версия должна быть строгой строкой SemVer
Значения вроде `v1.4.2`, `1.4` или версия с ведущими нулями отклоняются с указанием места ошибки; предложение остаётся пустым, пока в поле не появится что-то вроде `1.4.2`.
Ничего не публикуется, не помечается тегом и не читается из вашего CI
Ни один коммит не запрашивается из репозитория, ни один тег не создаётся, а `{count}` никогда не читается из реального номера сборки — этот инструмент лишь превращает вставленный текст в версию, черновик чейнджлога и строку номера сборки, которыми вы пользуетесь сами.

Частые вопросы про генератор чейнджлога из коммитов

Ответы на то, что действительно спрашивают, прежде чем довериться предложению версии на основе коммитов.

Почему patch-версия не увеличивается в зависимости от сообщения коммита?

Проверьте, что строка точно соответствует шаблону `type(scope)!: subject` — пропущенное двоеточие, лишний пробел или неподдерживаемый синтаксис делают всю строку нераспознанной, а нераспознанная строка никогда не влияет на предложение по версии. Число распознанных строк под результатом показывает, сколько строк реально удалось разобрать.

Как включить BUILD_NUMBER в номер версии?

Отредактируйте шаблон номера сборки в настройках. Шаблон по умолчанию `{version}+{yyyyMMdd}.{count}` вставляет версию, предложенную этим инструментом, сегодняшнюю дату и счётчик, который вы вводите сами — здесь нет окружения CI, из которого можно было бы прочитать реальный номер сборки, поэтому `{count}` остаётся ручным.

В чём разница между номером версии и номером сборки?

Номер версии (например, 1.5.0) следует семантическому версионированию и определяется влиянием ваших коммитов. Номер сборки — это отдельная строка, создаваемая по шаблону: она полезна для CI-систем, которым нужно различать каждую сборку, даже если номер версии не меняется. Он может включать ту же версию через `{version}`, а также дату и вручную введённый `{count}`.

Есть ли хороший способ автоматически генерировать CHANGELOG?

Достаточно вставить коммиты по одному заголовку в строке — этот генератор чейнджлога из коммитов сгруппирует их по feat, fix и несовместимым изменениям в формате Keep a Changelog. Скопируйте результат или скачайте его как CHANGELOG.md, вместо того чтобы переписывать вручную.

Что будет, если коммит не соответствует соглашению?

Строка, не соответствующая шаблону `type(scope)!: subject`, просто засчитывается как «нераспознанная» и не участвует в расчёте предложения по версии. По умолчанию включена опция «игнорировать нераспознанные строки», поэтому такая строка не появится и в черновике чейнджлога — отключите эту опцию, если хотите её увидеть.

Не нашли ответ?

Используйте генератор чейнджлога из коммитов прямо сейчас

Вставьте коммиты, подтвердите текущую версию — и за несколько секунд получите предложение по версии, черновик чейнджлога и номер сборки.

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

Весь разбор происходит локально в браузере, и ничего не помечается тегом и не публикуется за вас.