Nachdem wir unser Ziel definiert hatten, mussten einige Entscheidungen getroffen werden. Unter anderem ging es darum, ob wir das Rezept über die bekannten postUpgradeTasks von Renovate ausführen oder eine eigene GitHub-Action einrichten wollten, die beim Öffnen des Renovate-Pull-Requests getriggert wird. Um unabhängiger von Renovate zu sein, haben wir uns für die zweite Variante – die GitHub-Actions – entschieden.
Zudem haben wir beschlossen, eine Sammlung von OpenRewrite-Rezepten zu erstellen, die je nach Projekt variieren kann. Diese Sammlung haben wir dann in ein eigenes „Gepardec-Rezept“ verpackt. Dieses “Gepardec-Rezept” sollte anschließend, nach dem Ausführen des Renovate-Bots, automatisiert über eine GitHub-Action ausgeführt werden. Dabei mussten wir uns entscheiden, wie der Aufbau dieses Rezeptaufrufs in der Pipeline aussehen sollte – entweder GepardecRezeptName.${groupid} oder GepardecRezeptName.${groupid}:${artifactid}. Letztendlich haben wir uns für die erste Variante entschieden, da wir der Meinung sind, dass bei einem Update gleich die gesamte Gruppe aktualisiert werden sollte und die erste Variante somit zu feingranular gewesen wäre.
Unsere Vorgehensweise haben wir am Beispiel Log4j erfolgreich erprobt. Bei dieser Dependency musste nicht nur die Version upgedatet werden, sondern auch der Code angepasst werden. Renovate hat mittels Pull-Request ein Update der Abhängigkeit von Version 1.2.14 auf 1.2.17 vorgeschlagen. Dieses wurde durch das “UpgradeDependencyVersion”-Rezept realisiert. Durch Recherche auf “maven-central” haben wir jedoch festgestellt, dass dies das letzte Version-Update der “Log4j Version 1.x” ist, und neuere Versionen der “Log4j Version 2.x” unter geänderten Koordinaten (groupId: org.apache.logging.log4j, artifactId: log4j-core) zu finden sind. Das bereits bestehende Rezept “Log4j1ToLog4j2” erlaubt es, beide Schritte – d.h. den Wechsel auf die neuen Koordinaten, sowie das Upgrade auf die neueste Version – auf einmal auszuführen, daher haben wir dieses verwendet.