İçeriğe geç

NextPDF Backport Builder'da sorun giderme

Derleme araçları — çalışma zamanı bağımlılığı DEĞİLDİR. Bu sayfadaki her belirti, bir bakımcı veya sürekli entegrasyon (CI) ana makinesindeki derleme zamanı koşuludur. Bu koşulların hiçbiri alt akıştaki uygulamalarda görülmez.

Derleme, sıralı beş aşama çalıştırır. İlk hatada durur ve aşama adını mesajla birlikte yazdırır. Aşama adını okuyun, ardından aşağıdaki eşleşen nedeni bulun. Aşamalar şunlardır: kaynakları birleştirme, Rector sürüm düşürmesini çalıştırma, composer.json oluşturma, statik varlıkları kopyalama ve çıktıyı doğrulama. scripts/build.php dosyasına göre doğrulandı (run() ve step()).

Birleştirme, dosyaları kopyalamadan önce beklenen her kaynak deposunu doğrular. Bir depo eksikse derleme durdurulur ve deponun adı ile yolu yazdırılır. PHP 8.1 hedefi şunları bekler: nextpdf, nextpdf-Artisan, nextpdf-compat-legacy, nextpdf-Laravel, nextpdf-Symfony, nextpdf-CodeIgniter ve — Pro dahil edildiğinde — nextpdf-Pro. PHP 7.4 hedefi yalnızca nextpdf bekler. scripts/merge-sources.php dosyasına göre doğrulandı (run() doğrulama döngüsü, __construct() depo eşlemesi).

Çözüm: depoları --source-dir bayrağına geçirilen yolun altında kardeş dizinler olarak çekin ve yukarıdaki tam dizin adlarını kullanın. Deneme çalıştırması, okuyacağı her depoyu listeler. Tam derlemeyi çalıştırmadan önce yerleşimi doğrulamak için bunu kullanın.

Aşama: Rector sürüm düşürmesini çalıştırma

“Aşama: Rector sürüm düşürmesini çalıştırma” başlıklı bölüm

Rector sıfırdan farklı çıkış koduyla sonlanıyor

“Rector sıfırdan farklı çıkış koduyla sonlanıyor” başlıklı bölüm

Düzenleyici Rector failed on <label> (exit code: N) iletir ve durur. Etiket, başarısız olan geçişi tanımlar: public package, pro package, enum pre-processing veya full downgrade. scripts/build.php dosyasına göre doğrulandı (runRectorPass()).

Enum varsayılanlarında varsayılan parametre çözümleyicisinin çökmesi (PHP 7.4)

“Enum varsayılanlarında varsayılan parametre çözümleyicisinin çökmesi (PHP 7.4)” başlıklı bölüm

PHP 7.4 hedefinin iki geçiş kullanmasının nedeni budur. Rector’un varsayılan parametre değeri çözümleyicisi, bir enum durumu kurucu yükseltme varsayılanı olarak kullanıldığında çöker. 1. geçiş (rector-php74-enums.php) önce enum’ları sabit listesi sınıflarına dönüştürür. Böylece 2. geçişteki tam geçiş, enum durumu varsayılanını asla görmez. Düzenleyiciyi atlayıp tam PHP 7.4 yapılandırmasını doğrudan enum içeren kaynağa karşı çalıştırırsanız bu çökme beklenir. scripts/build.php dosyasına (runRector() yorumu ve iki geçişli sıralama) ve rector/config/rector-php74-enums.php dosyasına göre doğrulandı.

