Zum Inhalt springen

Entwicklerleitfaden für den Backport Builder

Der Backport Builder ist ein Release-Engineering-Projekt. Behandeln Sie Quell-Repositorys als Eingabe, generierte Verzeichnisbäume als Ausgabe und eigene Rector-Regeln als getestete Build-Logik.

Verwenden Sie diesen Leitfaden, wenn Sie Downgrade-Regeln, generierte Paketmetadaten, Prüfungen der Ziellaufzeit oder die Release-Automatisierung rund um nextpdf/backport-builder pflegen.

SchichtVerantwortet vonVerantwortungGehört nicht hierher
Quell-RepositorysProdukt-RepositorysMaßgeblicher PHP-Quellcode einschließlich Tests.Generierte Downgrade-Änderungen.
Build-Skriptenextpdf/backport-builderQuellcode zusammenführen, Transformationen ausführen, Metadaten schreiben, Ausgabe validieren.Laufzeit-Anwendungslogik.
Rector-Konfigurationnextpdf/backport-builderZielspezifische Downgrade-Richtlinie.Ungetestete Annahmen über mehrere Ziele hinweg.
Eigene Rector-Regelnnextpdf/backport-builderProjektspezifische Syntaxtransformationen.Breite, ungetestete Umschreibungen.
Generierte PaketeBuild-AusgabeInstallierbare Artefakte für ältere Laufzeiten.Manuelle Patches an der Quelle der Wahrheit.
StufeVerhaltenEntwickleraktion
Quell-CheckoutDer Release-Workflow checkt die Quell-Repositorys am Ziel-Tag aus.Halten Sie die Quell-Refs paketübergreifend synchron.
VertragsvalidierungValidateBuildContract::run() prüft die Build-Annahmen.Behandeln Sie eine fehlgeschlagene Vertragsvalidierung als Release-Blocker.
ZusammenführenMergeSources::run() setzt den Ziel-Paketbaum zusammen.Prüfen Sie den Zielumfang, bevor Sie Rector ausführen.
TransformierenRector-Konfigurationen und eigene Regeln führen das Syntax-Downgrade durch.Fügen Sie für jede Regeländerung Fixture-Tests hinzu.
Composer-AnpassungAdjustComposer schreibt die generierten Paketmetadaten und Replace-Maps.Validieren Sie Paketnamen, Version, Lizenz und Constraints.
LaufzeitvalidierungDie generierte Ausgabe wird auf den Ziel-PHP-Versionen syntaktisch geprüft und getestet.Behandeln Sie einen Fehlschlag auf der Ziellaufzeit als Release-Blocker.
ReleaseArchive werden an ein Release angehängt.Patchen Sie die generierte Ausgabe nicht, als wäre sie die Quelle der Wahrheit.
ArbeitspaketQuelle der WahrheitRichtlinie für die generierte Ausgabe
Nutzung von PHP-FeaturesHaupt-Quell-Repository.Backport-Regeln passen das Feature an.
Abhängigkeits-ConstraintsMetadaten aus der Quell-composer.json plus Anpassungsskript.Die generierte composer.json muss reproduzierbar sein.
Syntax-DowngradeRector-Konfiguration und eigene Regeln.Generierter Quellcode sollte nicht manuell bearbeitet werden.
Laufzeit-UnterstützungZiel-Branch und CI-Matrix.Der Build muss auf der Ziel-PHP-Laufzeit bestehen.
Release-NotesDokumentation und Release-Automatisierung.Generierte Artefakte sollten auf das Quell-Release zurückverweisen.

Jede eigene Regel sollte einen klar umrissenen Zweck, Metadaten und Fixture-Abdeckung haben.

RegelmethodeZweckQualitätsanforderung
getRuleDefinition()Dokumentiert die Transformation für das Rector-Tooling.Fügen Sie ein before/after-Beispiel hinzu, das dem tatsächlichen Downgrade entspricht.
getNodeTypes()Begrenzt die AST-Knoten, die die Regel untersucht.Halten Sie die Knotenliste so klein wie möglich.
refactor()Wendet die Transformation an oder gibt den Knoten unverändert zurück.Geben Sie nicht betroffene Knoten unverändert und deterministisch zurück.
Fixture-TestPrüft die before/after-Ausgabe.Decken Sie die kleinste gültige Eingabe und mindestens einen Skip-Fall ab.
<?php
final class ExampleDowngradeRector extends AbstractRector
{
public function getNodeTypes(): array
{
return [SomeNode::class];
}
public function refactor(Node $node): ?Node
{
if (!$node instanceof SomeNode) {
return null;
}
return $this->rewriteNode($node);
}
}

