Ga naar inhoud

Ontwikkelaarsgids voor Backport Builder

Backport Builder is een project voor release engineering. Behandel bronrepository’s als invoer, gegenereerde bestandsstructuren als uitvoer en aangepaste Rector-regels als geteste buildlogica.

Gebruik deze gids wanneer je downgraderegels, gegenereerde pakketmetadata, target-runtimecontroles of release-automatisering voor nextpdf/backport-builder onderhoudt.

LaagEigenaarVerantwoordelijkheidHoort hier niet thuis
Bronrepository’sProductrepo’sGezaghebbende PHP-broncode en tests.Gegenereerde downgradewijzigingen.
Buildscriptsnextpdf/backport-builderBronnen samenvoegen, transformaties uitvoeren, metadata schrijven en uitvoer valideren.Runtime-applicatielogica.
Rector-configuratienextpdf/backport-builderTargetspecifiek downgradebeleid.Targetoverschrijdende aannames zonder tests.
Aangepaste Rector-regelsnextpdf/backport-builderProjectspecifieke syntactische transformaties.Brede, ongeteste herschrijvingen.
Gegenereerde pakkettenBuilduitvoerInstalleerbare artefacten voor oudere runtimes.Handmatige patches op de source of truth.
FaseGedragActie voor ontwikkelaar
Bronnen uitcheckenDe release-workflow checkt bronrepository’s uit op de target-tag.Houd bronreferenties over alle pakketten heen op elkaar afgestemd.
ContractvalidatieValidateBuildContract::run() controleert de buildaannames.Behandel een mislukt contract als release-blokkerend.
SamenvoegenMergeSources::run() stelt de target-pakketstructuur samen.Controleer de target-scope voordat Rector wordt uitgevoerd.
TransformerenRector-configuraties en aangepaste regels downgraden de syntaxis.Voeg fixturetests toe voor elke regelwijziging.
Composer-aanpassingAdjustComposer schrijft gegenereerde pakketmetadata en replace-maps.Valideer pakketnamen, versies, licenties en constraints.
RuntimevalidatieDe gegenereerde uitvoer wordt gecontroleerd op syntaxis en getest op de target-PHP-versies.Behandel een fout in de target-runtime als release-blokkerend.
ReleaseArchieven worden aan een release gekoppeld.Patch de gegenereerde uitvoer niet als source of truth.
WerkitemSource of truthBeleid voor gegenereerde uitvoer
Gebruik van PHP-featuresHoofdbronrepo.Backportregels passen de feature aan.
AfhankelijkheidsconstraintsBronmetadata uit composer.json plus het aanpassingsscript.De gegenereerde composer.json moet reproduceerbaar zijn.
SyntaxisdowngradeRector-configuratie en aangepaste regels.Gegenereerde broncode mag niet handmatig worden bewerkt.
Runtime-ondersteuningTarget-branch en CI-matrix.De build moet slagen op de target-PHP-runtime.
ReleaseopmerkingenDocumentatie en release-automatisering.Gegenereerde artefacten moeten terugverwijzen naar de bronrelease.

Elke aangepaste regel moet een nauw afgebakend doel, metadata en fixturedekking hebben.

RegelmethodeDoelKwaliteitseis
getRuleDefinition()Documenteert de transformatie voor de Rector-tooling.Voeg een before/after-voorbeeld toe dat overeenkomt met de werkelijke downgrade.
getNodeTypes()Beperkt de AST-knooppunten die de regel inspecteert.Houd de lijst met knooppunten zo klein mogelijk.
refactor()Past de transformatie toe of geeft het knooppunt ongewijzigd terug.Laat niet-gerelateerde knooppunten ongewijzigd en behoud deterministisch gedrag.
FixturetestVerifieert de before/after-uitvoer.Dek de kleinste geldige invoer en ten minste één skip-geval af.
<?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);
}
}

Gebruik dry runs tijdens de ontwikkeling en de validatie van releasekandidaten. Schrijf pas echte uitvoer wanneer de bronreferenties en de target-branch bekend zijn.

Terminal window
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

Valideer gegenereerde pakketten op de target-runtime, niet alleen op de moderne buildhost.

UitbreidingspuntGebruik voorConstraint
Rector-configuratiebestandenTargetspecifiek downgradebeleid.Houd de PHP 8.1- en PHP 7.4-jobs gescheiden.
Aangepaste Rector-regelsProjectspecifieke syntactische transformaties.Moet metadata en fixturetests hebben.
Composer-aanpassingsscriptIdentiteit van het gegenereerde pakket.Moet SemVer-conforme versievoering behouden.
SamenvoegscriptDe invoer van het bronpakket selecteren en vormgeven.Moet de bronroots en uitvoerroots loggen.
BuildworkflowRelease-orkestratie.Moet de gegenereerde uitvoer valideren op de target-runtime.
  1. Reproduceer de niet-ondersteunde syntaxis in een minimale fixture.
  2. Voeg een aangepaste Rector-regel toe of werk deze bij.
  3. Voeg before/after-fixtures toe voor de regel.
  4. Voer de dry build uit.
  5. Valideer de gegenereerde uitvoer op de target-PHP-runtime.
  6. Pas dezelfde logische wijziging toe op elke permanente target-branch wanneer dat nodig is.
  7. Houd releaseartefacten reproduceerbaar vanuit brontags en buildscripts.
FoutWaar deze moet worden afgehandeldAanbevolen reactie
Ontbrekende bronrepoContractvalidatie- of samenvoegfase.Stop de build en corrigeer de checkout-invoer.
Rector-parsefoutTransformatiefase.Herleid de fout tot een fixture en werk de regel of configuratie bij.
Gegenereerde composer.json komt niet overeenComposer-aanpassingsfase.Corrigeer het generatiescript, niet de gegenereerde metadata.
Target-syntaxisfoutRuntimevalidatie.Blokkeer de release totdat de transformatie is gecorrigeerd.
Pro-bron niet beschikbaarBuildconfiguratie.Bouw alleen een publiek artefact als dat de bedoelde target is.
AandachtspuntStandaardWanneer overschrijven
Gegenereerde uitvoerAlleen-lezen artefact.Maak die nooit de source of truth.
BranchmodelAfzonderlijke permanente target-branches.Houd wijzigingen gesynchroniseerd via onafhankelijke pull requests.
BuildhostModerne PHP.De target-runtimevalidatie bepaalt nog steeds de releasegereedheid.
Aangepaste regelsKlein en gedekt door fixtures.Vermijd brede transformaties zonder expliciete before/after-voorbeelden.
PHP 7.4-jobAlleen Core, tenzij expliciet ondersteund.Neem geen Pro-uitvoer op zonder target-runtimevalidatie.
  • Metadatatests voor Rector-regels instantiëren elke aangepaste regel.
  • Fixturetests dekken de before- en after-code voor elke transformatie af.
  • De dry build draait vóór de release-jobs.
  • Syntaxiscontroles op de target-runtime en pakkettests draaien op de gegenereerde uitvoer.
  • Composer-metadatatests verifiëren de pakketnaam, versie, constraints, replace-map en licentie.
  • Buildlogs bevatten bronpaden, het target-pad, de target-runtime, de dry-run-status en de status van Pro-opname.