GrumPHP ist ein PHP-basiertes Werkzeug zur statischen Code-Analyse, das in den Entwicklungsprozess integriert wird, um sicherzustellen, dass der geschriebene Code bestimmten Qualitätsstandards entspricht. Es kann in verschiedene Entwicklungs-Workflows und Tools integriert werden, einschließlich Git, Continuous Integration (CI)-Systemen und Entwicklungsumgebungen.

Der Trick dabei ist, dass GrumPHP automatisch ausgeführt wird, wenn bestimmte Git-Befehle ausgeführt werden, wie z.B. git commit. Dadurch wird gewährleistet, dass der Code, der in das Repository eingecheckt wird, bestimmten Qualitätsstandards entspricht.

Zusätzlich zu den von GrumPHP abgebildeten Aufgaben, wie beispielsweise die Überprüfung der Commit Message, können auch die geänderten Dateien an andere Tools wie rector oder phpstan übergeben werden und somit auch diese automatisiert ausgeführt werden.

Warum GrumPHP in DDEV ausführen

In der Standard-Konfiguration von GrumPHP werden die Befehle gleichzeitig mit dem git commit auf dem Entwicklerrechner ausgeführt.

Dies kann in der Vergangenheit zu Problemen geführt haben, wenn lokal beispielsweise noch PHP 8.1 installiert war, während das Projekt in DDEV PHP 8.2 verwendet hat. Dadurch konnten Warnungen oder Fehler beim Ausführen von GrumPHP auftreten. Um diese Probleme zu vermeiden, sollten Entwickler sicherstellen, dass die PHP-Versionen auf ihrem lokalen System und in DDEV übereinstimmen.

Eine Alternative wäre, die Commits direkt in DDEV zu erstellen. Allerdings könnte die Git-Konfiguration des Entwicklers hier ein Hindernis darstellen. Wenn das Git-Interface in der IDE verwendet wird, ist dies nicht möglich.

Und wie geht das jetzt?

Eigentlich ist dies ganz einfach: Für GrumPHP gibt es eine Konfiguration, mit der der Befehl, um GrumPHP auszuführen, festgelegt werden kann.

In der Standardeinstellung lautet dieser Befehl exec, was zur Folge hat, dass der Befehl auf dem Host ausgeführt wird.

# grumphp.yml
grumphp:
    git_hook_variables:
        EXEC_GRUMPHP_COMMAND: exec

Wenn wir diesen Befehl nun auf ddev exec ändern, wird er in der DDEV Umgebung ausgeführt.

# grumphp.yml
grumphp:
    git_hook_variables:
        EXEC_GRUMPHP_COMMAND: ddev exec

Achtung Falls Du bereits GrumPHP verwenden, musst du die Git Hooks neu erstellen. Führe hierfür einfach vendor/bin/grumphp git:init aus.