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

การผสานการทำงานของ NextPDF backport

เป็นเครื่องมือสำหรับการ build เท่านั้น ไม่ใช่ dependency ของรันไทม์ ผู้ดูแลใช้แพ็กเกจนี้เพื่อสร้างชุดแจกจ่าย backport ของ NextPDF สำหรับ PHP (PHP: Hypertext Preprocessor) 7.4 และ PHP 8.1 แอปพลิเคชันต้องไม่เพิ่มแพ็กเกจนี้เป็น dependency ของรันไทม์โดยเด็ดขาด

มีจุดผสานการทำงานที่แยกจากกันสองจุด คุณผสานรีโพซิทอรีของตัวสร้างเข้ากับกระแสงานการรีลีสของ โฮสต์สำหรับการ build ส่วน แอปพลิเคชันปลายทาง จะผสานเฉพาะแพ็กเกจที่สร้างขึ้น คือ nextpdf/backport เข้าในแผนผัง dependency ของตนเท่านั้น ตัวสร้างจะไม่เข้าไปอยู่ในแผนผัง dependency ของแอปพลิเคชันโดยเด็ดขาด

เนื่องจากตัวสร้างประกาศ "type": "project" ใน composer.json จึงควรปฏิบัติต่อตัวสร้างเหมือนรีโพซิทอรีของโปรเจกต์ ไม่ใช่ไลบรารี ให้ผสานโดยการ clone รีโพซิทอรีและรันการติดตั้งแบบ dev ไม่ใช่ผ่าน composer require:

Terminal window
git clone https://github.com/nextpdf-labs/backport.git
cd backport
git checkout PHP74
composer install --prefer-dist --no-progress

เช็คเอาต์แบรนช์ให้ตรงกับเป้าหมายที่คุณวางแผนจะสร้าง ใช้ PHP74 (ค่าเริ่มต้น) สำหรับชุดแจกจ่ายเฉพาะ core บน PHP 7.4 และใช้ PHP81 สำหรับชุดแจกจ่ายบน PHP 8.1 ที่มี adapter ครบทุกตัว อย่าส่ง --no-dev เพราะการ build ต้องใช้เอนจิน Rector, PHPStan และ PHPUnit ซึ่งเป็น dependency แบบ dev ตรวจสอบยืนยันได้จาก composer.json (type, require-dev) และโมเดลแบบสองแบรนช์ใน /integrations/backport/overview/

ตัวสร้างไม่มีการค้นหาอัตโนมัติแบบเฟรมเวิร์ก ในเวลา build นั้น scripts/build.php จะโหลด Rector และกฎ abstract syntax tree แบบกำหนดเองทั้งสามข้อผ่านการเรียก require_once โดยตรง รวมถึงการ autoload แบบ Composer PHP Standards Recommendation 4 (PSR-4) ลำดับการบูตทั้งหมดและการค้นหาโมดูลของซอร์สมีบันทึกไว้ใน /integrations/backport/boot-and-discovery/

ไม่เกี่ยวข้อง ตัวสร้างเป็นเครื่องมือแบบ command-line interface (CLI) ที่ไม่มีคอนเทนเนอร์สำหรับ dependency injection ตรวจสอบยืนยันได้จากโครงสร้างรีโพซิทอรีและ composer.jsonautoload

“การกำหนดค่าการเผยแพร่” ไม่ใช่ไฟล์แยกต่างหาก แต่เป็นชุดแฟล็กสำหรับการ build และนิยามแพ็กเกจแบบตายตัวใน scripts/adjust-composer.php:

  • แผนที่เป้าหมาย --target=php81 สร้าง nextpdf/backport (ข้อกำหนด >=8.1 <8.5 แทนที่ core ชุด adapter และ compat-legacy) และเมื่อรวมไว้ด้วยจะสร้าง nextpdf/backport-pro ส่วน --target=php74 สร้าง nextpdf/backport (ข้อกำหนด >=7.4 <8.1 แทนที่เฉพาะ nextpdf/core) และไม่มี Pro
  • การยกเว้น --no-pro ยกเว้นแพ็กเกจ Pro บนเป้าหมาย PHP 8.1 โดยเชิงโครงสร้างแล้ว เป้าหมาย PHP 7.4 จะยกเว้น Pro และ adapter ทั้งหมด
  • เวอร์ชัน การ build จะเขียน --version (หรือแท็กรีลีสหลังจากตัดอักษร v นำหน้าออก) ลงในไฟล์ composer.json และ CHANGELOG.md ที่สร้างขึ้น

