🚦 นโยบายการ Merge และแนวทาง CI Gatekeeping ของ iBrowe
เพื่อรักษาเสถียรภาพของการ Build และลดความเสี่ยงต่อการเกิดปัญหา ต้องปฏิบัติตามกฎอย่างเคร่งครัดก่อนจะ Merge การเปลี่ยนแปลงใด ๆ เข้าไปใน repo ของ ibrowe-core หรือ ibrowe-browser
✅ ตรวจ CI ให้ผ่านก่อน Merge
- ให้ Merge ได้ เฉพาะในกรณีที่ Jenkins CI pipeline รายงานว่า Pull Request ผ่านทุกขั้นตอน
- ถ้าไม่มั่นใจวิธีดูผล Jenkins CI ให้สอบถามวิศวกรอาวุโส หรือขอคำแนะนำจาก @mihaiplesa
- PR ที่มาจาก fork ต้อง cherry-pick มาลง branch ใน ibrowe-core หรือ ibrowe-browser เพื่อให้ CI ทำงานได้
- ถ้าไม่เห็นผล CI ➜ นั่นหมายถึง branch นั้น ยังอยู่บน fork
❌ ต้อง Revert ทันที ถ้าพัง หากมีการ Merge แล้วทำให้ CI พัง หรือผลการทดสอบล้มเหลว ให้ Revert ทันที
- อย่ารอหารือกับเจ้าของ PR
- ให้เปิด Issue เดิมที่เชื่อมโยงกับ PR ที่ก่อปัญหา
- ถ้าคุณเป็นคนทำให้ Build พังเอง ให้แสดงความรับผิดชอบ ขอโทษ และช่วยเหลือคนอื่นเมื่อเกิดเหตุการณ์เดียวกัน
🔁 Checklist ความพร้อมก่อน Merge
- CI pipeline ต้องผ่าน (ibrowe_unit_tests, ibrowe_browser_tests, audit-deps, test-security)
- Branch ของคุณต้องไม่ถูกปิด — ตรวจสอบที่หัวข้อใน Slack ช่อง #ibrowe-core
- Jenkins CI ของ PR ต้องเป็นสีเขียว
🔧 สถานการณ์ที่พา Tree พังบ่อย ๆ 🔹 Dependencies เก่า
-
ถ้าแก้ปัญหาอย่าง npm audit อย่าลืมอัปเดตไฟล์ DEPS ให้ถูกต้อง
-
แต่ละ release channel ต้องอัปเดต DEPS ของตัวเอง 🔹 Local Tree เก่าเก็บ ก่อน revert อะไร ให้รัน: npm run sync npm run apply-patches
-
ตรวจด้วยว่ามี PR ล่าสุดที่แก้ปัญหาไปแล้วหรือยัง
🔹 อัปเดต Components ภายนอก (3rd-party)
- Upstream อาจเปลี่ยนแปลงจนทำให้เกิด:
- ลิงก์เสีย (Broken URLs)
- Test ล้มเหลว โดยเฉพาะ test-security
- ให้สร้าง Issue และพิจารณาเพิ่ม Proxy ถ้า resource ภายนอกมีการเปลี่ยนโดยไม่คาดคิด
🚨 Tree ปิดเมื่อไหร่? Tree จะถือว่าปิด (Closed) ถ้าอย่างใดอย่างหนึ่งล้มเหลว:
- ibrowe_unit_tests
- ibrowe_browser_tests
- npm run audit-deps
- npm run test-security
- Jenkins CI pipeline ล้มเหลว
🤯 ทำไมต้องเข้มขนาดนี้?
- ถ้า Tree หลักพัง ทุก CI job ในทุก PR จะล้มเหลวตามไปด้วย
- ทำให้เสียเวลาในการทำงานของทั้งทีม
- ขัดขวางรอบ QA และ Release
- การ Revert จะยากขึ้นมากหากมี Commit ใหม่ ๆ ซ้อนเข้ามาบนโค้ดที่พัง
📎 ที่มา: ดัดแปลงจากเอกสาร CI/merge policy ภายในของ Brave และปรับเนื้อหาให้เหมาะกับกระบวนการพัฒนา iBrowe