Polski frontend

Piotr Kowalski — JavaScript, Front-end oraz Node.js

Git: Używaj typu w Commit Message i zbuduj idealny changelog

Wszystkie commit message repozytorium Angulara ma jakieś dziwne prefiksy. Dlaczego? O tym w dzisiejszym wpisie.

Prefiksy

Jeśli każdy Commit Message będzie posiadał jeden prefiks z listy dostępnych:

feat(feature): ... fix(bug fix): ... docs(documentation): ... style(formatting, missing semicolons): ... refactor: ... test(when adding missing tests): ... chore(maintain): ...

to wygenerowanie changeloga z podziałem na typ będzie przyjemnością.

Jakie kroki są potrzebne, aby używać takiego workflow:

Tworzyć Commit Message-e z prefiksem Wygenerować CHANGELOG.md

Aby nie zapomnieć o typie podczas tworzenia rewizji wykorzystajmy dwa narzędzia:

husky — podłączenie się pod zdarzenie “pre-commit” commitlint — weryfikacja treści Commit Message-a

Do wygenerowania changeloga przedstawię 3 narzędzia.

1. commitlint

Instalacja

npm install -D @commitlint/config-conventional @commitlint/cli

Stworzyć plik commitlint.config.js o zawartości:

module.exports = { extends: ['@commitlint/config-conventional'] }; 2. husky

Instalacja

npm install -D husky

Dodać do pliku package.json następujący wpis (w głównym obiekcie):

{ "husky": { "hooks": { "pre-commit": "commitlint -E HUSKY_GIT_PARAMS", } } } 3. Changelog Opcja nr. 1 — git-changelog

Instalacja

npm install -D git-changelog

Dodać zadanie w package.json:

{ "scripts": { "changelog": "git-changelog" } }

Stworzyć plik .changelogrc. Format pliku dostępny w linku.

INFO: Polecam tą bibliotekę z uwagi na możliwości konfiguracyjne i prostotę użycia.

Przykłady wykorzystania dostępne są tutaj:

test-angular-spy-lifecycle-hooks test-angular-user-panel Opcja nr. 2 — generate-changelog

Instalacja

npm i -D generate-changelog

Dodać do pliku package.json rekomendowane zadania:

{ "scripts": { "release:major": "changelog -M && git add CHANGELOG.md && git commit -m 'Regenerate CHANGELOG.md' && npm version major && git push origin && git push origin --tags", "release:minor": "changelog -m && git add CHANGELOG.md && git commit -m 'Regenerate CHANGELOG.md' && npm version minor && git push origin && git push origin --tags", "release:patch": "changelog -p && git add CHANGELOG.md && git commit -m 'Regenerate CHANGELOG.md' && npm version patch && git push origin && git push origin --tags", } } Opcja nr. 3 — auto-changelog

Instalacja

npm install -D auto-changelog

Dodać zadanie w package.json:

{ "scripts": { "changelog": "auto-changelog -u -p -t keepachangelog" } }

UWAGA: Brakuje wsparcia dla typów, np. feat, chore.

Przykład pracy auto-changeloga jest widoczny w bibliotece super-event-emitter.

Narzędzia do zbudowania pliku CHANGELOG.md mogą być używane bez dodawania typów w Commit Message-u, tylko wtedy nie będzie pogrupowanych rewizji i wszystkie zostaną wrzucone do jednego worka.