พฤติกรรมนี้ได้รับการตรวจสอบยืนยันกับ scripts/build.php และ scripts/adjust-composer.php (generatePublicComposer(), generateProComposer(), buildReplace()) เอกสารอ้างอิงแฟล็กฉบับสมบูรณ์อยู่ที่ /integrations/backport/configuration/

คุณผสานตัวสร้างเข้ากับกระแสงานการรีลีสผ่านกระแสงาน GitHub Actions ใน .github/workflows/ โดย 0-ci.yml ทำหน้าที่เป็นเกตตรวจทุกการเปลี่ยนแปลงในแต่ละแบรนช์ถาวรด้วย PHPStan การทดสอบกฎ และการ dry-run ส่วน build.yml จะสร้างและรีลีสชุดแจกจ่ายเมื่อได้รับเหตุการณ์ repository-dispatch แบบ source-release หรือการ dispatch ด้วยตนเอง โมเดลการทำงานทั้งหมด ได้แก่ ทริกเกอร์ เลน เมทริกซ์การตรวจสอบความถูกต้อง และการรีลีสที่ใช้ร่วมกัน มีบันทึกไว้ใน /integrations/backport/production-usage/

ไปป์ไลน์การรีลีสคือ smoke test ของการผสานการทำงาน หลังจากการ build เสร็จสมบูรณ์ กระแสงานจะสลับ runner ไปยัง PHP เป้าหมายและรัน php -l กับซอร์สที่สร้างออกมาทั้งหมด จากนั้นจะติดตั้งและทดสอบการทำงานของแพ็กเกจที่สร้างขึ้นตลอดเมทริกซ์การตรวจสอบความถูกต้อง (PHP 8.1–8.4 สำหรับเลน PHP 8.1 และ PHP 7.4 และ 8.0 สำหรับเลน PHP 7.4) ชุดแจกจ่ายที่รันไทม์เป้าหมายปฏิเสธจะไม่ผ่านไปถึงขั้นการรีลีส ตรวจสอบยืนยันได้จาก .github/workflows/build.yml (จ็อบ syntax-check และ validate-*) คุณสามารถ smoke-test ผลลัพธ์ที่สร้างขึ้นในเครื่องด้วยวิธีเดียวกัน โดยใช้คำสั่ง Docker ที่ขั้นตอนการตรวจสอบความถูกต้องพิมพ์ออกมา — ดู /integrations/backport/quickstart/

พื้นผิวสาธารณะของตัวสร้างคือ orchestrator แบบ CLI และเอเลียสสคริปต์ Composer ของตัวสร้าง ไม่ใช่ไฟล์รันได้ใน bin/

จุดเข้าใช้งานแปลงเป็นวัตถุประสงค์
composer buildphp scripts/build.phpรันการ build แบบเต็ม
composer build:dryphp scripts/build.php --dry-runรันการ build แบบ dry-run
composer testphpunitรันชุดทดสอบ fixture ของกฎ
composer analysephpstan analyse rector/rules scripts --level=10วิเคราะห์โค้ดของการ build

ตรวจสอบยืนยันได้จาก composer.jsonscripts แพ็กเกจปลายทางเปิดเผยสัญลักษณ์ application programming interface (API) ดั้งเดิมของ NextPDF\ โดยไม่ถูก backport เปลี่ยนแปลง แพ็กเกจนี้แทนที่แพ็กเกจของซอร์ส และ autoload แผนผังที่ผสานรวมแล้วผ่านพรีฟิกซ์ PSR-4 เดียว

  • /integrations/backport/overview/ — ตัวสร้างคืออะไรและสร้างสิ่งใดออกมา
  • /integrations/backport/boot-and-discovery/ — ลำดับการบูตและการค้นหาซอร์ส
  • /integrations/backport/install/ — การติดตั้งบนโฮสต์สำหรับการ build และบนปลายทาง
  • /integrations/backport/production-usage/ — ไปป์ไลน์การรีลีส