Lewati ke konten

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.

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.

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:

  1. Gabungkan sumber — salin repository sumber ke dalam satu pohon direktori.
  2. Jalankan downgrade Rector — jalankan satu lintasan untuk PHP 8.1; jalankan dua lintasan plus perbaikan untuk PHP 7.4.
  3. Buat composer.json — tulis manifest paket yang dihasilkan beserta peta replace-nya.
  4. Salin aset statis — salin lisensi dan changelog yang dihasilkan.
  5. 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 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()).

  1. scripts/build.php berjalan pada Server Application Programming Interface (SAPI) CLI. Skrip ini meng-require_once merge-sources.php dan adjust-composer.php.
  2. Titik masuk CLI membaca opsi dengan getopt()--version, --source-dir, --output-dir, --target, --dry-run, --no-pro.
  3. Instance Build dibuat. Konstruktor memvalidasi --target terhadap ['php74', 'php81'] dan memunculkan InvalidArgumentException untuk nilai yang tidak valid sebelum pekerjaan apa pun dimulai. Untuk target PHP 7.4, konstruktor memaksa keluaran hanya core dan menonaktifkan Pro.
  4. 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()).

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.

Tidak ada berkas konfigurasi. Konfigurasi berasal dari flag CLI yang diselesaikan menggunakan nilai standar yang tertanam dalam skrip:

  1. Flag CLI, jika disediakan.
  2. Nilai standar dalam blok parsing getopt() (sebagai contoh, nilai standar target adalah php81, dan nilai standar versi adalah 2.0.0).
  3. 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/.

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.

  • /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.