Um Semantic Versioning (SemVer) in einem Symfony-Projekt mit Git zu automatisieren, kannst du eine Kombination aus Git-Hooks und einem Skript verwenden, das die Versionsnummern in einer Datei verwaltet und automatisch aktualisiert. Hier ist eine Schritt-für-Schritt-Anleitung, wie du dies einrichten kannst:
1. Skript zum Inkrementieren der Versionsnummer
Erstelle ein PHP-Skript, das die Versionsnummer basierend auf dem Typ der Änderung (PATCH, MINOR, MAJOR) automatisch erhöht. Nenne das Skript z.B. update_version.php
.
<?php
function incrementVersion(string $version, string $type = 'patch'): string
{
$parts = explode('.', $version);
switch ($type) {
case 'major':
$parts[0]++;
$parts[1] = 0;
$parts[2] = 0;
break;
case 'minor':
$parts[1]++;
$parts[2] = 0;
break;
case 'patch':
default:
$parts[2]++;
break;
}
return implode('.', $parts);
}
$versionFilePath = __DIR__ . '/version.txt';
$defaultVersion = '0.1.0';
// Check if the file exists
if (!file_exists($versionFilePath)) {
// Create the file and write the default version
file_put_contents($versionFilePath, $defaultVersion);
print "version.txt created with version $defaultVersion\n";
} else {
$currentVersion = trim(file_get_contents($versionFilePath));
// Get the argument to determine the type of increment (patch, minor, major)
$type = $argv[1] ?? 'patch';
$newVersion = incrementVersion($currentVersion, $type);
file_put_contents($versionFilePath, $newVersion);
print "Version updated to $newVersion\n";
}
2. Git Hook einrichten
Ein Git Hook ist ein Skript, das bei bestimmten Git-Ereignissen ausgeführt wird. Für die automatische Versionsaktualisierung nutzen wir den pre-commit
-Hook.
- Erstelle eine Datei
.git/hooks/pre-commit
(falls sie nicht existiert) und mache sie ausführbar:
touch .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
- Füge folgendes in die Datei
.git/hooks/pre-commit
ein:
#!/bin/sh
# Typ der Änderung über Argumente bestimmen oder default auf "patch"
VERSION_TYPE=${1:-patch}
# Versionsnummer erhöhen
php update_version.php $VERSION_TYPE
# version.txt zum Commit hinzufügen
git add version.txt
Dieser Hook führt das update_version.php
-Skript aus und erhöht die Versionsnummer basierend auf dem übergebenen Argument (patch
, minor
, major
). Danach wird die aktualisierte version.txt
automatisch zum Commit hinzugefügt.
3. Verwendung
Bei jedem Commit wird die Versionsnummer automatisch aktualisiert. Standardmäßig wird die PATCH-Version erhöht. Du kannst den Typ der Versionserhöhung beim Commit angeben:
- Für einen Patch (Standard):
git commit -m "Bugfix: ... "
- Für ein Minor-Update:
git commit -m "New feature: ..." && git commit --amend -m "New feature: ..." && git hook run pre-commit minor
- Für ein Major-Update:
git commit -m "Breaking change: ..." && git commit --amend -m "Breaking change: ..." && git hook run pre-commit major
4. Optional: Automatisierung der Commit-Nachricht
Um den Typ der Änderung besser im Workflow zu integrieren, kannst du ein weiteres Skript oder eine Konvention einführen, um den Typ der Änderung aus der Commit-Nachricht abzuleiten, und entsprechend die Versionsnummer zu erhöhen.
5. CI/CD Integration
Wenn du ein CI/CD-Tool verwendest (z.B. GitLab CI, GitHub Actions), kannst du diese Versionierungsschritte auch dort automatisieren, indem du das update_version.php
-Skript in deine Pipeline integrierst.
Mit diesen Schritten hast du eine einfache, automatisierte Lösung, die SemVer in deinem Symfony-Projekt mithilfe von Git-Hooks implementiert. Die Versionsnummer wird bei jedem Commit basierend auf den vorgenommenen Änderungen aktualisiert und in der version.txt
gespeichert.