Runbook này định nghĩa quy trình release tiêu chuẩn của maintainer.
Cập nhật lần cuối: 2026-02-20.
- Đảm bảo release có thể dự đoán và lặp lại.
- Chỉ publish từ code đã có trên
main. - Xác minh các artifact đa nền tảng trước khi publish.
- Duy trì nhịp release đều đặn ngay cả khi PR volume cao.
- Release patch/minor: hàng tuần hoặc hai tuần một lần.
- Bản vá bảo mật khẩn cấp: out-of-band.
- Không bao giờ chờ tích lũy quá nhiều commit lớn.
Automation release nằm tại:
.github/workflows/pub-release.yml
Các chế độ:
- Tag push
v*: chế độ publish. - Manual dispatch: chế độ chỉ xác minh hoặc publish.
- Lịch hàng tuần: chế độ chỉ xác minh.
Các guardrail ở chế độ publish:
- Tag phải khớp định dạng semver-like
vX.Y.Z[-suffix]. - Tag phải đã tồn tại trên origin.
- Commit của tag phải có thể truy vết được từ
origin/main. - GHCR image tag tương ứng (
ghcr.io/<owner>/<repo>:<tag>) phải sẵn sàng trước khi GitHub Release publish hoàn tất. - Artifact được xác minh trước khi publish.
- Đảm bảo các required check đều xanh trên
mainmới nhất. - Xác nhận không có sự cố ưu tiên cao hoặc regression đã biết nào đang mở.
- Xác nhận các workflow installer và Docker đều khoẻ mạnh trên các commit
maingần đây.
Chạy Pub Release thủ công:
publish_release:falserelease_ref:main
Kết quả mong đợi:
- Ma trận target đầy đủ build thành công.
verify-artifactsxác nhận tất cả archive mong đợi đều tồn tại.- Không có GitHub Release nào được publish.
Từ một checkout cục bộ sạch đã sync với origin/main:
scripts/release/cut_release_tag.sh vX.Y.Z --pushScript này đảm bảo:
- working tree sạch
HEAD == origin/main- tag không bị trùng lặp
- định dạng tag semver-like
Sau khi push tag, theo dõi:
- Chế độ publish
Pub Release - Job publish
Pub Docker Img
Kết quả publish mong đợi:
- release archive
SHA256SUMS- SBOM
CycloneDXvàSPDX - chữ ký/chứng chỉ cosign
- GitHub Release notes + asset
- Xác minh GitHub Release asset có thể tải xuống.
- Xác minh GHCR tag cho phiên bản đã release và
latest. - Xác minh các đường dẫn cài đặt phụ thuộc vào release asset (ví dụ tải xuống binary bootstrap).
Nếu release push tag thất bại sau khi artifact đã được xác minh:
- Sửa vấn đề workflow hoặc packaging trên
main. - Chạy lại
Pub Releasethủ công ở chế độ publish với:publish_release=truerelease_tag=<existing tag>release_reftự động được pin vàorelease_tagở chế độ publish
- Xác minh lại asset đã release.
- Giữ các thay đổi release nhỏ và có thể đảo ngược.
- Dùng một issue/checklist release cho mỗi phiên bản để bàn giao rõ ràng.
- Tránh publish từ các feature branch ad-hoc.