- Public publish chỉ chạy từ tag semver
vX.Y.Z. latestchỉ cập nhật cùng semver release.DOCKERHUB_USERNAMElà secret bắt buộc để publish Docker Hub.DOCKERHUB_NAMESPACEchỉ là optional override khi namespace khác username.- GitHub Actions nên dùng
DOCKERHUB_TOKENcho đăng nhập publish. DOCKERHUB_PASSWORDchỉ còn là legacy fallback trong workflow hiện tại.
DOCKERHUB_USERNAMEDOCKERHUB_TOKENDOCKERHUB_NAMESPACEchỉ khi namespace khác username
Docker Desktop giúp bạn đăng nhập và thử kéo/push image cục bộ, nhưng publish tự động trên GitHub-hosted runner vẫn cần repo secrets ở GitHub.
campuscore-backendcampuscore-auth-servicecampuscore-notification-servicecampuscore-finance-servicecampuscore-academic-servicecampuscore-engagement-servicecampuscore-people-servicecampuscore-analytics-servicecampuscore-frontend
Mỗi image public được publish với:
- semver tag, ví dụ
v1.3.6 - short SHA immutable tag
latest
Ưu tiên rollback bằng:
- digest đã được verify ở release summary
- short SHA immutable tag
- semver tag cũ
Không dùng latest làm mốc rollback.
Sau khi CD publish xong, có thể kiểm lại đủ 9 image trên GHCR và Docker Hub bằng script có timeout/retry:
$env:RELEASE_TAG='v1.3.6'
$env:RELEASE_SHORT_SHA=(git rev-parse --short HEAD).Trim()
node scripts/verify-release-manifests.mjsNếu Docker Hub namespace khác username, set thêm:
$env:DOCKERHUB_NAMESPACE='your-namespace'Script mặc định kiểm đủ release tag hiện hành, short SHA và latest cho cả hai registry. Khi Docker Hub trả rate-limit 429 cho manifest inspect trên máy local, script sẽ fallback sang Docker Hub tag API để xác nhận tag public vẫn tồn tại. Nếu local network hoặc Docker Desktop làm lệnh verify timeout nhưng job CD Verify published release artifacts đã xanh, kết quả trên GitHub Actions là nguồn xác nhận release chính.