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

คู่มือนักพัฒนา Backport Builder

Backport Builder เป็นโปรเจกต์ด้านวิศวกรรมการรีลีส ให้ถือว่าที่เก็บซอร์สเป็นอินพุต ทรีที่สร้างขึ้นเป็นเอาต์พุต และกฎ Rector แบบกำหนดเองเป็นลอจิกการบิลด์ที่มีการทดสอบกำกับ

ใช้คู่มือนี้เมื่อจำเป็นต้องดูแลรักษากฎการดาวน์เกรด เมตาดาทาของแพ็กเกจที่สร้างขึ้น การตรวจสอบรันไทม์เป้าหมาย หรือระบบอัตโนมัติสำหรับการรีลีสของ nextpdf/backport-builder

เลเยอร์เจ้าของความรับผิดชอบไม่ควรใส่ไว้ที่นี่
ที่เก็บซอร์สที่เก็บผลิตภัณฑ์ซอร์ส PHP และการทดสอบที่เป็นต้นฉบับอ้างอิงการแก้ไขดาวน์เกรดที่สร้างขึ้น
สคริปต์การบิลด์nextpdf/backport-builderผสานซอร์ส รันการแปลง เขียนเมตาดาทา และตรวจสอบความถูกต้องของเอาต์พุตลอจิกของแอปพลิเคชันในรันไทม์
การกำหนดค่า Rectornextpdf/backport-builderนโยบายการดาวน์เกรดเฉพาะเป้าหมายข้อสมมติข้ามเป้าหมายที่ไม่มีการทดสอบรองรับ
กฎ Rector แบบกำหนดเองnextpdf/backport-builderการแปลงไวยากรณ์เฉพาะโปรเจกต์การเขียนใหม่แบบกว้างโดยไม่มีการทดสอบรองรับ
แพ็กเกจที่สร้างขึ้นเอาต์พุตของการบิลด์อาร์ติแฟกต์ที่ติดตั้งได้สำหรับรันไทม์รุ่นเก่าแพตช์ที่ทำด้วยตนเองจนกลายเป็นต้นฉบับอ้างอิง
ขั้นตอนพฤติกรรมการดำเนินการของนักพัฒนา
การเช็กเอาต์ซอร์สเวิร์กโฟลว์การรีลีสจะเช็กเอาต์ที่เก็บซอร์สตามแท็กเป้าหมายรักษาให้การอ้างอิงซอร์สสอดคล้องกันในทุกแพ็กเกจ
การตรวจสอบความถูกต้องของสัญญาValidateBuildContract::run() จะตรวจสอบข้อสมมติของการบิลด์ให้ถือว่าสัญญาที่ไม่ผ่านเป็นตัวขัดขวางการรีลีส
การผสานMergeSources::run() จะประกอบทรีแพ็กเกจเป้าหมายตรวจสอบขอบเขตเป้าหมายก่อนรัน Rector
การแปลงการกำหนดค่า Rector และกฎแบบกำหนดเองจะดาวน์เกรดไวยากรณ์เพิ่มการทดสอบ fixture สำหรับการเปลี่ยนแปลงกฎทุกครั้ง
การปรับ ComposerAdjustComposer จะเขียนเมตาดาทาของแพ็กเกจที่สร้างขึ้นและแมป replaceตรวจสอบความถูกต้องของชื่อแพ็กเกจ เวอร์ชัน ใบอนุญาต และข้อจำกัด
การตรวจสอบความถูกต้องของรันไทม์เอาต์พุตที่สร้างขึ้นจะได้รับการตรวจสอบไวยากรณ์และทดสอบบน PHP เวอร์ชันเป้าหมายให้ถือว่าความล้มเหลวในรันไทม์เป้าหมายเป็นสิ่งที่ขัดขวางการรีลีส
การรีลีสแนบอาร์ไคฟ์เข้ากับการรีลีสอย่าแพตช์เอาต์พุตที่สร้างขึ้นเพื่อให้เป็นต้นฉบับอ้างอิง
งานต้นฉบับอ้างอิงนโยบายเอาต์พุตที่สร้างขึ้น
การใช้คุณสมบัติของ PHPที่เก็บซอร์สหลักกฎ backport จะปรับตามคุณสมบัตินั้น
ข้อจำกัดของ dependencyเมตาดาทาใน composer.json ของซอร์สและสคริปต์การปรับแต่งไฟล์ composer.json ที่สร้างขึ้นต้องสามารถสร้างซ้ำได้
การดาวน์เกรดไวยากรณ์การกำหนดค่า Rector และกฎแบบกำหนดเองซอร์สที่สร้างขึ้นไม่ควรถูกแก้ไขด้วยตนเอง
การรองรับรันไทม์สาขาเป้าหมายและเมทริกซ์ CIการบิลด์ต้องผ่านบน PHP เป้าหมาย
บันทึกการรีลีสเอกสารและระบบอัตโนมัติของการรีลีสอาร์ติแฟกต์ที่สร้างขึ้นควรเชื่อมโยงกลับไปยังการรีลีสของซอร์ส

