Làm thẳng trên main
Từ 18.10.2026 mọi repo của Nemo12 làm theo kiểu trunk-based: không PR, không branch dài hạn, code đã kiểm thì push thẳng lên main và CI deploy trong vài phút.
Luồng của một thay đổi
bash
git commit -m "..." # pre-commit: lint + typecheck file đã stage + cổng khớp đường dẫn (~2-4 s)
git pull --rebase origin main # lấy commit của phiên khác
git push origin HEAD:main # pre-push: typecheck + unit test workspace bị đụng (~15 s)Sau khi push, CI trên main (một job) chạy lại cổng rồi deploy đúng các app bị đụng. CI đỏ thì không deploy, và workflow auto-revert tự hoàn nguyên commit đỏ.
- Push bị từ chối (
[rejected] ... fetch first): một phiên khác vừa push. Chạy lạigit pull --rebaserồi push. - Xung đột khi rebase: chỉ xảy ra khi hai phiên sửa cùng dòng. Gỡ trong cây của mình, chạy lại test, push.
- Tính năng làm dở: đẩy lên
mainsau một feature flag (cờ bật tắt, tiền lệPARTNERS_ENABLED), không giữ trên branch. - Trong worktree: làm trên một nhánh tạm ở máy (git không cho hai worktree cùng checkout
main) và pushHEAD:main. Nhánh tạm không lên GitHub.
Vì sao không giữ 3 branch (ielts, sat, speaking)
Thẳng lên main | 3 branch dài hạn | |
|---|---|---|
| Code lên production | Vài phút sau mỗi push | Chỉ khi merge branch về main |
| Merge | Gần như không có: rebase nhỏ, liên tục | Merge lớn, càng để lâu càng đau |
| Xung đột | Hiếm, nhỏ | Thường xuyên, vì ba program chung apps/learn, API, D1 |
| Migration D1 | Một dãy số, áp ngay | Ba branch thêm migration song song vào một database |
| Sửa code chung | Mọi program nhận ngay | Phải sửa ba lần hoặc cherry-pick |
Repo đã gặp thật: một branch cũ 10 ngày khi merge đã xoá khoảng 170.000 dòng. Thứ thay cho "cô lập bằng branch" là feature flag, và về lâu dài là mỗi program một app.
Đã gỡ gì
Trunk guard ngày 13.10.2026 (npm run land, nhánh ready/*, gộp mỗi đêm, chặn git push ... main) đã gỡ. npm run nightly (23:00, LaunchAgent trên Mac) nay chỉ kiểm main: chạy cổng báo cáo và 10% E2E quan trọng nhất, đỏ thì hiện thông báo.