ข้ามไปยังเนื้อหา

เอกสารอ้างอิง API ของ Backport Builder

Backport Builder เป็นเครื่องมือสำหรับการบิลด์ ไม่ใช่ไลบรารีสำหรับรันไทม์ อินเทอร์เฟซสาธารณะของ Backport Builder ประกอบด้วยชุดคำสั่งบิลด์ (scripts/build.php และตัวห่อหุ้ม composer build*) คลาสระดับสคริปต์สี่คลาสที่อยู่เบื้องหลัง (Build, MergeSources, AdjustComposer, ValidateBuildContract) ไฟล์กำหนดค่า Rector สามไฟล์ กฎ Rector แบบกำหนดเองสามกฎ และสัญญาของแพ็กเกจที่สร้างขึ้น (nextpdf/backport และ nextpdf/backport-pro) ให้รัน Backport Builder บนโฮสต์ที่ใช้บิลด์หรือ continuous integration (CI) เพื่อแปลงซอร์ส NextPDF สมัยใหม่ให้เป็นชุดแจกจ่ายที่ดาวน์เกรดแล้ว ห้ามเพิ่ม Backport Builder ลงในแอปพลิเคชันโดยเด็ดขาด

หากเพิ่งเริ่มใช้งาน ให้เริ่มจาก composer build:dry (ซึ่งแปลงเป็น php scripts/build.php --dry-run) คำสั่งนี้จะรันทุกขั้นตอนในโหมดรายงานอย่างเดียวโดยไม่เขียนไฟล์ จึงช่วยตรวจสอบเค้าโครงซอร์สและแฟล็กก่อนการบิลด์จริงได้ ตัวอย่างแรกใน “งานที่ใช้บ่อย” แสดงคำสั่งเดียวกัน

โดยทั่วไปจะใช้แพ็กเกจนี้เพื่อรันการบิลด์บนโฮสต์ที่ใช้บิลด์ ตัวอย่างแต่ละรายการด้านล่างเป็นคำสั่งเดียว ซึ่งตรวจสอบความถูกต้องกับ scripts/build.php และ composer.json แล้ว

ตรวจสอบไปป์ไลน์โดยไม่เขียนสิ่งใดเลย (ปลอดภัยสำหรับการรันครั้งแรก):

Terminal window
composer build:dry

คำสั่งนี้แปลงเป็น php scripts/build.php --dry-run และจะรันการผสานซอร์ส การรัน Rector การสร้าง composer การคัดลอกแอสเซ็ต และการตรวจสอบในโหมดรายงานอย่างเดียว โดยไม่คัดลอกสิ่งใด

สร้างชุดแจกจ่าย PHP 8.1 แบบเต็ม (nextpdf/backport รวมถึง nextpdf/backport-pro เมื่อมีซอร์ส Pro):

Terminal window
php scripts/build.php \
--version=2.0.0 \
--source-dir=/path/to/sources \
--output-dir=./output

คำสั่งนี้จะผสานคอร์ อะแดปเตอร์ของเฟรมเวิร์ก และเลเยอร์ความเข้ากันได้ของ tcpdf แล้วรัน Rector หนึ่งรอบสำหรับเป้าหมาย PHP 8.1 และเขียนโครงสร้างแพ็กเกจที่สร้างขึ้นไปยัง ./output เพิ่ม --no-pro เพื่อข้ามแพ็กเกจ Pro

สร้างชุดแจกจ่าย PHP 7.4 แบบคอร์อย่างเดียว (ไปป์ไลน์ enum แบบสองรอบ):

Terminal window
php scripts/build.php \
--version=2.0.0 \
--source-dir=/path/to/sources \
--output-dir=./output-php74 \
--target=php74

--target=php74 จะบังคับให้เอาต์พุตเป็นคอร์อย่างเดียว ปิดใช้งาน Pro และรันการประมวลผลล่วงหน้าของ enum การแก้ไขหลัง Rector และรอบการดาวน์เกรด PHP 7.4 แบบเต็ม

