คุณภาพทางวิศวกรรม
ทุก push และทุก pull request ที่ส่งเข้า NextPDF จะรันเกต CI ที่บล็อกการ build สำหรับ การวิเคราะห์แบบสถิต ความครอบคลุมของบรรทัดที่เปลี่ยนแปลง คะแนน mutation และการตรวจสอบความถูกต้องของเอาต์พุตแบบมีแท็ก
การวิเคราะห์แบบสถิต
หัวข้อที่มีชื่อว่า “การวิเคราะห์แบบสถิต”เกต PHPStan สามรายการรันในทุก push และทุก pull request:
| เกต | ขอบเขต | บล็อก |
|---|---|---|
| Level 10 | src/ | ใช่ |
| Level max (โปรไฟล์ strict) | src/ | ใช่ |
| การใส่คำอธิบายประกอบ SARIF | src/ | คำแนะนำ |
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_msi | 88.9% |
effective_msi | 89.0% |
covered_msi | 88.9% |
pull request ที่จะทำให้ตัวชี้วัดใดต่ำกว่าค่าขั้นต่ำของมันจะถูกปฏิเสธ ทั้งนี้ CI ใช้เกณฑ์ความคลาดเคลื่อนที่บันทึกไว้เป็นเอกสารก่อนเปรียบเทียบผลการรันกับค่าขั้นต่ำ
การตรวจสอบเอาต์พุต
หัวข้อที่มีชื่อว่า “การตรวจสอบเอาต์พุต”CI รัน veraPDF 1.30.1 กับโปรไฟล์ pdfua.strict เป็นเกตที่บล็อกการ build
บนคลังทดสอบเอาต์พุตแบบมีแท็ก