İçeriğe geç

NextPDF Backport Builder'a genel bakış

Çalışma zamanı bağımlılığı değil, bir derleme araç takımıdır. NextPDF bakımcıları, NextPDF’in PHP 8.1+ ve PHP 7.4+ uyumlu dağıtımlarını üretmek için bu paketi kullanır. Uygulamalar, bu paketi asla çalışma zamanı bağımlılığı olarak eklememelidir.

NextPDF Backport Builder, NextPDF ekosisteminin sürümü düşürülmüş dağıtımlarını, geliştirmede temel alınan sürümden daha eski PHP çalışma zamanları için üreten derleme altyapısıdır. NextPDF modern bir PHP sürümü için yazılmıştır ve daha eski yorumlayıcıların reddettiği söz dizimini kullanır. Builder, kaynağı soyut söz dizimi ağaçlarını dönüştüren bir motor olan Rector üzerinden geçirir ve PHP 8.1 ya da PHP 7.4 çalışma zamanının kabul edeceği söz dizimine sahip paketler üretir.

Composer paketinin adı nextpdf/backport-builder şeklindedir. "type": "project" bildirir ve hiçbir NextPDF çalışma zamanı bağımlılığı taşımaz. Gereksinimleri yalnızca derleme motoru (rector/rector), statik analiz (phpstan/phpstan), test çalıştırıcısı (phpunit/phpunit) ve üretilen çıktıda kullanılan bir grup symfony/polyfill-* paketiyle sınırlıdır. Bu durum, depo kökündeki composer.json tarafından doğrulanır.

