Якщо повідомлення комітів дотримуються Conventional Commits, з історії можна автоматично визначити, яким має бути наступний номер версії і що писати в змінлог.
Правила семантичного версіонування з комітів:
| Коміти з останнього релізу | Нова версія |
|---|---|
лише fix: |
патч: 1.4.2 → 1.4.3 |
є feat: |
мінорна: 1.4.2 → 1.5.0 |
feat!: чи футер BREAKING CHANGE: |
мажорна: 1.4.2 → 2.0.0 |
chore:, docs:, test: |
релізу не потребують |
release-please (від Google) працює через релізний pull request:
- після кожного злиття в
mainдія аналізує нові коміти; - відкриває чи оновлює PR «chore(main): release 1.5.0» зі зміненим
CHANGELOG.mdі номером версії; - команда зливає цей PR, коли хоче випустити реліз;
- дія створює тег
v1.5.0і GitHub Release з нотатками.
on:
push:
branches: [main]
permissions:
contents: write
pull-requests: write
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: googleapis/release-please-action@v5
with:
release-type: php
semantic-release - альтернатива без проміжного PR: реліз публікується одразу після злиття. Більше автоматизації, менше контролю над моментом релізу.
Що потрібно для роботи:
- дисципліна повідомлень - перевірка в
commit-msgі в CI; при злитті через squash - перевірка заголовка PR, бо він стає повідомленням коміту; - осмислені коміти:
fix: typoв історіїmainпотрапить у змінлог; - права боту на запис і створення PR; якщо релізний PR має запускати CI, потрібен токен GitHub App чи PAT - події від стандартного
GITHUB_TOKENне запускають інші workflow.
Обмеження: змінлог з комітів - для розробників. Для користувачів продукту часто потрібні людські нотатки до релізу, і автоматичний текст - лише чернетка для них.