Git Version mit Hooks
Ich arbeite ja sehr viel mit TYPO3 und ein sauberer Aufbau innerhalb von TYPO3 sieht vor, dass man die Versionen seiner Extensions pflegt.
Da aktuell immer mehr Extensions StandAlone in Git auftauchen ( Github, Gitlab oder halt Composer ) haben wir eine Inkonsistenz in der Versionspflege zu befürchten, denn sowohl Git, als auch die TYPO3 Extension als solche Pflegen Versionsnummern.
Im Rahmen meines letzten Beitrags habe ich mich mit ein paar Hooks von Git befasst. Das Ziel war im Falle folgendes Szenario abzubilden:
- Git Commit mit Code Änderungen
- Git Tag mit neuer Version
- Hier sollte der Hook jetzt hin kommen und die Version in der ext_emconf.php sollte vor dem Ändern der Version mit einem eigenen Commit verändert werden.
Hier ist meine Working Demo:
#!/usr/bin/php <?php echo "Running" . PHP_EOL; $extEmConfVersion = getExtEmConfVersion(); $gitVersion = getGitVersion(); if( isset($extEmConfVersion) && !empty($extEmConfVersion) && isset($gitVersion) && !empty($gitVersion)) { if($extEmConfVersion != $gitVersion) { adjustEmConfVersion($gitVersion); } } exit(0); function getGitVersion() { $return = exec('git describe --tags'); if(strpos($return, 'fatal') === FALSE) { return $return; } else { return NULL; } } function getExtEmConfVersion() { if(!file_exists('ext_emconf.php')) { return NULL; } $content = file_get_contents('ext_emconf.php'); preg_match_all("/'version'\s*=>\s*'(.*?)'/", $content, $return); if(isset($return[1][0])) { return $return[1][0]; } return NULL; } function adjustEmConfVersion($gitVersion) { if(!file_exists('ext_emconf.php')) { return NULL; } $content = file_get_contents('ext_emconf.php'); $content = preg_replace("/'version'\s*=>\s*'(.*?)'/", "'version' => '" . $gitVersion . "'", $content); file_put_contents('ext_emconf.php', $content); exec('git add ext_emconf.php'); }
Der Hook ist derzeit allerdings nicht wirklich funktional, denn er reagiert nicht auf die neue Version, sondern nur auf neue Commits. Also müsste ich entweder die Versionen in der ext_emconf.php pflegen und dann per modifizierten Hook die Git Versionen pflegen, oder ich muss mir eine Alternative mit dem Hook überlegen.
Wenn da jemand ne Idee oder ne Lösung hat, bin ich für alles offen und für jede Hilfe dankbar!
TYPO3 und Composer - leichter als Gedacht
Docker: Mit Top den richtigen Docker Container finden