ใช้ตารางนี้เมื่อต้องการดูลายเซ็น แฟล็ก และพฤติกรรมการออกที่แน่นอนของจุดเริ่มต้นการบิลด์ รวมถึงคลาสระดับสคริปต์ที่ขับเคลื่อนการบิลด์

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นค่าที่ส่งคืนข้อยกเว้นหรือเงื่อนไขล้มเหลวหมายเหตุ
scripts/build.phpเป้าหมาย เวอร์ชัน พาธซอร์ส พาธเอาต์พุต และแฟล็กตามที่สคริปต์ระบุใช้ค่าเริ่มต้นของเป้าหมายตามแบรนช์โครงสร้างแพ็กเกจที่สร้างขึ้นรหัสออกที่ไม่ใช่ศูนย์และเอาต์พุตข้อผิดพลาดเฉพาะขั้นตอนจุดเริ่มต้นหลักของการบิลด์ ให้รันบนโฮสต์ที่ใช้บิลด์ ไม่ใช่ในแอปพลิเคชัน
Build::__construct(string $version, string $sourceDir, string $outputDir, string $target = 'php81', bool $includePro = true, bool $dryRun = false)เวอร์ชัน ไดเรกทอรีซอร์ส ไดเรกทอรีเอาต์พุต เลนรันไทม์เป้าหมาย แฟล็กรวม Pro และแฟล็ก dry-runกำหนดเป้าหมายเป็น PHP 8.1 รวม Pro ยกเว้นกรณี PHP 7.4 และเขียนไฟล์เว้นแต่จะเปิดใช้งาน dry-runBuildInvalidArgumentException สำหรับเป้าหมายที่ไม่รองรับ ข้อผิดพลาดของขั้นตอนระหว่างการทำงานของ run()คลาสระดับสคริปต์ที่อยู่เบื้องหลัง scripts/build.php โดยตรง
Build::run()ไม่มีตรวจสอบสัญญา ผสานซอร์ส ปรับข้อมูลเมตาของ composer.json และรัน Rector หลายรอบboolส่งคืน false สำหรับความล้มเหลวของขั้นตอนที่คาดไว้ และอาจโยนข้อยกเว้นสำหรับข้อผิดพลาดของระบบไฟล์หรือรันไทม์ที่ไม่คาดคิดCI ควรถือว่าล้มเหลวเมื่อได้ false เสมอ
composer build:dryตัวห่อหุ้มสคริปต์ของ Composerการตรวจสอบการบิลด์แบบ dry-runสถานะการออกและบันทึกรหัสออกที่ไม่ใช่ศูนย์เมื่อการบิลด์หรือการตรวจสอบล้มเหลวใช้เป็นเกตของ CI
scripts/merge-sources.phpพาธเช็กเอาต์ซอร์สและเป้าหมายการผสานผสานแพ็กเกจซอร์สที่เลือกไว้สำหรับรันไทม์เป้าหมายโครงสร้างซอร์สที่ผสานแล้วไม่พบซอร์ส เป้าหมายที่ไม่รองรับ ความล้มเหลวของระบบไฟล์รักษาการอ้างอิงซอร์สให้ตรงกับแท็กของรุ่นที่เผยแพร่
MergeSources::__construct(string $sourceBaseDir, string $outputDir, bool $includePro = true, bool $dryRun = false, bool $coreOnly = false)ไดเรกทอรีฐานของซอร์ส ไดเรกทอรีเอาต์พุต แฟล็กรวม Pro แฟล็ก dry-run และแฟล็กคอร์อย่างเดียวผสานที่เก็บโค้ดทั้งหมดที่กำหนดค่าไว้ หรือเฉพาะคอร์เมื่อ coreOnly เป็น trueMergeSourcesพาธซอร์สหรือเอาต์พุตไม่ถูกต้องระหว่างการรันคลาสระดับสคริปต์ที่อยู่เบื้องหลัง scripts/merge-sources.php โดยตรง
MergeSources::run()ไม่มีคัดลอกและปรับโครงสร้างซอร์สที่เลือกไว้ให้เป็นมาตรฐานไปยังเป้าหมายการบิลด์boolส่งคืน false สำหรับความล้มเหลวของการผสานที่คาดไว้สามารถอ่านบันทึกได้ด้วย getLog() เสมอ
MergeSources::getLog()ไม่มีส่งคืนรายการบันทึกของขั้นตอนที่สะสมไว้arrayไม่คาดว่าจะมีใช้สำหรับการวินิจฉัยใน CI
scripts/adjust-composer.phpข้อมูลเมตาและเวอร์ชันของ composer.json ที่สร้างขึ้นเขียนข้อจำกัดของแพ็กเกจและรายการ replace สำหรับเอาต์พุตที่สร้างขึ้นcomposer.json ที่ปรับแล้วเวอร์ชันไม่ถูกต้องหรือไม่พบไฟล์ที่สร้างขึ้นกำหนดเอกลักษณ์ของแพ็กเกจที่สร้างขึ้น
AdjustComposer::__construct(string $version, string $target = 'php81')สตริงเวอร์ชันและเลนเป้าหมายเป้าหมาย PHP 8.1AdjustComposerข้อผิดพลาดจากเป้าหมายที่ไม่ถูกต้องในพาธการสร้างใช้โดยสคริปต์การบิลด์และการทดสอบ
AdjustComposer::generatePublicComposer()ไม่มีสร้างข้อมูลเมตาสำหรับ nextpdf/backportarrayไม่คาดว่าจะมีAPI สร้างข้อมูลแบบไม่มีผลข้างเคียงสำหรับการทดสอบ
AdjustComposer::generateProComposer()ไม่มีสร้างข้อมูลเมตาสำหรับ nextpdf/backport-proarrayไม่คาดว่าจะมีAPI สร้างข้อมูลแบบไม่มีผลข้างเคียงสำหรับเลนการบิลด์แบบกรรมสิทธิ์
AdjustComposer::writePublicComposer(string $outputDir)ไดเรกทอรีเอาต์พุตเขียน composer.json สาธารณะที่สร้างขึ้นvoidข้อผิดพลาดของระบบไฟล์ใช้เฉพาะในไดเรกทอรีเอาต์พุตที่สร้างขึ้นเท่านั้น
AdjustComposer::writeProComposer(string $proOutputDir)ไดเรกทอรีเอาต์พุต Proเขียน composer.json ของ Pro ที่สร้างขึ้นvoidข้อผิดพลาดของระบบไฟล์ต้องมีโครงสร้างเอาต์พุต Pro อยู่แล้ว
ValidateBuildContract::__construct(string $repoRoot)รากของที่เก็บโค้ดใช้รากของที่เก็บโค้ดที่ระบุเป็นฐานของสัญญาValidateBuildContractไม่คาดว่าจะมีตัวตรวจสอบสัญญาระดับสคริปต์
ValidateBuildContract::run()ไม่มีตรวจสอบอินพุตที่จำเป็นและข้อสมมติของการบิลด์boolส่งคืน false เมื่อสัญญาล้มเหลวรันก่อนเชื่อถือเอาต์พุตของการบิลด์

