🚦 นโยบายการ 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