Changelogs in Gitlab automatisch generieren
In der Regel folge ich bei der Verwendung von Git dem Git-Flow-Workflow. Wer das noch nie gehört hat findet Details dazu zum Beispiel in einem sehr guten Artikel von Atlassian.
Das Erste, was ich mir gebaut habe, war ein Changelog-Generator. In einem ersten Schritt ein simples Bash-Script, dass alle git-Logs seit dem letzten Tag ausliest und diese dann zusammen mit einem Header in die Datei Changelog.md einfügt. Hier gibt es viele verschiedene weitere Tools und einige davon habe ich ausprobiert. Aufgrund der relativ überschaubaren Größe meiner Repositories bin ich in der Regel bei meinem Script geblieben, da der Rest einfach nur zu viel Overhead gewesen wäre.
Nun gibt es seit Gitlab 13.9 die Möglichkeit, das Changelog automatisiert über einen API-Call zu generieren. Die Changelog-Einträge werden über ein Schlüsselwort in der Commit-Message erzeugt. Eine Commit-Message könnte z.B. wie folgt aussehen:
IP-Adressen für das Whitelisting in SSH-Guard ergänzt
Der neu umgezogene Standort in Frankfurt hat eine neue IP, die in das Whitelisting für SSH-Guard aufgenommen wurde.
Changelog: changed
Die letzte Zeile ist interessant. Hier markiert man den Text des letzten Commits mit dem Schlüsselwort Changelog und ordnet ihn eine der folgenden Kategorien zu:
- added
- fixed
- changed
- deprecated
- removed
- security
- performance
- other
Weitere Details dazu finden sich in der Dokumentation.
Nun setzt man einen POST-Request gegen die API des Gitlab-Servers ab:
curl -X "POST" "https://gitlab.server.example/api/v4/projects/2620/repository/changelog/?version=1.0.0&from=70e98c96b00f3f48e0ccca8d073b95027cb1c94b&to=f5e32b7a46bd3d27f29d046d9258eb6d787b2db6" \
-H 'PRIVATE-TOKEN: SUPER-GEHEIMER-TOKEN'
Dieser Aufruf generiert ein Changelog, der in das Projekt eingecheckt wird.
Details der Parameter und des Aufrufs findet man ebenfalls in der Dokumentation. Und natürlich kann man das auch über das CI/CD-Feature von Gitlab ansteuern.