กฎแบบกำหนดเองแต่ละข้อควรมีวัตถุประสงค์ที่ชัดและจำกัด มีเมตาดาทา และมี fixture ครอบคลุม

เมธอดของกฎวัตถุประสงค์ข้อกำหนดด้านคุณภาพ
getRuleDefinition()จัดทำเอกสารการแปลงสำหรับเครื่องมือ Rectorใส่ตัวอย่าง before/after ที่ตรงกับการดาวน์เกรดจริง
getNodeTypes()จำกัดโหนด AST ที่กฎตรวจสอบรักษารายการโหนดให้เล็กที่สุดเท่าที่จะทำได้
refactor()ใช้การแปลงหรือคืนค่าเดิมโดยไม่เปลี่ยนแปลงปล่อยโหนดที่ไม่เกี่ยวข้องไว้ตามเดิมและให้ผลลัพธ์ที่กำหนดแน่นอน
การทดสอบ fixtureตรวจสอบเอาต์พุต before/afterครอบคลุมอินพุตที่ถูกต้องขนาดเล็กที่สุดและกรณีที่ต้องข้ามอย่างน้อยหนึ่งกรณี
<?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);
}
}

ใช้การรันแบบ dry run ระหว่างการพัฒนาและเมื่อตรวจสอบความถูกต้องของ release candidate เขียนเอาต์พุตจริงเฉพาะเมื่อทราบการอ้างอิงซอร์สและสาขาเป้าหมายแล้ว

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

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

จุดขยายใช้สำหรับข้อจำกัด
ไฟล์การกำหนดค่า Rectorนโยบายการดาวน์เกรดเฉพาะเป้าหมายแยกเลน PHP 8.1 และ PHP 7.4 ออกจากกัน
กฎ Rector แบบกำหนดเองการแปลงไวยากรณ์เฉพาะโปรเจกต์ต้องมีเมตาดาทาและการทดสอบ fixture
สคริปต์การปรับ Composerเอกลักษณ์ของแพ็กเกจที่สร้างขึ้นต้องรักษาการกำหนดเวอร์ชันที่สอดคล้องกับ SemVer
สคริปต์การผสานเลือกและกำหนดรูปแบบอินพุตแพ็กเกจซอร์สต้องบันทึกล็อกของรูทซอร์สและรูทเอาต์พุต
เวิร์กโฟลว์การบิลด์การจัดการการรีลีสต้องตรวจสอบความถูกต้องของเอาต์พุตที่สร้างขึ้นบนรันไทม์เป้าหมาย
  1. จำลองไวยากรณ์ที่ไม่รองรับซ้ำใน fixture ที่เล็กที่สุด
  2. เพิ่มหรืออัปเดตกฎ Rector แบบกำหนดเอง
  3. เพิ่ม fixture before/after สำหรับกฎ
  4. รัน dry build
  5. ตรวจสอบความถูกต้องของเอาต์พุตที่สร้างขึ้นบนรันไทม์ PHP เป้าหมาย
  6. นำการเปลี่ยนแปลงเชิงตรรกะเดียวกันไปใช้กับสาขาเป้าหมายถาวรแต่ละสาขาเมื่อจำเป็น
  7. รักษาให้อาร์ติแฟกต์การรีลีสสามารถสร้างซ้ำได้จากแท็กของซอร์สและสคริปต์การบิลด์