Bu depo NextPDF motorunu içermez. Bu motoru backport edilmiş biçime dönüştüren kuralları ve betikleri içerir. Bu ayrımın üç pratik etkisi vardır:

  • PDF’leri işlemek için bunu kurmazsınız. Bu builder’ın ürettiği yapıt olan nextpdf/backport paketini kurun. Builder’ı bakımcı veya sürekli entegrasyon (CI) ana makinesinde tutun.
  • Üretilen kod üzerinde geliştirme yapmazsınız. Üretilen dağıtım, makine tarafından oluşturulan, salt okunur bir yapıttır. Hata raporlarını ve özellik isteklerini özgün nextpdf/* kaynak depolarına gönderin.
  • Çıktı, bu deponun dalları olarak değil, sürüm etiketleri olarak yayımlanır. Sürüm yayımlama hattı, üretilen ağacı etiketler ve arşivleri bir GitHub sürümüne ekler.

Builder, adları ve lisansları scripts/adjust-composer.php tarafından belirlenen Composer paketleri üretir:

Üretilen paketLisansKapsamNe zaman derlenir
nextpdf/backportApache-2.0PHP 8.1 hedefi için Core, çerçeve adaptörleri ve tcpdf uyumluluk katmanıHer zaman
nextpdf/backport-proproprietaryAyrı bir paket olarak üretilen Pro modülüPHP 8.1 hedefi; Pro kaynağı mevcut olduğunda ve Pro hariç tutulmadığında

Kurulumdan sonra nextpdf/backport paketi, özgün paket kısıtlamalarını karşılayacak biçimde Composer replace girdileri bildirir. PHP 8.1 hedefi için değiştirilen paketler nextpdf/core, nextpdf/artisan, nextpdf/laravel, nextpdf/symfony, nextpdf/codeigniter ve nextpdf/compat-legacy paketleridir. PHP 7.4 hedefi için yalnızca nextpdf/core değiştirilir, çünkü PHP 7.4 derlemesi yalnızca core’u içerir. Bu, scripts/adjust-composer.php (buildReplace()) tarafından doğrulanır.

Bir tüketicinin otomatik yükleyicisi, birleştirilmiş ağacı tek bir PHP Standards Recommendation 4 (PSR-4) ön eki olan NextPDF\ ile, yani src/ dizinine eşlenen ön ek aracılığıyla çözer. PSR-4, bir ad alanı ön ekini bir temel dizine eşler ve tam nitelikli her sınıf adını bu dizinin altındaki bir dosyaya çözer; bkz. PHP framework Interop Group (PHP-FIG) PSR-4. Pro paketi, NextPDF\Pro\ ön ekini kendi src/ dizinine eşler.

Aşağıdaki matris yalnızca Rector yapılandırmalarının ve derleme betiklerinin zorunlu kıldığı değerleri kapsar. Derleme ana makinesi her zaman modern bir PHP sürümü çalıştırır. Çıktı ise daha eski bir sürümü hedefler.

KonuDeğerKanıt
Derleme ana makinesi PHP>=8.4 <9.0composer.jsonrequire.php
CI build/test PHP8.5.github/workflows/0-ci.yml, build.yml (shivammathur/setup-phpphp-version: '8.5')
PHP 8.1 hedef çıktı kısıtlaması>=8.1 <8.5scripts/adjust-composer.php (generatePublicComposer())
PHP 7.4 hedef çıktı kısıtlaması>=7.4 <8.1scripts/adjust-composer.php (generatePublicComposer())
PHP 8.1 hedef kapsamıCore + Artisan + Laravel + Symfony + CodeIgniter + compat-legacy (+ ayrı olarak Pro)scripts/merge-sources.php, scripts/adjust-composer.php
PHP 7.4 hedef kapsamıYalnızca Corescripts/build.php (--target=php74 yalnızca core’u zorlar, Pro devre dışı bırakılır)

PHP 8.1 derlemesi PHP 8.1, 8.2, 8.3 ve 8.4 üzerinde doğrulanır. PHP 7.4 derlemesi PHP 7.4 ve 8.0 üzerinde doğrulanır. validate-php81 ve validate-php74 iş matrisleri, bunu .github/workflows/build.yml içinde doğrular. Bunlar hattın denediği çalışma zamanlarıdır; bir uyumluluk iddiası değil, gözlemlenmiş bir doğrulama kümesidir.

Bu deponun main dalı yoktur. PHP74 varsayılan daldır ve PHP81 ikinci kalıcı daldır. Dalınız iki şeyi belirler: yerel derlemenin varsayılan hedefi ve birleştirilen kaynak kümesi. Her iki hedefi de etkileyen bir değişikliği, her dal için ayrı bir çekme isteğiyle uygulayın. CI iş akışı hem PHP74 hem de PHP81 üzerinde çalışır. Bu, git branch -a ve .github/workflows/0-ci.yml (branches: [PHP74, PHP81]) ile doğrulanır.

Sürüm yayımlama akışı olay güdümlüdür. NextPDF kaynak organizasyonu bir sürüm etiketi yayımladığında, source-release türünde bir depo-gönderim olayı derleme iş akışını tetikler. İş akışı, her kaynak deposunu eşleşen etiketten çıkarır, hattı çalıştırır, çıktıyı hedef çalışma zamanında söz dizimi açısından denetler, destek matrisi genelinde doğrular ve arşivleri bir GitHub sürümüne ekler. Sürüm etiketi Semantic Versioning standardını izler: bir sürüm numarası, bildirilmiş bir genel API üzerinde MAJOR.MINOR.PATCH biçimindedir (Semantic Versioning 2.0.0 §2). Bu, .github/workflows/build.yml tarafından doğrulanır.

  • /integrations/backport/install/ — builder’ın bir derleme ana makinesine nasıl kurulacağı ve tüketicilerin üretilen paketi nasıl kuracağı.
  • /integrations/backport/configuration/ — Rector yapılandırmaları, özel kurallar ve derleme bayrakları.
  • /integrations/backport/quickstart/ — kaynak destekli bir deneme çalıştırması ve tam derleme çağrısı.
  • /integrations/backport/production-usage/ — builder’ın bir sürüm yayımlama iş akışına nasıl bağlanacağı.
  • /integrations/backport/troubleshooting/ — hattın koruma altına aldığı hata kipleri ve bunların nasıl okunacağı.
  • /integrations/backport/security-and-operations/ — tedarik zinciri duruşu, güven sınırı ve işletimsel garantiler.
  • /integrations/backport/boot-and-discovery/ — builder’ın kaynak modüllerini nasıl keşfettiği ve nasıl başlatıldığı.
  • /integrations/backport/integration/ — derleme ana makinesi entegrasyon sözleşmesi.