Sau khi merge PR #3, workflow node-go fail ở cả 2 arch (run 4179) với lỗi checksum verification:
golangci/golangci-lint err hash_sha256_verify checksum for
'golangci-lint-2.12.2-linux-arm64.tar.gz' did not verify
445f77d3... (expected) vs 44cd40a8... (actual)
Root cause
Không phải file hỏng. Checksums file v2.12.2 có 2 dòng kề nhau:
Tarball tải về hash ra 44cd40a8... → khớp checksums file → file lành mạnh. Lỗi là do install.sh (branch master) dò checksum khớp nhầm sang dòng .sbom.json, vì tên file .tar.gz là tiền tố của .tar.gz.sbom.json. Đây là regression của install.sh sau khi golangci-lint bắt đầu ship kèm SBOM.
Fix
Bỏ install.sh, tải tarball trực tiếp từ GitHub release + extract (dùng lại biến go_arch đã có). Nhất quán với cách cài Go ngay trong Dockerfile này (cũng không verify checksum).
Đã mô phỏng chính xác lệnh cho cả linux-amd64 và linux-arm64 → binary ELF đúng kiến trúc, path golangci-lint-<ver>-<arch>/golangci-lint đúng.
Push branch này đã trigger workflow node-go (path node-go/** khớp) → theo dõi run mới để xác nhận build xanh.
Note
Vì workflow trigger trên mọi branch chạm node-go/**, image :latest sẽ được build lại đúng ngay khi push branch này (không cần đợi merge). Phiên bản v2.12.2 giữ nguyên.
## Problem
Sau khi merge PR #3, workflow `node-go` fail ở cả 2 arch (run [4179](https://git.thuanle.me/public/base/actions/runs/4179)) với lỗi checksum verification:
```
golangci/golangci-lint err hash_sha256_verify checksum for
'golangci-lint-2.12.2-linux-arm64.tar.gz' did not verify
445f77d3... (expected) vs 44cd40a8... (actual)
```
## Root cause
**Không phải file hỏng.** Checksums file v2.12.2 có 2 dòng kề nhau:
```
44cd40a8... golangci-lint-2.12.2-linux-arm64.tar.gz ← checksum ĐÚNG
445f77d3... golangci-lint-2.12.2-linux-arm64.tar.gz.sbom.json ← checksum của file SBOM
```
Tarball tải về hash ra `44cd40a8...` → khớp checksums file → file lành mạnh. Lỗi là do `install.sh` (branch `master`) dò checksum khớp nhầm sang dòng `.sbom.json`, vì tên file `.tar.gz` là tiền tố của `.tar.gz.sbom.json`. Đây là regression của install.sh sau khi golangci-lint bắt đầu ship kèm SBOM.
## Fix
Bỏ `install.sh`, tải tarball trực tiếp từ GitHub release + extract (dùng lại biến `go_arch` đã có). Nhất quán với cách cài Go ngay trong Dockerfile này (cũng không verify checksum).
```diff
- curl -fsSL -o /tmp/golangci-lint-install.sh \
- "https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh"; \
- sh /tmp/golangci-lint-install.sh -b /usr/local/bin "${GOLANGCI_LINT_VERSION}"; \
- rm -f /tmp/golangci-lint-install.sh; \
+ gcl_ver="${GOLANGCI_LINT_VERSION#v}"; \
+ curl -fsSL -o /tmp/gcl.tgz \
+ "https://github.com/golangci/golangci-lint/releases/download/${GOLANGCI_LINT_VERSION}/golangci-lint-${gcl_ver}-${go_arch}.tar.gz"; \
+ tar -C /tmp -xzf /tmp/gcl.tgz; \
+ install -m 0755 "/tmp/golangci-lint-${gcl_ver}-${go_arch}/golangci-lint" /usr/local/bin/golangci-lint; \
+ rm -rf /tmp/gcl.tgz "/tmp/golangci-lint-${gcl_ver}-${go_arch}"; \
```
## Verification
- Đã mô phỏng chính xác lệnh cho cả `linux-amd64` và `linux-arm64` → binary ELF đúng kiến trúc, path `golangci-lint-<ver>-<arch>/golangci-lint` đúng.
- Push branch này đã trigger workflow `node-go` (path `node-go/**` khớp) → theo dõi run mới để xác nhận build xanh.
## Note
Vì workflow trigger trên mọi branch chạm `node-go/**`, image `:latest` sẽ được build lại đúng ngay khi push branch này (không cần đợi merge). Phiên bản `v2.12.2` giữ nguyên.
The official install.sh (master branch) fails checksum verification because it
matches the .tar.gz line against the .sbom.json checksum (the tarball filename
is a prefix of the sbom filename). The downloaded tarball is NOT corrupt - its
real sha256 matches the checksums file - install.sh just picks the wrong line.
Replace install.sh with a direct tarball download + extract, reusing the
existing go_arch variable. Consistent with how Go itself is installed in this
Dockerfile (no checksum verification either).
Co-Authored-By: Claude <noreply@anthropic.com>
✅PASSED — bước "Build Docker images" xanh (chính bước từng fail vì checksum). Fix tarball hoạt động.
amd64
build
❌ FAILED — tất cả step "cancelled", started == completed (0 giây).
—
amend-manifest
⏭️ skipped (do amd64 chưa build xong)
Nguyên nhân amd64 fail
Không phải lỗi code. Ở run 4178/4179, job amd64 đã chạy tới bước Build rồi mới fail vì checksum bug. Ở run 4180 (sau fix), amd64 bị cancel tứcì trước khi chạy bất kỳ step nào. Tức là runner self-hosted amd64 đang offline giữa hai lần — đây là vấn đề infra, cần bring runner amd64 lên lại.
Trạng thái image hiện tại
node-go:arm64-latest: đã update với fix (có golangci-lint v2.12.2).
Merge PR này → trigger build trên main (workflow chạy trên push: node-go/**), hoặc đợi cron weekly ( Chủ nhật 02:00 UTC).
Code đã sẵn sàng, chỉ chờ runner.
## Trạng thái verify (run [4180](https://git.thuanle.me/public/base/actions/runs/4180))
| Arch | Job | Kết quả |
|---|---|---|
| arm64 | build | ✅ **PASSED** — bước "Build Docker images" xanh (chính bước từng fail vì checksum). Fix tarball hoạt động. |
| amd64 | build | ❌ FAILED — **tất cả step "cancelled"**, `started == completed` (0 giây). |
| — | amend-manifest | ⏭️ skipped (do amd64 chưa build xong) |
## Nguyên nhân amd64 fail
**Không phải lỗi code.** Ở run 4178/4179, job amd64 **đã chạy tới bước Build** rồi mới fail vì checksum bug. Ở run 4180 (sau fix), amd64 bị **cancel tứcì trước khi chạy bất kỳ step nào**. Tức là **runner self-hosted `amd64` đang offline** giữa hai lần — đây là vấn đề infra, cần bring runner amd64 lên lại.
## Trạng thái image hiện tại
- `node-go:arm64-latest`: đã update với fix (có golangci-lint v2.12.2).
- `node-go:amd64-latest`: **chưa rebuild** (job cancel).
- `node-go:latest` (multi-arch manifest): **chưa update** (amend-manifest skip).
## Khi nào amd64 xanh lại
Khi runner `amd64` online trở lại:
1. Rerun job amd64 của run này, hoặc
2. Workflow `workflow_dispatch` thủ công, hoặc
3. Merge PR này → trigger build trên main (workflow chạy trên `push: node-go/**`), hoặc đợi cron weekly ( Chủ nhật 02:00 UTC).
Code đã sẵn sàng, chỉ chờ runner.
thuanle
merged commit 364e78b608 into main2026-08-11 15:40:48 +07:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Problem
Sau khi merge PR #3, workflow
node-gofail ở cả 2 arch (run 4179) với lỗi checksum verification:Root cause
Không phải file hỏng. Checksums file v2.12.2 có 2 dòng kề nhau:
Tarball tải về hash ra
44cd40a8...→ khớp checksums file → file lành mạnh. Lỗi là doinstall.sh(branchmaster) dò checksum khớp nhầm sang dòng.sbom.json, vì tên file.tar.gzlà tiền tố của.tar.gz.sbom.json. Đây là regression của install.sh sau khi golangci-lint bắt đầu ship kèm SBOM.Fix
Bỏ
install.sh, tải tarball trực tiếp từ GitHub release + extract (dùng lại biếngo_archđã có). Nhất quán với cách cài Go ngay trong Dockerfile này (cũng không verify checksum).Verification
linux-amd64vàlinux-arm64→ binary ELF đúng kiến trúc, pathgolangci-lint-<ver>-<arch>/golangci-lintđúng.node-go(pathnode-go/**khớp) → theo dõi run mới để xác nhận build xanh.Note
Vì workflow trigger trên mọi branch chạm
node-go/**, image:latestsẽ được build lại đúng ngay khi push branch này (không cần đợi merge). Phiên bảnv2.12.2giữ nguyên.Trạng thái verify (run 4180)
started == completed(0 giây).Nguyên nhân amd64 fail
Không phải lỗi code. Ở run 4178/4179, job amd64 đã chạy tới bước Build rồi mới fail vì checksum bug. Ở run 4180 (sau fix), amd64 bị cancel tứcì trước khi chạy bất kỳ step nào. Tức là runner self-hosted
amd64đang offline giữa hai lần — đây là vấn đề infra, cần bring runner amd64 lên lại.Trạng thái image hiện tại
node-go:arm64-latest: đã update với fix (có golangci-lint v2.12.2).node-go:amd64-latest: chưa rebuild (job cancel).node-go:latest(multi-arch manifest): chưa update (amend-manifest skip).Khi nào amd64 xanh lại
Khi runner
amd64online trở lại:workflow_dispatchthủ công, hoặcpush: node-go/**), hoặc đợi cron weekly ( Chủ nhật 02:00 UTC).Code đã sẵn sàng, chỉ chờ runner.