ใช้ตารางนี้เพื่อดูว่าไฟล์กำหนดค่า Rector ใดขับเคลื่อนเลนเป้าหมายแต่ละเลน และแต่ละรอบอยู่ตรงไหนในไปป์ไลน์แบบรอบเดียวสำหรับ PHP 8.1 หรือแบบสองรอบสำหรับ PHP 7.4

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นค่าที่ส่งคืนข้อยกเว้นหรือเงื่อนไขล้มเหลวหมายเหตุ
rector/config/rector-php81.phpโครงสร้างซอร์สและรันไทม์ของ Rectorการดาวน์เกรดแบบรอบเดียวไปยังเป้าหมาย PHP 8.1ซอร์สที่ผ่านการแปลงแล้วความล้มเหลวในการแยกวิเคราะห์หรือการแปลงของ Rectorใช้สำหรับเลนชุดแจกจ่าย PHP 8.1
rector/config/rector-php74-enums.phpโครงสร้างซอร์สและรันไทม์ของ Rectorรอบ PHP 7.4 รอบแรกสำหรับการแปลง enumซอร์สที่ผ่านการแปลงในขั้นกลางความล้มเหลวในการแยกวิเคราะห์หรือการแปลงของ Rectorรันก่อนรอบ PHP 7.4 แบบเต็ม
rector/config/rector-php74.phpซอร์สขั้นกลางและรันไทม์ของ Rectorรอบการดาวน์เกรด PHP 7.4 แบบเต็มซอร์สที่เข้ากันได้กับ PHP 7.4ความล้มเหลวในการแยกวิเคราะห์หรือการแปลงของ Rectorใช้สำหรับเลนชุดแจกจ่าย PHP 7.4

