Lewati ke konten

Panduan Pengembang Backport Builder

Backport Builder adalah proyek rekayasa rilis. Perlakukan repositori sumber sebagai input, pohon yang dihasilkan sebagai output, dan aturan Rector khusus sebagai logika build yang teruji.

Gunakan panduan ini saat Anda memelihara aturan downgrade, metadata paket yang dihasilkan, pemeriksaan target-runtime, atau otomatisasi rilis untuk nextpdf/backport-builder.

LapisanDimiliki olehTanggung jawabJangan letakkan di sini
Repositori sumberRepo produkSumber dan pengujian PHP yang menjadi otoritas.Suntingan downgrade yang dihasilkan.
Skrip buildnextpdf/backport-builderMenggabungkan sumber, menjalankan transformasi, menulis metadata, dan memvalidasi output.Logika aplikasi runtime.
Konfigurasi Rectornextpdf/backport-builderKebijakan downgrade spesifik target.Asumsi lintas target tanpa pengujian.
Aturan Rector khususnextpdf/backport-builderTransformasi sintaksis spesifik proyek.Penulisan ulang berskala luas yang belum teruji.
Paket yang dihasilkanOutput buildArtefak yang dapat dipasang untuk runtime lama.Patch manual pada source-of-truth.
TahapPerilakuTindakan pengembang
Checkout sumberAlur kerja rilis melakukan checkout repositori sumber pada tag target.Tetap selaraskan ref sumber di seluruh paket.
Validasi kontrakValidateBuildContract::run() memeriksa asumsi build.Perlakukan kontrak yang gagal sebagai penghalang rilis.
PenggabunganMergeSources::run() menyusun pohon paket target.Verifikasi cakupan target sebelum menjalankan Rector.
TransformasiKonfigurasi Rector dan aturan khusus melakukan downgrade sintaksis.Tambahkan pengujian fixture untuk setiap perubahan aturan.
Penyesuaian ComposerAdjustComposer menulis metadata paket yang dihasilkan dan peta replace.Validasikan nama paket, versi, lisensi, dan batasan (constraint).
Validasi runtimeOutput yang dihasilkan diperiksa sintaksisnya dan diuji di versi PHP target.Perlakukan kegagalan target-runtime sebagai penghalang rilis.
RilisArsip dilampirkan ke rilis.Jangan menambal output yang dihasilkan untuk dijadikan source of truth.
Item pekerjaanSource of truthKebijakan output yang dihasilkan
Penggunaan fitur PHPRepo sumber utama.Aturan backport mengadaptasi fitur tersebut.
Batasan dependensiMetadata composer.json sumber beserta skrip penyesuaian.composer.json yang dihasilkan harus dapat direproduksi.
Downgrade sintaksisKonfigurasi Rector dan aturan khusus.Sumber yang dihasilkan tidak boleh disunting secara manual.
Dukungan runtimeBranch target dan matriks CI.Build harus lulus di PHP target.
Catatan rilisDokumentasi dan otomatisasi rilis.Artefak yang dihasilkan harus memiliki tautan balik ke rilis sumber.

Setiap aturan khusus harus memiliki tujuan yang terfokus, metadata, dan cakupan fixture.

Metode aturanTujuanPersyaratan kualitas
getRuleDefinition()Mendokumentasikan transformasi untuk perkakas Rector.Sertakan contoh before/after yang sesuai dengan downgrade sebenarnya.
getNodeTypes()Membatasi node AST yang diperiksa oleh aturan.Jaga agar daftar node sekecil mungkin.
refactor()Menerapkan transformasi atau mengembalikan node tanpa perubahan.Biarkan node yang tidak terkait tetap tidak berubah dan hasilnya deterministik.
Pengujian fixtureMemverifikasi output before/after.Cakup input valid terkecil dan setidaknya satu kasus yang dilewati (skip).
<?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);
}
}

Gunakan dry run selama pengembangan dan saat memvalidasi kandidat rilis. Tulis output sebenarnya hanya setelah ref sumber dan branch target diketahui.

Terminal window
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

Jalankan validasi paket yang dihasilkan di runtime target, bukan hanya di host build modern.

Titik ekstensiGunakan untukBatasan
File konfigurasi RectorKebijakan downgrade spesifik target.Pisahkan jalur PHP 8.1 dan PHP 7.4.
Aturan Rector khususTransformasi sintaksis spesifik proyek.Harus memiliki metadata dan pengujian fixture.
Skrip penyesuaian ComposerIdentitas paket yang dihasilkan.Harus menjaga versioning tetap selaras dengan SemVer.
Skrip penggabunganMemilih dan menyusun input paket sumber.Harus mencatat root sumber dan root output.
Alur kerja buildOrkestrasi rilis.Harus memvalidasi output yang dihasilkan di runtime target.
  1. Buat reproduksi sintaksis yang tidak didukung dalam fixture minimal.
  2. Tambahkan atau perbarui aturan Rector khusus.
  3. Tambahkan fixture before/after untuk aturan tersebut.
  4. Jalankan dry build.
  5. Validasikan output yang dihasilkan di runtime PHP target.
  6. Terapkan perubahan logis yang sama ke setiap branch target permanen bila diperlukan.
  7. Jaga agar artefak rilis tetap dapat direproduksi dari tag sumber dan skrip build.
KegagalanTempat penangananRespons yang disarankan
Repo sumber tidak adaTahap validasi kontrak atau penggabungan.Hentikan build dan perbaiki input checkout.
Kegagalan parse RectorTahap transformasi.Sederhanakan menjadi fixture lalu perbarui aturan atau konfigurasi.
composer.json yang dihasilkan tidak sesuaiTahap penyesuaian Composer.Perbaiki skrip build, bukan metadata yang dihasilkan.
Kegagalan sintaksis targetValidasi runtime.Blokir rilis hingga transformasi diperbaiki.
Sumber Pro tidak tersediaKonfigurasi build.Build artefak publik hanya jika memang itu target yang dituju.
PerhatianDefaultKapan harus menggantinya
Output yang dihasilkanArtefak hanya-baca.Jangan pernah menjadikannya source of truth.
Model branchBranch target permanen yang terpisah.Jaga agar perubahan tetap tersinkronisasi melalui pull request independen.
Host buildPHP modern.Validasi runtime target tetap menentukan kesiapan rilis.
Aturan khususKecil dan didukung oleh fixture.Hindari transformasi berskala luas tanpa contoh before/after yang eksplisit.
Jalur PHP 7.4Hanya Core, kecuali didukung secara eksplisit.Jangan sertakan output Pro tanpa validasi target-runtime.
  • Pengujian metadata aturan Rector menginstansiasi setiap aturan khusus.
  • Pengujian fixture mencakup kode before dan after untuk setiap transformasi.
  • Dry build dijalankan sebelum job rilis.
  • Pemeriksaan sintaksis runtime target dan pengujian paket dijalankan terhadap output yang dihasilkan.
  • Pengujian metadata Composer memastikan nama paket, versi, batasan, peta replace, dan lisensi.
  • Log build menyertakan path sumber, path target, runtime target, status dry-run, dan status penyertaan Pro.