Pular para o conteúdo

Guia do desenvolvedor para o Backport Builder

O Backport Builder é um projeto de engenharia de release. Trate os repositórios de origem como entradas, as árvores geradas como saídas e as regras personalizadas do Rector como lógica de build testada.

Use este guia quando você mantiver regras de downgrade, metadados de pacotes gerados, verificações de runtime de destino ou automação de release para nextpdf/backport-builder.

CamadaPertence aResponsabilidadeNão coloque aqui
Repositórios de origemRepositórios do produtoCódigo-fonte PHP e testes autoritativos.Edições de downgrade geradas.
Scripts de buildnextpdf/backport-builderMescla a origem, executa transformações, grava metadados e valida a saída.Lógica de aplicação em runtime.
Configuração do Rectornextpdf/backport-builderPolítica de downgrade específica para o destino.Suposições entre destinos sem testes.
Regras personalizadas do Rectornextpdf/backport-builderTransformações de sintaxe específicas do projeto.Reescritas amplas sem testes.
Pacotes geradosSaída do buildArtefatos instaláveis para runtimes mais antigos.Patches manuais na fonte de verdade.
EtapaComportamentoAção do desenvolvedor
Checkout da origemO workflow de release faz checkout dos repositórios de origem na tag de destino.Mantenha as referências de origem alinhadas entre os pacotes.
Validação do contratoValidateBuildContract::run() verifica as suposições do build.Trate um contrato com falha como bloqueador de release.
MesclagemMergeSources::run() monta a árvore do pacote de destino.Verifique o escopo de destino antes de executar o Rector.
TransformaçãoAs configurações do Rector e as regras personalizadas fazem o downgrade da sintaxe.Adicione testes de fixture para cada alteração de regra.
Ajuste do ComposerAdjustComposer grava os metadados do pacote gerado e os mapas de replace.Valide nomes, versões, licenças e restrições dos pacotes.
Validação em runtimeA saída gerada passa por verificação de sintaxe e é testada nas versões de PHP de destino.Trate uma falha no runtime de destino como bloqueador de release.
ReleaseOs arquivos compactados são anexados a uma release.Não aplique patches na saída gerada como fonte de verdade.
Item de trabalhoFonte de verdadePolítica de saída gerada
Uso de recursos do PHPRepositório de origem principal.As regras de backport adaptam o recurso.
Restrições de dependênciasMetadados do composer.json de origem mais o script de ajuste.O composer.json gerado deve ser reproduzível.
Downgrade de sintaxeConfiguração do Rector e regras personalizadas.O código-fonte gerado não deve ser editado manualmente.
Suporte de runtimeBranch de destino e matriz de CI.O build deve passar no PHP de destino.
Notas de releaseDocumentação e automação de release.Os artefatos gerados devem ter um link de volta para a release de origem.

Cada regra personalizada deve ter um propósito restrito, metadados e cobertura por fixture.

Método da regraPropósitoRequisito de qualidade
getRuleDefinition()Documenta a transformação para o tooling do Rector.Inclua uma amostra before/after que corresponda ao downgrade real.
getNodeTypes()Limita os nós da AST inspecionados pela regra.Mantenha a lista de nós a menor possível.
refactor()Aplica a transformação ou retorna sem alterações.Mantenha os nós não relacionados inalterados e determinísticos.
Teste de fixtureVerifica a saída before/after.Cubra a menor entrada válida e pelo menos um caso de 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);
}
}

Use execuções dry-run durante o desenvolvimento e a validação de candidatos a release. Grave a saída real somente quando as referências de origem e o branch de destino forem conhecidos.

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

Execute a validação do pacote gerado no runtime de destino, não apenas no host de build moderno.

Ponto de extensãoUse paraRestrição
Arquivos de configuração do RectorPolítica de downgrade específica para o destino.Mantenha as faixas de PHP 8.1 e PHP 7.4 separadas.
Regras personalizadas do RectorTransformações de sintaxe específicas do projeto.Devem ter metadados e testes de fixture.
Script de ajuste do ComposerIdentidade do pacote gerado.Deve preservar o versionamento alinhado ao SemVer.
Script de mesclagemSelecionar e moldar a entrada do pacote de origem.Deve registrar em log as raízes de origem e de saída.
Workflow de buildOrquestração de release.Deve validar a saída gerada no runtime de destino.
  1. Reproduza a sintaxe não suportada em um fixture mínimo.
  2. Adicione ou atualize uma regra personalizada do Rector.
  3. Adicione fixtures before/after para a regra.
  4. Execute o build dry.
  5. Valide a saída gerada no runtime de PHP de destino.
  6. Aplique a mesma alteração lógica a cada branch de destino permanente quando necessário.
  7. Mantenha os artefatos de release reproduzíveis a partir das tags de origem e dos scripts de build.
FalhaOnde deve ser tratadaResposta recomendada
Repositório de origem ausenteEtapa de validação do contrato ou de mesclagem.Pare o build e corrija as entradas de checkout.
Falha de parse do RectorEtapa de transformação.Reduza a um fixture e atualize a regra ou a configuração.
Incompatibilidade do composer.json geradoEtapa de ajuste do Composer.Corrija o script de geração, não os metadados gerados.
Falha de sintaxe no destinoValidação em runtime.Bloqueie a release até que a transformação seja corrigida.
Origem Pro indisponívelConfiguração do build.Crie o artefato público somente quando esse for o destino pretendido.
PreocupaçãoPadrãoQuando substituir
Saída geradaArtefato somente leitura.Nunca a transforme na fonte de verdade.
Modelo de branchesBranches de destino permanentes e separados.Mantenha as alterações sincronizadas por meio de pull requests independentes.
Host de buildPHP moderno.A validação no runtime de destino ainda decide a prontidão da release.
Regras personalizadasPequenas e apoiadas por fixtures.Evite transformações amplas sem exemplos before/after explícitos.
Faixa de PHP 7.4Apenas Core, a menos que seja explicitamente suportado.Não inclua a saída Pro sem validação no runtime de destino.
  • Os testes de metadados das regras do Rector instanciam cada regra personalizada.
  • Os testes de fixture cobrem o código before e after de cada transformação.
  • O build dry é executado antes dos jobs de release.
  • As verificações de sintaxe do runtime de destino e os testes de pacote são executados na saída gerada.
  • Os testes de metadados do Composer asseguram o nome do pacote, a versão, as restrições, o mapa de replace e a licença.
  • Os logs de build incluem os caminhos de origem, o caminho de destino, o runtime de destino, o estado de dry-run e o estado de inclusão do Pro.