ใช้ตารางนี้เมื่อดูแลหรือขยายกฎ Rector เฉพาะโปรเจกต์ทั้งสามกฎ และต้องการสัญญาเมธอดของแต่ละกฎ รวมถึงไวยากรณ์ที่กฎนั้นแปลง

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นค่าที่ส่งคืนข้อยกเว้นหรือเงื่อนไขล้มเหลวหมายเหตุ
DowngradeAsymmetricVisibilityRectorพรอเพอร์ตีหรือพารามิเตอร์ที่เลื่อนระดับซึ่งใช้การมองเห็นแบบไม่สมมาตรการมองเห็นแบบธรรมดาที่เข้ากันได้กับรันไทม์รุ่นเก่ารักษาการมองเห็นสำหรับการอ่านไว้เมื่อทำได้ความล้มเหลวของกฎ Rectorข้อจำกัดของ setter มีผลเฉพาะตอนคอมไพล์เท่านั้นและจะถูกลบออกในเอาต์พุตที่สร้างขึ้น
DowngradeAsymmetricVisibilityRector::getRuleDefinition()ไม่มีส่งคืนข้อมูลเมตาและตัวอย่างของกฎ RectorRuleDefinitionไม่คาดว่าจะมีทำให้เอกสารของกฎปรากฏต่อเครื่องมือของ Rector
DowngradeAsymmetricVisibilityRector::getNodeTypes()ไม่มีเลือกชนิดโหนดที่กฎตรวจสอบarray<class-string<Node>>ไม่คาดว่าจะมีขอบเขตควรแคบไว้เพื่อให้การแปลงกำหนดผลได้แน่นอน
DowngradeAsymmetricVisibilityRector::refactor(Node $node)โหนด ASTแปลงการมองเห็นแบบไม่สมมาตรในจุดที่ปรากฏ`Nodenull`ความล้มเหลวของกฎ Rector
DowngradeCloneWithRectorclone() พร้อมการแทนที่ค่าพรอเพอร์ตีการโคลนพร้อมกำหนดค่าพรอเพอร์ตีอย่างชัดเจนใช้ตัวแปรชั่วคราวที่สร้างขึ้นความล้มเหลวของกฎ Rectorต้องรันหลังจากการดาวน์เกรดพรอเพอร์ตีแบบ readonly
DowngradeCloneWithRector::getRuleDefinition()ไม่มีส่งคืนข้อมูลเมตาและตัวอย่างของกฎRuleDefinitionไม่คาดว่าจะมีใช้โดยการวินิจฉัยของ Rector
DowngradeCloneWithRector::getNodeTypes()ไม่มีเลือกโหนด return และนิพจน์array<class-string<Node>>ไม่คาดว่าจะมีทำให้กฎมุ่งเน้นที่ไวยากรณ์ clone-with
DowngradeCloneWithRector::refactor(Node $node)โหนด ASTเขียน clone-with ใหม่เป็นการโคลนพร้อมการกำหนดค่า`arraynull`ความล้มเหลวของกฎ Rector
DowngradeTraitConstantsRectorค่าคงที่ของ trait และการอ้างอิงถึงค่าเหล่านั้นพรอเพอร์ตีแบบ static และการอ้างอิงพรอเพอร์ตีรักษาการมองเห็นไว้เมื่อทำได้ความล้มเหลวของกฎ Rectorลบ final ออกเพราะพรอเพอร์ตีในรุ่นเก่าไม่สามารถเป็น final ได้
DowngradeTraitConstantsRector::getRuleDefinition()ไม่มีส่งคืนข้อมูลเมตาและตัวอย่างของกฎRuleDefinitionไม่คาดว่าจะมีใช้โดยการวินิจฉัยของ Rector
DowngradeTraitConstantsRector::getNodeTypes()ไม่มีเลือกโหนด trait และ class-constant-fetcharray<class-string<Node>>ไม่คาดว่าจะมีจำกัดกฎไว้เฉพาะค่าคงที่ของ trait
DowngradeTraitConstantsRector::refactor(Node $node)โหนด ASTเขียนค่าคงที่ของ trait และการอ้างอิงใหม่ให้เป็นพรอเพอร์ตีที่เข้ากันได้`Nodenull`ความล้มเหลวของกฎ Rector

ใช้ตารางนี้เพื่อดูสิ่งที่ตัวบิลเดอร์สร้างออกมา ได้แก่ ชื่อแพ็กเกจที่โปรเจกต์ปลายทางติดตั้ง และแพ็กเกจที่บรรจุชุดแจกจ่าย Pro

แพ็กเกจที่สร้างขึ้นบทบาทในรันไทม์หมายเหตุ
nextpdf/backportชุดแจกจ่ายรันไทม์แบบโอเพนซอร์สที่สร้างขึ้นแทนที่แพ็กเกจ nextpdf/* ที่เลือกไว้สำหรับรันไทม์เป้าหมาย
nextpdf/backport-proชุดแจกจ่าย Pro แบบกรรมสิทธิ์ที่สร้างขึ้นเมื่อมีซอร์ส Proเผยแพร่แยกจากแพ็กเกจโอเพนซอร์ส
  • ตัวบิลเดอร์รับรุ่นซอร์สที่เผยแพร่เป็นอินพุตและสร้างอาร์ติแฟกต์ออกมา อย่าแก้ไขเอาต์พุตที่สร้างขึ้นโดยถือเป็นแหล่งอ้างอิงหลัก
  • กฎแบบกำหนดเองแต่ละกฎต้องมีการทดสอบแบบ fixture ก่อนเข้าสู่ไปป์ไลน์การบิลด์
  • งานเผยแพร่รุ่นต้องตรวจสอบเอาต์พุตที่สร้างขึ้นบนรันไทม์เป้าหมาย ไม่ใช่เฉพาะบนโฮสต์ที่ใช้บิลด์เท่านั้น