Nutzen Sie Dry-Runs während der Entwicklung und zur Validierung von Release-Kandidaten. Erzeugen Sie eine tatsächliche Ausgabe nur, wenn die Quell-Refs und der Ziel-Branch bekannt sind.

Terminal-Fenster
composer build:dry
php scripts/build.php --version=2.0.0 --target=php81 --dry-run
php scripts/build.php --version=2.0.0 --target=php74 --no-pro

Die Validierung des generierten Pakets sollte auf der Ziellaufzeit stattfinden, nicht nur auf dem modernen Build-Host.

ErweiterungspunktVerwenden Sie ihn fürConstraint
Rector-KonfigurationsdateienZielspezifische Downgrade-Richtlinie.Halten Sie die Lanes für PHP 8.1 und PHP 7.4 getrennt.
Eigene Rector-RegelnProjektspezifische Syntaxtransformationen.Müssen Metadaten und Fixture-Tests enthalten.
Composer-AnpassungsskriptIdentität des generierten Pakets.Muss die SemVer-konforme Versionierung bewahren.
Merge-SkriptAuswahl und Aufbereitung der Quellpaket-Eingabe.Muss Quell-Roots und Output-Roots protokollieren.
Build-WorkflowRelease-Orchestrierung.Muss die generierte Ausgabe auf der Ziellaufzeit validieren.
  1. Reproduzieren Sie die nicht unterstützte Syntax in einem minimalen Fixture.
  2. Fügen Sie eine eigene Rector-Regel hinzu oder aktualisieren Sie sie.
  3. Fügen Sie before/after-Fixtures für die Regel hinzu.
  4. Führen Sie den Dry-Build aus.
  5. Validieren Sie die generierte Ausgabe auf der Ziel-PHP-Laufzeit.
  6. Wenden Sie bei Bedarf dieselbe logische Änderung auf jeden dauerhaften Ziel-Branch an.
  7. Halten Sie die Release-Artefakte aus Quell-Tags und Build-Skripten reproduzierbar.
FehlerWo er behandelt werden sollteEmpfohlene Reaktion
Fehlendes Quell-RepositoryVertragsvalidierung oder Merge-Stufe.Stoppen Sie den Build und korrigieren Sie die Checkout-Eingaben.
Rector-ParsefehlerTransformationsstufe.Reduzieren Sie den Fall auf ein Fixture und aktualisieren Sie die Regel oder Konfiguration.
Abweichung bei der generierten composer.json-DateiStufe der Composer-Anpassung.Korrigieren Sie das Generierungsskript, nicht die generierten Metadaten.
Fehler in der ZielsyntaxLaufzeitvalidierung.Blockieren Sie das Release, bis die Transformation korrigiert ist.
Pro-Quelle nicht verfügbarBuild-Konfiguration.Erstellen Sie das öffentliche Artefakt nur, wenn dies das beabsichtigte Ziel ist.
AspektStandardWann abweichen
Generierte AusgabeSchreibgeschütztes Artefakt.Machen Sie sie niemals zur Quelle der Wahrheit.
Branch-ModellGetrennte, dauerhafte Ziel-Branches.Halten Sie Änderungen über unabhängige Pull Requests synchron.
Build-HostModernes PHP.Über die Release-Reife entscheidet weiterhin die Validierung auf der Ziellaufzeit.
Eigene RegelnKlein und durch Fixtures abgesichert.Vermeiden Sie breite Transformationen ohne explizite before/after-Beispiele.
PHP-7.4-LaneNur Core, sofern nicht ausdrücklich unterstützt.Nehmen Sie keine Pro-Ausgabe ohne Validierung auf der Ziellaufzeit auf.
  • Tests der Rector-Regel-Metadaten instanziieren jede eigene Regel.
  • Fixture-Tests decken für jede Transformation den Code vor und nach der Umwandlung ab.
  • Der Dry-Build läuft vor den Release-Jobs.
  • Syntaxprüfungen für die Ziellaufzeit und Pakettests werden auf der generierten Ausgabe ausgeführt.
  • Composer-Metadaten-Tests prüfen Paketname, Version, Constraints, Replace-Map und Lizenz.
  • Build-Logs enthalten Quellpfade, Zielpfad, Ziellaufzeit, Dry-Run-Status und den Status der Pro-Einbindung.