Przejdź do głównej zawartości

Przewodnik dla deweloperów Backport Builder

Backport Builder jest projektem inżynierii wydań. Repozytoria źródłowe traktuj jako dane wejściowe, wygenerowane drzewa jako dane wyjściowe, a niestandardowe reguły Rector jako przetestowaną logikę kompilacji.

Sięgaj do tego przewodnika, gdy utrzymujesz reguły obniżania wersji, metadane generowanych pakietów, kontrole środowiska docelowego lub automatyzację wydań dla nextpdf/backport-builder.

WarstwaNależy doOdpowiedzialnośćNie umieszczaj tu
Repozytoria źródłoweRepozytoria produktuWiarygodne źródło kodu PHP i testów.Wygenerowane zmiany obniżające wersję.
Skrypty kompilacjinextpdf/backport-builderScalają źródła, uruchamiają transformacje, zapisują metadane i weryfikują dane wyjściowe.Logika aplikacji w czasie wykonywania.
Konfiguracja Rectornextpdf/backport-builderReguły obniżania wersji właściwe dla środowiska docelowego.Niesprawdzone założenia obejmujące wiele środowisk docelowych.
Niestandardowe reguły Rectornextpdf/backport-builderTransformacje składni właściwe dla projektu.Szerokie, nieprzetestowane przepisania.
Wygenerowane pakietyDane wyjściowe kompilacjiInstalowalne artefakty dla starszych środowisk uruchomieniowych.Ręczne poprawki traktowane jako wiarygodne źródło.
EtapZachowanieDziałanie dewelopera
Pobranie źródłaProces wydania pobiera repozytoria źródłowe dla tagu docelowego.Utrzymuj spójne referencje źródłowe we wszystkich pakietach.
Walidacja kontraktuValidateBuildContract::run() sprawdza założenia kompilacji.Traktuj niespełniony kontrakt jako blokujący wydanie.
ScalanieMergeSources::run() tworzy drzewo pakietu docelowego.Zweryfikuj zakres docelowy przed uruchomieniem Rector.
TransformacjaKonfiguracje Rector i niestandardowe reguły obniżają składnię do wymaganej wersji.Dodawaj testy z danymi przykładowymi do każdej zmiany reguły.
Dostosowanie ComposerAdjustComposer zapisuje metadane wygenerowanego pakietu i mapy zastąpień.Zweryfikuj nazwy pakietów, wersje, licencje i ograniczenia.
Walidacja środowiska uruchomieniowegoWygenerowane dane wyjściowe są sprawdzane pod kątem składni i testowane na docelowych wersjach PHP.Traktuj błąd w środowisku docelowym jako blokujący wydanie.
WydanieDo wydania dołączane są archiwa.Nie traktuj wygenerowanych danych wyjściowych jako wiarygodnego źródła i nie poprawiaj ich ręcznie.
Element pracyWiarygodne źródłoZasady dotyczące wygenerowanych danych wyjściowych
Użycie funkcji PHPGłówne repozytorium źródłowe.Reguły backportu dostosowują użycie funkcji.
Ograniczenia zależnościMetadane źródłowe composer.json oraz skrypt dostosowujący.Wygenerowany composer.json musi być odtwarzalny.
Obniżanie wersji składniKonfiguracja Rector i niestandardowe reguły.Wygenerowanego źródła nie należy edytować ręcznie.
Wsparcie środowiska uruchomieniowegoGałąź docelowa i macierz CI.Kompilacja musi przejść na docelowym PHP.
Informacje o wydaniuDokumentacja i automatyzacja wydań.Wygenerowane artefakty powinny odsyłać do wydania źródłowego.

Każda niestandardowa reguła powinna mieć wąsko określony cel, metadane i pokrycie danymi przykładowymi.

Metoda regułyCelWymaganie jakościowe
getRuleDefinition()Dokumentuje transformację na potrzeby narzędzi Rector.Dołącz próbkę before/after odpowiadającą rzeczywistemu obniżeniu wersji.
getNodeTypes()Ogranicza węzły AST sprawdzane przez regułę.Utrzymuj listę węzłów możliwie najkrótszą.
refactor()Stosuje transformację lub zwraca węzeł bez zmian.Niepowiązane węzły pozostaw bez zmian, a zachowanie utrzymuj deterministyczne.
Test z danymi przykładowymiWeryfikuje dane wyjściowe before/after.Uwzględnij najmniejsze prawidłowe dane wejściowe i co najmniej jeden przypadek pominięcia.
<?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);
}
}