rector-php81.php ve rector-php74.php, */tests/Benchmark/* dizinini atlar. Bu betikler, Rector’un çözümleyemediği harici Taşınabilir Belge Biçimi (PDF) kitaplıklarına başvurur; bu da varsayılan parametre çözümleyicisini çökertir. Bir karşılaştırma yolu işlenirse atlama glob deseni eksiktir veya yol farklıdır. withSkip() çağrılarına göre doğrulandı.

rector-php74.php, DowngradeHashAlgorithmXxHashRector kuralını atlar. Bu yerleşik kural, xxHash sabitlerinde çöker. Kaynak xxHash kullanmadığından atlama güvenlidir. rector/config/rector-php74.php dosyasına göre doğrulandı (withSkip()).

Aşama: Rector sonrası düzeltmeler (yalnızca PHP 7.4)

“Aşama: Rector sonrası düzeltmeler (yalnızca PHP 7.4)” başlıklı bölüm

Düzeltmeler iki geçiş arasında çalışır. Enum’dan sınıfa kuralının bıraktığı kalıpları yeniden yazarlar. PHP 7.4 çıktısında EnumClass::Case->value, ->name, örnek yöntemi olarak çağrılan eski bir enum yöntemi veya çözümlenmemiş bir türde adlandırılmış bir argüman içeren bir ayrıştırma hatası varsa düzeltme o kalıpla eşleşmemiştir. Clone-with sınırlaması burada da geçerlidir: argüman eşleştirmesi özyinelemeli değildir, bu nedenle iç içe parantezler içeren bir geçersiz kılma değeri yeniden yazılmaz. scripts/build.php dosyasına (postProcessFixups(), fixEnumMethodCallSites(), applyFixups()) ve rector/rules/DowngradeCloneWithRector.php dosyasına göre doğrulandı (belgelenmiş sınırlama).

Bu aşama, işlenen src/ ve tests/ dizinlerini derleme-temp dizininden çıktı dizinine taşır. Ardından oluşturulan composer.json dosyasını yazar. Buradaki bir hata neredeyse her zaman dosya sistemi koşulundan kaynaklanır: çıktı dizini yazılabilir değildir veya Rector hiçbir şey üretmediği için derleme-temp ağacı eksiktir. scripts/build.php dosyasına göre doğrulandı (adjustComposer(), moveTree()).

Bu aşama, çekirdek kaynak deposundan LICENSE dosyasını kopyalar ve oluşturulan bir CHANGELOG.md yazar. LICENSE yoksa kopyalama sessizce atlanır ve derleme devam eder; değişiklik günlüğü her zaman yazılır. Buradaki bir hata, çıktı dizininin derleme sırasında yazılamaz hale geldiği anlamına gelir. scripts/build.php dosyasına göre doğrulandı (copyStaticAssets()).

Çıktı dizini eksik veya boşsa doğrulama aşaması şu hataları verir: “Output src/ directory not found” / “No PHP files found in output”

“Çıktı dizini eksik veya boşsa doğrulama aşaması şu hataları verir: “Output src/ directory not found” / “No PHP files found in output”” başlıklı bölüm

Doğrulama, boş olmayan bir output/src gerektirir. Boş bir ağaç, birleştirmenin hiçbir şey kopyalamadığı veya dosya taşımanın başarısız olduğu anlamına gelir. scripts/build.php dosyasına göre doğrulandı (validateOutput()).

”Syntax validation: skipped (requires PHP runtime)”

“”Syntax validation: skipped (requires PHP runtime)”” başlıklı bölüm

Bu beklenen bir durumdur, hata değildir. Derleme ana makinesi hedef çalışma zamanını değil, modern PHP’yi çalıştırır; bu nedenle yerel aşama yalnızca dosyaları sayar ve gerçek sözdizimi denetimi için Docker komutunu yazdırır. Yetkili sözdizimi kapısı, sürüm iş akışındaki derleme sonrası php -l adımıdır; bu adım gerçek hedef çalışma zamanı altında çalışır. scripts/build.php dosyasına (validateOutput()) ve .github/workflows/build.yml dosyasına (PHP 8.1 / PHP 7.4 sözdizimi denetimi adımları) göre doğrulandı.

Bu sınırlamalar, sürüm düşürme yaklaşımının doğasında vardır. Kurallara ve projenin README.md “Known Limitations” bölümüne göre doğrulanmıştır:

  • Salt okunur özellikler kaldırılır. Derleme, clone-with genişlemesinin eski çalışma zamanında özellikleri açıkça atayabilmesi için readonly ifadesini kaldırır. Sürümü düşürülen çıktı, çalışma zamanında zorunlu kılınan değişmezliği artık sağlamaz.
  • #[Override] PHP 8.1’de zorunlu kılınmaz. Öznitelik kalabilir, ancak eski çalışma zamanı buna göre işlem yapmaz.
  • PHP 7.4 hedefi yalnızca çekirdeği içerir. Çerçeve adaptörleri, tcpdf uyumluluk katmanı ve Pro, derleme betiğinin yapısı gereği PHP 7.4 dağıtımının dışında tutulur.
  • Pro ayrı bir pakettir ve yalnızca PHP 8.1 içindir. PHP 7.4 Pro derlemesi yoktur.
  • Clone-with argüman eşleştirmesi özyinelemeli değildir. İç içe parantezler içeren geçersiz kılma değerleri dönüştürülmez ve yalnızca dize dizi anahtarları özellik adlarına çözümlenir.
  • /integrations/backport/configuration/ — kural ve bayrak başvurusu.
  • /integrations/backport/production-usage/ — CI kapısı ve sürüm hatları.