Đừng để việc viết Changelog “bào mòn” thời gian của bạn
Hãy tưởng tượng: 5 giờ chiều thứ Sáu, sếp giục release bản vá lỗi gấp. Thay vì được về sớm, bạn phải ngồi lội git log, lọc ra 50 commit lộn xộn để viết file CHANGELOG.md. Chỉ riêng việc copy-paste và sửa lỗi format cũng đủ khiến bạn mất ít nhất 30 phút quý báu.
Mình từng kẹt trong vòng lặp đó khi làm dự án outsource với hơn 20 nhân sự. File changelog lúc đó giống như một nồi “lẩu thập cẩm”: sai ngày tháng, thiếu tính năng, format mỗi người một kiểu. Sau khi thử qua nhiều công cụ, mình chọn git-cliff. Đây là bộ công cụ viết bằng Rust, tốc độ xử lý cực nhanh và khả năng tùy biến gần như không có giới hạn.
Nếu bạn muốn quy trình release chuyên nghiệp như các thư viện mã nguồn mở lớn, bài viết này là chìa khóa dành cho bạn.
Tại sao git-cliff lại “ăn đứt” các đối thủ khác?
git-cliff không chỉ đơn thuần là liệt kê commit. Nó phân tích lịch sử Git và render dữ liệu qua template chuyên nghiệp. So với standard-version (hiện đã ít bảo trì) hay conventional-changelog, công cụ này có nhiều ưu điểm vượt trội.
- Tốc độ đáng kinh ngạc: Với repo có 10.000 commit, nó tạo changelog chỉ trong chưa đầy 1 giây.
- Single Binary: Bạn không cần cài Node.js, Python hay Ruby. Chỉ cần một file thực thi duy nhất là đủ.
- Template linh hoạt: Sử dụng Tera engine (tương tự Jinja2), giúp bạn tạo file Markdown, HTML hoặc thậm chí là JSON.
- Hỗ trợ đa dạng: Hoạt động tốt với cả Conventional Commits, emojis, và các quy tắc phức tạp do bạn tự định nghĩa.
Bước 1: Cài đặt siêu tốc
Bạn có thể cài đặt git-cliff trên mọi hệ điều hành phổ biến hiện nay.
# Dành cho anh em dùng macOS
brew install git-cliff
# Nếu máy đã có sẵn Rust
cargo install git-cliff
# Windows dùng Scoop
scoop install git-cliff
Sau khi chạy xong, hãy gõ git-cliff --version. Nếu hiện số phiên bản, bạn đã sẵn sàng sang bước tiếp theo.
Bước 2: Thiết lập “bộ não” cliff.toml
Để bắt đầu, hãy di chuyển vào thư mục dự án và khởi tạo file cấu hình:
git-cliff --init
Lệnh này tạo ra file cliff.toml. Đây chính là nơi bạn dạy công cụ cách đọc hiểu commit của mình. Hãy chú ý phần commit_parsers, nơi chúng ta dùng Regex để phân loại:
commit_parsers = [
{ message = "^feat", group = "🚀 Tính năng mới" },
{ message = "^fix", group = "🐛 Sửa lỗi" },
{ message = "^perf", group = "⚡ Tối ưu hiệu năng" },
{ message = "^doc", group = "📚 Tài liệu" },
{ message = "^chore\\(release\\): prepare for", skip = true },
{ body = ".*security", group = "🛡️ Bảo mật" },
]
Cách thiết lập này rất trực quan. Chỉ cần commit message bắt đầu bằng “feat”, nó sẽ tự động rơi vào mục “Tính năng mới” trong file changelog cuối cùng.
Bước 3: Chuẩn hóa cách viết Commit
Công cụ chỉ thông minh khi dữ liệu đầu vào chuẩn. Bạn nên áp dụng Conventional Commits. Cấu trúc lý tưởng nhất là: type(scope): description.
Thực tế tại team mình, ban đầu mọi người rất hay quên. Giải pháp là cài thêm lefthook hoặc husky để chặn các commit kiểu “fix bug”, “update code”. Khi lịch sử Git sạch sẽ, file changelog của bạn sẽ tự động đẹp mà không cần chỉnh sửa tay.
Bước 4: Xuất bản Changelog đầu tiên
Bây giờ là lúc tận hưởng thành quả. Chạy lệnh sau để tạo file:
git-cliff -o CHANGELOG.md
Nếu bạn chỉ muốn lấy các thay đổi từ tag gần nhất (phục vụ cho việc viết Release Note trên GitHub), hãy dùng flag --latest:
git-cliff --latest --strip header
Kết quả trả về sẽ là danh sách thay đổi cực kỳ chuyên nghiệp, có kèm cả link commit ID rút gọn (ví dụ: a1b2c3d) để tiện tra cứu.
Bước 5: Tự động hóa hoàn toàn với CI/CD
Đừng dừng lại ở việc chạy lệnh bằng tay. Hãy tích hợp git-cliff vào quy trình CI/CD. Trong một dự án thực tế mình triển khai, mỗi khi có ai đó push tag mới (ví dụ: v1.2.0), GitHub Actions sẽ tự động kích hoạt.
Hệ thống sẽ tự chạy git-cliff, cập nhật file CHANGELOG.md, sau đó tự động tạo một GitHub Release kèm theo nội dung vừa render. Toàn bộ quy trình này mất chưa đến 10 giây và hoàn toàn không cần con người can thiệp. Bạn có thể dành thời gian đó để pha một tách cà phê thay vì ngồi gõ Markdown.
Lời kết
Tự động hóa changelog là bước đi nhỏ nhưng mang lại sự chuyên nghiệp lớn cho dự án. git-cliff không chỉ giúp bạn rảnh tay mà còn tạo thói quen viết commit có trách nhiệm cho cả team. Chỉ mất 15 phút setup, nhưng bạn sẽ tiết kiệm được hàng chục giờ làm việc mỗi năm. Hãy thử áp dụng ngay cho dự án của mình nhé!