Używaj uruchomień próbnych podczas programowania i walidacji kandydata do wydania. Zapisuj rzeczywiste dane wyjściowe tylko wtedy, gdy referencje źródłowe i gałąź docelowa są ustalone.

Okno terminala
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

Uruchamiaj walidację wygenerowanego pakietu w docelowym środowisku uruchomieniowym, a nie tylko na nowoczesnym hoście kompilacji.

Punkt rozszerzeńZastosowanieOgraniczenie
Pliki konfiguracji RectorZasady obniżania wersji właściwe dla środowiska docelowego.Utrzymuj oddzielne ścieżki dla PHP 8.1 i PHP 7.4.
Niestandardowe reguły RectorTransformacje składni właściwe dla projektu.Muszą mieć metadane i testy z danymi przykładowymi.
Skrypt dostosowujący ComposerTożsamość wygenerowanego pakietu.Musi zachować wersjonowanie zgodne z SemVer.
Skrypt scalającyWybieranie i kształtowanie wejściowych pakietów źródłowych.Musi rejestrować katalogi główne źródeł i katalogi główne danych wyjściowych.
Proces kompilacjiOrkiestracja wydania.Musi walidować wygenerowane dane wyjściowe w docelowym środowisku uruchomieniowym.
  1. Odtwórz nieobsługiwaną składnię w minimalnych danych przykładowych.
  2. Dodaj lub zaktualizuj niestandardową regułę Rector.
  3. Dodaj dane przykładowe before/after dla reguły.
  4. Uruchom kompilację próbną.
  5. Zwaliduj wygenerowane dane wyjściowe w docelowym środowisku uruchomieniowym PHP.
  6. Zastosuj tę samą zmianę logiczną w każdej trwałej gałęzi docelowej, gdy jest to wymagane.
  7. Dbaj o to, aby artefakty wydania były odtwarzalne na podstawie tagów źródłowych i skryptów kompilacji.
AwariaGdzie obsłużyćZalecana reakcja
Brak repozytorium źródłowegoEtap walidacji kontraktu lub scalania.Zatrzymaj kompilację i napraw dane wejściowe etapu pobierania.
Błąd parsowania RectorEtap transformacji.Sprowadź problem do danych przykładowych i zaktualizuj regułę lub konfigurację.
Wygenerowany composer.json jest niezgodnyEtap dostosowania Composer.Napraw skrypt generujący, a nie wygenerowane metadane.
Awaria składni docelowejWalidacja środowiska uruchomieniowego.Zablokuj wydanie, dopóki transformacja nie zostanie poprawiona.
Niedostępne źródło ProKonfiguracja kompilacji.Buduj artefakt publiczny tylko wtedy, gdy jest to zamierzony cel.
ZagadnienieWartość domyślnaKiedy zmienić
Wygenerowane dane wyjścioweArtefakty tylko do odczytu.Nigdy nie traktuj ich jako wiarygodnego źródła.
Model gałęziOddzielne trwałe gałęzie docelowe.Synchronizuj zmiany za pomocą osobnych pull requestów.
Host kompilacjiNowoczesny PHP.O gotowości do wydania nadal decyduje walidacja docelowego środowiska uruchomieniowego.
Niestandardowe regułyNiewielkie i poparte danymi przykładowymi.Unikaj szerokich transformacji bez jawnych przykładów before/after.
Ścieżka PHP 7.4Tylko Core, chyba że jest jawnie obsługiwana.Nie dołączaj danych wyjściowych Pro bez walidacji docelowego środowiska uruchomieniowego.
  • Testy metadanych reguł Rector tworzą instancję każdej niestandardowej reguły.
  • Testy z danymi przykładowymi obejmują kod before/after dla każdej transformacji.
  • Kompilacja próbna jest uruchamiana przed zadaniami wydania.
  • Kontrole składni w docelowym środowisku uruchomieniowym i testy pakietów są uruchamiane na wygenerowanych danych wyjściowych.
  • Testy metadanych Composer sprawdzają nazwę pakietu, wersję, ograniczenia, mapę zastąpień i licencję.
  • Dzienniki kompilacji zawierają ścieżki źródłowe, ścieżkę docelową, docelowe środowisko uruchomieniowe, informację, czy uruchomienie było próbne, oraz status dołączenia Pro.