По умолчанию conventional-changelog
является отличным дополнением к любому потоку выпуска. Но в моем случае мне понадобилось несколько дополнений, чтобы превратить примечания к выпуску из «удобочитаемых для разработчиков» в «удобочитаемых для заинтересованных сторон».
В то время как старого <type>(scope): subject
часто достаточно для беглого разработчика, требуется более 72 символов, чтобы действительно сформулировать исправление или подвиг для тех, кто не имеет контекста кодовой базы.
В моем случае мне нужно было выполнить несколько вещей:
- Добавьте коммит
body
в журнал изменений. - Автоматическая ссылка на наше стороннее программное обеспечение для управления проектами.
- Пригласите мою команду:
git commit -m "type(scope): subject" -m "A nice message for stakeholders and devs" -m "#<issue id>"
Начиная
Я решил использовать conventional-changelog-conventionalcommits
, так как его парсер извлечет для вас номер задачи/тикета через свойство issuePrefixes
.
Хотя это здорово, это не решает проблему добавления коммита body
из коробки. Для этого требуется обновление свойства commitPartial
.
Давайте посмотрим на conventional-changelog-conventionalcommits
и как использовать его как функцию, а также использовать его с lerna
.
Основное использование
Основное использование выглядит так:
'use strict' const config = require('conventional-changelog-conventionalcommits') module.exports = config({ "issuePrefixes": ["TEST-"], "issueUrlFormat": "myBugTracker.com/{prefix}{id}" })
Это довольно просто.
- Создайте файл с именем
changelog-preset.config.js
. - Вставьте в него приведенный выше код.
- В вашем
lerna.json
добавьте"changelogPreset": "./changelog-preset.config.js"
.
Обновление шаблонов
Проблема, с которой мы остались, заключается в том, что сам API не предоставляет способ изменить файл шаблона commitPartial.hbs
(см. здесь), поэтому нам нужно изменить вывод функции config
. Немного сбивает с толку то, что выходной объект имеет два одинаковых объекта с разными именами:
{ conventionalChangelog, writerOpts, ...rest }
conventionalChangelog
и writerOps
.
Для lerna
нам нужно обновить свойства conventionalChangelog
, чтобы внести изменения в шаблон журнала изменений.
Это означает, что нам нужно сделать что-то подобное в нашем changelog-preset.config.js
:
const commitPartial = `// some hbs code` module.exports = config({ "issuePrefixes": ["TEST-"], "issueUrlFormat": "myBugTracker.com/{prefix}{id}" }).then((preset => { preset.conventionalChangelog.writerOpts.commitPartial = commitPartial return preset })
Наш код handlebars (hbs) будет вариацией шаблона по умолчанию с добавлением body
, и мы встроим его в литерал шаблона:
const commitPartial = ` *{{#if scope}} **{{scope}}:** {{~/if}} {{#if subject}} {{~subject}} {{~else}} {{~header}} {{~/if}} {{~!-- commit link --}}{{~#if hash}} {{#if @root.linkReferences~}} ([{{shortHash}}]({{commitUrlFormat}})) {{~else}} {{~shortHash}} {{~/if}}{{~/if}} {{~!-- commit references --}} {{~#if references~}} , closes {{~#each references}} {{#if @root.linkReferences~}} [ {{~#if this.owner}} {{~this.owner}}/ {{~/if}} {{~this.repository}}{{this.prefix}}{{this.issue}}]({{issueUrlFormat}}) {{~else}} {{~#if this.owner}} {{~this.owner}}/ {{~/if}} {{~this.repository}}{{this.prefix}}{{this.issue}} {{~/if}}{{/each}} {{~/if}} {{#if body}} <br/> {{body}} // The addition {{~/if}} ` module.exports = config({ "issuePrefixes": ["TEST-"], "issueUrlFormat": "myBugTracker.com/{prefix}{id}" }).then((preset => { preset.conventionalChangelog.writerOpts.commitPartial = commitPartial return preset })
URL-адрес выпуска
Если у вас возникли проблемы с получением желаемых результатов от issueUrlFormat
, вы можете жестко указать URL-адрес своей задачи и получить номер задачи из this.issue
:
const commitPartial = ` *{{#if scope}} **{{scope}}:** // ...some code {{~this.repository}}{{this.prefix}}{{this.issue}}](https://some-tracker.com/project/{{this.issue}}) // ...some code `
Лерна Конфиг
В вашем lerna.json
вам понадобится что-то вроде этого:
{ "packages": ["packages/*"], "version": "independent", "changelogPreset": "./changelog-preset.config.js",
"command": { "version": { "message": "chore(release): release", } } }
Команда освобождения
В конвейере выпуска добавьте следующее:
npx lerna version --yes --conventional-commits --create-release github
Вот и все! Теперь у вас будет коммит body
в примечаниях к выпуску. Дополнительное форматирование шаблона полностью зависит от вас.