По умолчанию conventional-changelog является отличным дополнением к любому потоку выпуска. Но в моем случае мне понадобилось несколько дополнений, чтобы превратить примечания к выпуску из «удобочитаемых для разработчиков» в «удобочитаемых для заинтересованных сторон».

В то время как старого <type>(scope): subject часто достаточно для беглого разработчика, требуется более 72 символов, чтобы действительно сформулировать исправление или подвиг для тех, кто не имеет контекста кодовой базы.

В моем случае мне нужно было выполнить несколько вещей:

  1. Добавьте коммит body в журнал изменений.
  2. Автоматическая ссылка на наше стороннее программное обеспечение для управления проектами.
  3. Пригласите мою команду:
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}"
})

Это довольно просто.

  1. Создайте файл с именем changelog-preset.config.js .
  2. Вставьте в него приведенный выше код.
  3. В вашем 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 в примечаниях к выпуску. Дополнительное форматирование шаблона полностью зависит от вас.