ความล้มเหลวตำแหน่งที่ควรจัดการการตอบสนองที่แนะนำ
ไม่พบที่เก็บซอร์สขั้นตอนการตรวจสอบความถูกต้องของสัญญาหรือการผสานหยุดการบิลด์และแก้ไขอินพุตของการเช็กเอาต์
การแยกวิเคราะห์ของ Rector ล้มเหลวขั้นตอนการแปลงย่อกรณีให้เป็น fixture และอัปเดตกฎหรือการกำหนดค่า
ไฟล์ composer.json ที่สร้างขึ้นไม่ตรงกันขั้นตอนการปรับ Composerแก้ไขสคริปต์การบิลด์ ไม่ใช่เมตาดาทาที่สร้างขึ้น
ไวยากรณ์เป้าหมายล้มเหลวการตรวจสอบความถูกต้องของรันไทม์ระงับการรีลีสจนกว่าการแปลงจะได้รับการแก้ไข
ซอร์ส Pro ไม่พร้อมใช้งานการกำหนดค่าการบิลด์สร้างอาร์ติแฟกต์สาธารณะเฉพาะเมื่อนั่นเป็นเป้าหมายที่ตั้งใจไว้
ประเด็นค่าเริ่มต้นเมื่อใดควรแทนที่
เอาต์พุตที่สร้างขึ้นอาร์ติแฟกต์แบบอ่านอย่างเดียวห้ามทำให้กลายเป็นต้นฉบับอ้างอิงเด็ดขาด
แบบจำลองสาขาแยกสาขาเป้าหมายถาวรออกจากกันรักษาการเปลี่ยนแปลงให้ซิงโครไนซ์กันผ่าน pull request ที่เป็นอิสระต่อกัน
โฮสต์การบิลด์PHP รุ่นใหม่การตรวจสอบความถูกต้องของรันไทม์เป้าหมายยังคงเป็นตัวตัดสินความพร้อมในการรีลีส
กฎแบบกำหนดเองมีขนาดเล็กและมี fixture รองรับหลีกเลี่ยงการแปลงแบบกว้างโดยไม่มีตัวอย่าง before/after ที่ชัดเจน
เลน PHP 7.4เฉพาะ Core เว้นแต่จะมีการรองรับอย่างชัดเจนอย่ารวมเอาต์พุต Pro โดยไม่มีการตรวจสอบความถูกต้องของรันไทม์เป้าหมาย
  • การทดสอบเมตาดาทาของกฎ Rector จะสร้างอินสแตนซ์ของกฎแบบกำหนดเองทุกข้อ
  • การทดสอบ fixture ครอบคลุมโค้ด before/after สำหรับการแปลงแต่ละครั้ง
  • รัน dry build ก่อนงานการรีลีส
  • การตรวจสอบไวยากรณ์และการทดสอบแพ็กเกจสำหรับรันไทม์เป้าหมายจะรันบนเอาต์พุตที่สร้างขึ้น
  • การทดสอบเมตาดาทาของ Composer จะยืนยันชื่อแพ็กเกจ เวอร์ชัน ข้อจำกัด แมป replace และใบอนุญาต
  • ล็อกการบิลด์รวมพาธของซอร์ส พาธเป้าหมาย รันไทม์เป้าหมาย สถานะ dry-run และสถานะการรวม Pro