🚦 Chính sách hợp nhất (Merge Policy) & Hướng dẫn kiểm soát CI của iBrowe

Để đảm bảo tính ổn định của hệ thống build và giảm thiểu gián đoạn, hãy tuân thủ nghiêm ngặt các quy tắc sau trước khi hợp nhất bất kỳ thay đổi nào vào các kho mã ibrowe-core hoặc ibrowe-browser.


Kiểm tra CI trước khi hợp nhất

  • Chỉ được merge khi pipeline Jenkins CI báo thành công trên pull request.
  • Nếu bạn chưa biết cách đọc kết quả Jenkins CI, hãy hỏi kỹ sư phụ trách hoặc nhờ onboarding từ @mihaiplesa.
  • PR từ các fork cần được cherry-pick sang một nhánh cục bộ trong ibrowe-core hoặc ibrowe-browser để kích hoạt quy trình CI.
  • Không thấy kết quả CI? ➜ Có thể nhánh vẫn còn nằm trên fork.

Phải revert ngay lập tức khi CI bị lỗi

Nếu có thay đổi nào gây lỗi CI hoặc làm hỏng kết quả kiểm thử, phải revert ngay lập tức:

  • Không cần chờ bàn luận với tác giả PR.
  • Mở lại issue gốc gắn với PR gây lỗi.
  • Nếu bạn vô tình làm hỏng hệ thống build: hãy nhận trách nhiệm, xin lỗi và hỗ trợ người khác nếu họ gặp sự cố tương tự.

🔁 Danh sách kiểm tra trước khi merge

  • CI pipeline thành công (bao gồm: ibrowe_unit_tests, ibrowe_browser_tests, audit-deps, test-security)
  • Nhánh của bạn không bị đóng — hãy kiểm tra trạng thái trong kênh Slack #ibrowe-core
  • Trạng thái Jenkins CI cho PR của bạn phải màu xanh (green)

🔧 Các tình huống phổ biến gây lỗi hệ thống (Tree breakage)

🔹 Phụ thuộc (Dependencies) lỗi thời

  • Nếu bạn sửa lỗi như npm audit, đừng quên cập nhật file DEPS tương ứng.
  • Mỗi kênh phát hành cần có một lần cập nhật DEPS riêng.

🔹 Cây cục bộ lỗi thời

  • Trước khi revert, hãy chạy:

    npm run sync  
    npm run apply-patches
    
  • Kiểm tra xem PR mới nhất đã sửa lỗi hay chưa.

🔹 Thành phần bên thứ ba được cập nhật

Các thay đổi upstream có thể gây ra:

  • URL bị hỏng

  • Lỗi kiểm thử (đặc biệt là test-security)

    ➜ Hãy tạo issue mới và cân nhắc thêm một proxy nếu tài nguyên bên ngoài thay đổi bất ngờ.


🚨 Khi nào nhánh bị đóng (Tree Closure)?

Cây được xem là “đóng” khi bất kỳ điều kiện nào sau đây bị lỗi:

  • ibrowe_unit_tests
  • ibrowe_browser_tests
  • npm run audit-deps
  • npm run test-security
  • Jenkins CI pipeline thất bại

🤯 Tại sao phải nghiêm ngặt như vậy?

  • Khi cây chính bị hỏng, mọi job CI trên mọi PR đều thất bại
  • Lãng phí thời gian của cả đội ngũ kỹ sư
  • Gây tắc nghẽn cho quy trình QA và phát hành
  • Việc revert sẽ rất khó khăn nếu mã lỗi bị ghi đè bởi nhiều commit mới

📎 Nguồn tham khảo: Chuyển thể từ tài liệu nội bộ về chính sách CI/hợp nhất của Brave — đã được điều chỉnh và gắn nhãn thương hiệu phù hợp với quy trình phát triển của iBrowe.