Boot dan discovery backport NextPDF
Alat build — BUKAN dependensi runtime. Halaman ini menjelaskan cara builder dijalankan pada host maintainer atau continuous integration (CI). Aplikasi downstream tidak pernah memuat kode ini.
Sekilas pandang
Bagian berjudul “Sekilas pandang”Builder tidak menggunakan framework, dependency-injection container, ataupun auto-discovery service-provider. Sebagai gantinya, skrip command-line interface (CLI) PHP dirangkai dengan require_once dan autoloader PSR-4 dari Composer. Di sini, “discovery” memiliki dua makna spesifik: repository sumber yang dibaca oleh tahap merge, dan cara orkestrator memilih konfigurasi Rector untuk target.
Ikhtisar pipeline build
Bagian berjudul “Ikhtisar pipeline build”Orkestratornya adalah scripts/build.php. Skrip ini memulai build, lalu menjalankan lima tahap secara berurutan. Setiap tahap memiliki gerbang, sehingga kegagalan pertama akan menghentikan build:
- Gabungkan sumber — salin repository sumber ke dalam satu pohon direktori.
- Jalankan downgrade Rector — jalankan satu lintasan untuk PHP 8.1; jalankan dua lintasan plus perbaikan untuk PHP 7.4.
- Buat
composer.json— tulis manifest paket yang dihasilkan beserta petareplace-nya. - Salin aset statis — salin lisensi dan changelog yang dihasilkan.
- Validasi keluaran — hitung berkas PHP yang dihasilkan; gerbang sintaks otoritatif berjalan setelahnya di CI.
Diverifikasi berdasarkan scripts/build.php (run(), step()). Lihat /integrations/backport/configuration/ untuk detail pemilihan aturan dan /integrations/backport/production-usage/ untuk gerbang CI.
Discovery modul sumber
Bagian berjudul “Discovery modul sumber”Discovery sumber tidak digerakkan oleh manifest. scripts/merge-sources.php menggunakan peta tetap, yang dikunci berdasarkan nama repository dan dipilih sesuai target.
Untuk target PHP 8.1, peta tersebut mencakup nextpdf (core), nextpdf-Artisan, nextpdf-compat-legacy, nextpdf-Laravel, nextpdf-Symfony, nextpdf-CodeIgniter, dan nextpdf-Pro saat Pro disertakan. Untuk target PHP 7.4, peta tersebut menyusut menjadi nextpdf saja. Builder menyelesaikan setiap repository sebagai direktori sejajar di bawah root --source-dir. Builder memvalidasi setiap repository yang diharapkan sebelum menyalin apa pun. Jika salah satunya hilang, merge dibatalkan dan melaporkan nama serta path-nya. Diverifikasi berdasarkan scripts/merge-sources.php (MergeSources::__construct(), run()).
Merge menempatkan core di src/ dan setiap adapter di bawah subdirektori sesuai namespace-nya (src/Artisan/, src/Laravel/, dan seterusnya). Pro masuk ke pohon pro/src/ terpisah agar build dapat menghasilkannya sebagai paket tersendiri. Diverifikasi berdasarkan MergeSources (mergeCore(), mergeArtisan(), mergePro()).
Urutan boot
Bagian berjudul “Urutan boot”scripts/build.phpberjalan pada Server Application Programming Interface (SAPI) CLI. Skrip ini meng-require_oncemerge-sources.phpdanadjust-composer.php.- Titik masuk CLI membaca opsi dengan
getopt()—--version,--source-dir,--output-dir,--target,--dry-run,--no-pro. - Instance
Builddibuat. Konstruktor memvalidasi--targetterhadap['php74', 'php81']dan memunculkanInvalidArgumentExceptionuntuk nilai yang tidak valid sebelum pekerjaan apa pun dimulai. Untuk target PHP 7.4, konstruktor memaksa keluaran hanya core dan menonaktifkan Pro. Build::run()menjalankan kelima tahap dan keluar dengan status 0 saat berhasil, atau 1 saat kegagalan pertama terjadi.
Diverifikasi berdasarkan scripts/build.php (titik masuk CLI, Build::__construct(), run()).
Binding container
Bagian berjudul “Binding container”Tidak berlaku. Builder adalah alat CLI. Builder tidak memiliki dependency-injection container maupun service container framework. Wiring dilakukan melalui panggilan require_once eksplisit, ditambah autoloading PSR-4 Composer untuk NextPDF\Backport\ (aturan) dan NextPDF\Backport\Scripts\ (skrip). Diverifikasi berdasarkan composer.jsonautoload dan pernyataan require_once di scripts/build.php.
Urutan penyelesaian konfigurasi
Bagian berjudul “Urutan penyelesaian konfigurasi”Tidak ada berkas konfigurasi. Konfigurasi berasal dari flag CLI yang diselesaikan menggunakan nilai standar yang tertanam dalam skrip:
- Flag CLI, jika disediakan.
- Nilai standar dalam blok parsing
getopt()(sebagai contoh, nilai standar target adalahphp81, dan nilai standar versi adalah2.0.0). - Perilaku yang ditetapkan konstruktor berdasarkan target (PHP 7.4 memaksa hanya core dan tanpa Pro, terlepas dari
--no-pro).
Diverifikasi berdasarkan scripts/build.php (titik masuk CLI dan Build::__construct()). Referensi flag selengkapnya ada di /integrations/backport/configuration/.
Diagnostik
Bagian berjudul “Diagnostik”Orkestrator menyediakan diagnostiknya sendiri. Jalankan dry run (composer build:dry) untuk mencetak repository sumber yang akan dibaca dan tujuan setiap tahap, tanpa menulis apa pun. Setiap tahap mencetak penanda bernama untuk keberhasilan atau kegagalan. Tidak ada subperintah diagnose terpisah dan tidak ada titik masuk bin/. Builder dijalankan melalui scripts/build.php atau alias Composer-script-nya. Diverifikasi berdasarkan scripts/build.php (step(), cabang dryRun), scripts/merge-sources.php (jalur dry-run run()), dan composer.jsonscripts.
Lihat juga
Bagian berjudul “Lihat juga”- /integrations/backport/overview/ — apa itu builder dan apa yang dihasilkannya.
- /integrations/backport/integration/ — kontrak integrasi host build.
- /integrations/backport/configuration/ — konfigurasi Rector dan referensi flag.
- /integrations/backport/troubleshooting/ — referensi kegagalan tahap demi tahap.