Gate nằm ở branch protection, không nằm ở workflow. Pipeline chỉ báo cáo trạng thái; nhánh đích mới là nơi quyết định "check này bắt buộc phải xanh mới merge được".
Cấu hình tối thiểu cho nhánh chính:
- Bật required status checks và chọn đúng tên job (
lint,typecheck,test). - Bật require branches to be up to date — chống trường hợp hai PR xanh riêng lẻ nhưng gộp lại thì hỏng (semantic conflict).
- Cấm push thẳng vào nhánh chính, kể cả admin.
Ngưỡng coverage — điểm hay bị hỏi vặn: đặt ngưỡng tuyệt đối cao (vd 90%) cho codebase cũ chỉ dẫn tới test viết cho có để nâng số. Cách dùng được hơn là chặn theo coverage của phần code thay đổi trong PR (patch coverage), kèm quy tắc không được tụt so với baseline. Ngưỡng đo cái người ta kiểm soát được, không đo di sản.
yaml
typecheck:
steps:
- run: pnpm typecheck # tên job này khai trong required checksNguyên tắc: gate phải nhanh và tất định.
Một check chậm hoặc flaky nằm trong tập bắt buộc sẽ bị đội gỡ ra sau vài ngày.