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

คุณภาพทางวิศวกรรม

ทุก push และทุก pull request ที่ส่งเข้า NextPDF จะรันเกต CI ที่บล็อกการ build สำหรับ การวิเคราะห์แบบสถิต ความครอบคลุมของบรรทัดที่เปลี่ยนแปลง คะแนน mutation และการตรวจสอบความถูกต้องของเอาต์พุตแบบมีแท็ก

เกต PHPStan สามรายการรันในทุก push และทุก pull request:

เกตขอบเขตบล็อก
Level 10src/ใช่
Level max (โปรไฟล์ strict)src/ใช่
การใส่คำอธิบายประกอบ SARIFsrc/คำแนะนำ

CI ถือว่าข้อค้นพบของ PHPStan Level 10 ใน src/ เป็นสิ่งที่บล็อกการ build โดยมีการตั้งค่าสองข้อที่ยกระดับมาตรฐานให้สูงกว่าการรัน Level 10 ตามค่าเริ่มต้น:

  • treatPhpDocTypesAsCertain — PHPStan เชื่อคำอธิบายประกอบ PHPDoc ว่าเป็นความจริง พื้นฐาน แทนที่จะถอยกลับไปขยายเป็นชนิดข้อมูลดั้งเดิม ดังนั้นคำอธิบายประกอบที่จำกัดชนิด ให้แคบลงแต่ขัดแย้งกับสิ่งที่การวิเคราะห์แบบสถิตอนุมานได้ จึงกลายเป็นข้อค้นพบที่ถูกรายงาน
  • reportUnmatchedIgnoredErrors — ทุกการระงับข้อผิดพลาดต้องจับคู่กับข้อผิดพลาด ที่กำลังถูกรายงานอยู่ มิฉะนั้นบิลด์จะล้มเหลว

แต่ละรายการ ignoreErrors สำหรับ src/ ถูกตรึงไว้กับตัวระบุของ PHPStan เส้นทางไฟล์ ที่แน่นอน และในกรณีที่เกี่ยวข้องก็ตรึงจำนวนครั้งที่แน่นอนด้วย ดังนั้นการเกิดขึ้นใหม่ ของตัวระบุเดียวกันที่ตำแหน่งอื่น หรือการเกิดขึ้นครั้งที่สองในไฟล์เดียวกัน ก็จะทำให้บิลด์ล้มเหลว

CI บังคับใช้เกณฑ์ความครอบคลุม 90% บนบรรทัดที่แต่ละ pull request เปลี่ยนแปลง วัดด้วย PCOV เทียบกับ base branch หาก pull request ต่ำกว่าเกณฑ์ บิลด์จะล้มเหลว

การทดสอบมิวเทชันตรวจสอบว่าเทสต์ยืนยันพฤติกรรมจริงหรือไม่ โดย CI กลายพันธุ์โค้ด แล้วกำหนดให้ต้องมีเทสต์ล้มเหลว ตัวชี้วัดคะแนน mutation สามตัวมีค่าขั้นต่ำแบบไม่ลดลง (monotonically non-decreasing):

ตัวชี้วัดค่าขั้นต่ำที่บังคับใช้
raw_msi88.9%
effective_msi89.0%
covered_msi88.9%

pull request ที่จะทำให้ตัวชี้วัดใดต่ำกว่าค่าขั้นต่ำของมันจะถูกปฏิเสธ ทั้งนี้ CI ใช้เกณฑ์ความคลาดเคลื่อนที่บันทึกไว้เป็นเอกสารก่อนเปรียบเทียบผลการรันกับค่าขั้นต่ำ

CI รัน veraPDF 1.30.1 กับโปรไฟล์ pdfua.strict เป็นเกตที่บล็อกการ build บนคลังทดสอบเอาต์พุตแบบมีแท็ก