Kai Ole Hartwig
5 Min. Lesezeit
Niedrig
Von

Kompatibel, wo es Nutzer schützt

Die meisten Meinungen in dieser Serie sind Abweichungen von Renovate. Diese ist das Gegenteil. An drei Stellen weicht pinup bewusst nicht ab, auch wo ich es selbst anders gebaut hätte.

Konfiguration, Branch-Namen und Annotationen folgen Renovate. Nicht aus Bequemlichkeit, sondern weil sie in den Repositories der Nutzer stehen und nicht im Werkzeug.

01 — Die Meinung in einem Satz

Was im Repository steht, gehört den Nutzern. Ein Wechsel des Werkzeugs darf dort kein Byte ändern.

Das betrifft drei Dinge:

02 — Die Alternative: ein sauberer Schnitt

Viele Werkzeuge beginnen mit einem eigenen Format. Dependabot hat seine dependabot.yml, Renovate seine renovate.json. Das ist ein guter Weg für ein neues Werkzeug. Es kann seine Sprache einfacher bauen und muss keine Altlasten tragen.

Für pinup hätte ein sauberer Schnitt zwei Dinge bedeutet. Erstens eine Umstellung in rund 200 Repositories, bevor der erste Lauf überhaupt etwas zeigt. Zweitens keinen Weg zurück. Wer ein neues Werkzeug ausprobiert, soll es auch wieder abschalten können, ohne aufzuräumen.

03 — Der Preis

Kompatibilität ist die teuerste Meinung in dieser Serie.

Fremde Regeln, auch die seltsamen. pinup muss Renovates Semantik nachbilden, bis in die Presets. Wo ich eine Regel anders formuliert hätte, bleibt sie trotzdem so, wie Renovate sie liest.

Nachbau ohne Blick in den Code. Renovate steht unter AGPL-3.0, pinup unter Apache-2.0. Ich übernehme die Konfigurationssprache, lese und kopiere aber keinen Code. Also habe ich den gepinnten Renovate-Container ausgeführt und sein Verhalten aus aufgezeichneten Ein- und Ausgaben nachgebaut. Das dauert länger als jeder Fork. Eine frühe Preset-Bibliothek, die aus Renovates Presets erzeugt war, habe ich im September 2026 durch eine selbst geschriebene ersetzt.

Ein Ziel, das sich bewegt. Renovate entwickelt sich weiter. Jede neue Version kann das Verhalten ändern, und pinup merkt es erst, wenn ich neu aufzeichne.

04 — Der Anlass

Der Umstieg im September hat in keinem Repository eine Datei geändert. pinup lief zuerst im Shadow-Modus neben Renovate und verglich seine Pläne mit den offenen Merge-Requests. Der Schlüssel für diesen Vergleich war der Branch-Name. Das ging nur, weil beide Werkzeuge dieselben Namen erzeugen. Beim Umschalten entstand kein doppelter Merge-Request.

Umbenennen, aber als eigener Schritt

Inzwischen heißen die Branches in meinem Bestand pinup/, und die Annotationen wechseln zu # pinup:. Das ist kein Widerspruch zur Meinung, sondern ihre Folge. Die Umbenennung kam als zweiter, eigener Schritt, und sie steht in der Konfiguration, nicht im Code.

GitLab kann den Quell-Branch eines Merge-Requests nicht umbenennen. Deshalb übernimmt pinup über branchPrefixOld die noch offenen renovate/-Merge-Requests, statt neue zu öffnen. Die Annotationen sollen nur wechseln, wenn ein Plan vorher und nachher dieselben Abhängigkeiten findet.

05 — Die Durchsetzung

Kompatibilität, die man nicht misst, verrottet leise. Drei Mechanismen halten sie.

Häufige Fragen

Soll ich meine renovate.json in .pinup.yaml umbenennen?+

Nicht für den Umstieg. pinup liest beide gleich. Umbenennen lohnt sich, wenn du Kommentare in der Konfiguration willst oder klarstellen möchtest, welches Werkzeug sie liest. Nur zwei Konfigurationsdateien zugleich lehnt pinup ab.

Kann ich zu Renovate zurückwechseln?+

Ja, solange die Konfiguration als renovate.json vorliegt und keine pinup-eigenen Schlüssel nutzt. Branch-Namen und Annotationen sind dieselben, sofern du sie nicht selbst umbenannt hast. Renovate übernimmt die offenen Branches dann wieder, sofern pinup mit derselben Git-Identität committet hat. Sonst gelten sie für Renovate als fremd bearbeitet.

Warum ist pinup kein Fork von Renovate?+

Weil Renovate unter AGPL-3.0 steht und pinup unter Apache-2.0 bleiben soll. Ein Fork hätte die Lizenz mitgenommen. pinup ist deshalb ein Clean-Room-Nachbau: Verhalten beobachtet, nicht Code gelesen.

Fazit

Die billigste Migration ist die, die niemand bemerkt. Dafür zahlt pinup mit fremden Regeln, einem Nachbau ohne Blick in den Code und einem Ziel, das sich bewegt. Den eigenen Namen bekommt es trotzdem, nur später und als eigener Schritt.

Nächste Woche geht es um die Frage, wie groß ein Update wirklich ist: Das strengere Label gewinnt. Die Übersicht aller Teile und die Begriffe, die öfter vorkommen, stehen im Auftakt der Serie.

Wie viel deiner Renovate-Konfiguration nutzt pinup? Ich prüfe es Schlüssel für Schlüssel.

pinup migrate zeigt für deine Konfiguration, was sie nutzt und was pinup davon unterstützt. Danach ein Shadow-Lauf neben deinem bestehenden Runner, bevor sich irgendetwas ändert.

Termin buchen →

Über den Autor

Foto von Kai Ole Hartwig.

Kai Ole Hartwig

Freiberuflicher DevSecOps-Berater · OnlyOle Consulting

Programmiert seit 2002 – autodidaktisch gelernt, 2012 mit KO-Web selbständig gemacht. Über 100 Projekte, Fokus auf Security, Performance, Automatisierung und Qualität. Heute freiberuflich: DevSecOps-Beratung, Schulungen und Softwareentwicklung.