Salta ai contenuti

Guida per sviluppatori del Backport Builder

Il Backport Builder è un progetto di release engineering. Trattare i repository di origine come input, gli alberi generati come output e le regole Rector personalizzate come logica di build coperta da test.

Usare questa guida per gestire le regole di downgrade, i metadati dei pacchetti generati, i controlli del runtime di destinazione o l’automazione delle release relativa a nextpdf/backport-builder.

LivelloDi proprietà diResponsabilitàDa non inserire qui
Repository di origineRepository di prodottoCodice sorgente PHP autorevole e relativi test.Modifiche di downgrade generate.
Script di buildnextpdf/backport-builderUnire le fonti, eseguire le trasformazioni, scrivere i metadati, convalidare l’output.Logica applicativa di runtime.
Configurazione Rectornextpdf/backport-builderCriteri di downgrade specifici per destinazione.Assunzioni cross-target senza test.
Regole Rector personalizzatenextpdf/backport-builderTrasformazioni sintattiche specifiche del progetto.Riscritture ampie e non testate.
Pacchetti generatiOutput della buildArtefatti installabili su runtime meno recenti.Patch manuali alla fonte di verità.
FaseComportamentoAzione dello sviluppatore
Checkout dell’origineIl workflow di release esegue il checkout dei repository di origine sul tag di destinazione.Mantenere allineati i riferimenti di origine tra i pacchetti.
Convalida del contrattoValidateBuildContract::run() verifica le assunzioni della build.Considerare un errore del contratto come bloccante per la release.
UnioneMergeSources::run() assembla l’albero del pacchetto di destinazione.Verificare l’ambito di destinazione prima di eseguire Rector.
TrasformazioneLe configurazioni Rector e le regole personalizzate effettuano il downgrade della sintassi.Aggiungere fixture di test per ogni modifica a una regola.
Adeguamento di ComposerAdjustComposer scrive i metadati del pacchetto generato e le mappe replace.Convalidare nome del pacchetto, versione, licenza e vincoli.
Convalida del runtimeL’output generato viene sottoposto a controllo di sintassi e a test sulle versioni PHP di destinazione.Considerare un errore sul runtime di destinazione come bloccante per la release.
ReleaseGli archivi vengono allegati a una release.Non applicare patch all’output generato come se fosse la fonte di verità.
Elemento di lavoroFonte di veritàCriteri per l’output generato
Uso delle funzionalità PHPRepository di origine principale.Le regole di backport adattano la funzionalità.
Vincoli delle dipendenzeMetadati del composer.json di origine e script di adeguamento.Il file composer.json generato deve essere riproducibile.
Downgrade della sintassiConfigurazione Rector e regole personalizzate.Il codice sorgente generato non deve essere modificato manualmente.
Supporto del runtimeBranch di destinazione e matrice CI.La build deve riuscire con il PHP di destinazione.
Note di releaseDocumentazione e automazione delle release.Gli artefatti generati devono rimandare alla release di origine.

Ogni regola personalizzata deve avere uno scopo circoscritto, metadati e copertura tramite fixture.

Metodo della regolaScopoRequisito di qualità
getRuleDefinition()Documenta la trasformazione per gli strumenti Rector.Includere un esempio before/after allineato al downgrade reale.
getNodeTypes()Limita i nodi AST ispezionati dalla regola.Mantenere l’elenco dei nodi il più piccolo possibile.
refactor()Applica la trasformazione oppure restituisce il nodo invariato.Lasciare invariati e gestire in modo deterministico i nodi non interessati.
Test fixtureVerifica l’output before/after.Coprire l’input valido minimo e almeno un caso di skip.
<?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);
}
}

Usare esecuzioni dry-run durante lo sviluppo e la convalida dei release candidate. Usare l’output reale solo quando i riferimenti di origine e il branch di destinazione sono noti.

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

La convalida del pacchetto generato deve essere eseguita sul runtime di destinazione, non soltanto sull’host di build moderno.

Punto di estensioneUsarlo perVincolo
File di configurazione RectorCriteri di downgrade specifici per destinazione.Tenere separate le corsie PHP 8.1 e PHP 7.4.
Regole Rector personalizzateTrasformazioni di sintassi specifiche del progetto.Devono avere metadati e test fixture.
Script di adeguamento di ComposerIdentità del pacchetto generato.Deve preservare la versione allineata a SemVer.
Script di unioneSelezione e modellazione dell’input dei pacchetti di origine.Deve registrare le radici di origine e di output.
Workflow di buildOrchestrazione della release.Deve convalidare l’output generato sul runtime di destinazione.
  1. Riprodurre la sintassi non supportata in una fixture minima.
  2. Aggiungere o aggiornare una regola Rector personalizzata.
  3. Aggiungere fixture before/after per la regola.
  4. Eseguire la build dry-run.
  5. Convalidare l’output generato sul runtime PHP di destinazione.
  6. Applicare la stessa modifica logica a ciascun branch di destinazione permanente, quando necessario.
  7. Mantenere gli artefatti di release riproducibili a partire dai tag di origine e dagli script di build.
ErroreDove deve essere gestitoRisposta consigliata
Repository di origine mancanteFase di convalida del contratto o di unione.Arrestare la build e correggere gli input di checkout.
Errore di parsing di RectorFase di trasformazione.Ridurre il caso a una fixture e aggiornare la regola o la configurazione.
Mancata corrispondenza del composer.json generatoFase di adeguamento di Composer.Correggere lo script di generazione, non i metadati generati.
Errore di sintassi della destinazioneConvalida del runtime.Bloccare la release finché la trasformazione non è corretta.
Origine Pro non disponibileConfigurazione della build.Generare l’artefatto pubblico solo quando è la destinazione prevista.
AspettoImpostazione predefinitaQuando eseguire l’override
Output generatoArtefatto di sola lettura.Non renderlo mai la fonte di verità.
Modello di branchBranch di destinazione permanenti separati.Mantenere le modifiche sincronizzate tramite pull request indipendenti.
Host di buildPHP moderno.La convalida del runtime di destinazione determina comunque se la release è pronta.
Regole personalizzatePiccole e supportate da fixture.Evitare trasformazioni ampie senza esempi before/after espliciti.
Corsia PHP 7.4Solo Core a meno che non sia supportato esplicitamente.Non includere l’output Pro senza la convalida del runtime di destinazione.
  • I test sui metadati delle regole Rector istanziano ogni regola personalizzata.
  • I test tramite fixture coprono il codice before e after per ciascuna trasformazione.
  • La build dry-run viene eseguita prima dei job di release.
  • I controlli di sintassi del runtime di destinazione e i test del pacchetto vengono eseguiti sull’output generato.
  • I test sui metadati di Composer verificano nome del pacchetto, versione, vincoli, mappa replace e licenza.
  • I log di build includono percorsi di origine, percorso di destinazione, runtime di destinazione, stato dry-run e stato di inclusione di Pro.