用途:自动化在 Chainloop 项目全组件中升级 Go 版本,按流程处理源码、Docker 镜像、文档及相关工具版本。
主要能力与用法:
- 确认目标版本:询问用户目标 Go 版本(如 1.25.3),并询问是否同时升级 Atlas 迁移 Docker 镜像(若是,再问目标 Atlas 版本,如 0.38.0)。
- 获取镜像摘要:执行 docker pull golang:X.XX.X,从输出中提取 SHA256 摘要。
- 更新源码:修改 ./go.mod 中的 go 指令,替换 go X.XX.X;按项目政策不要更新 ./extras/dagger/go.mod。
- 更新 Docker 镜像:在所有 Dockerfile 中替换 FROM golang:X.XX.X@sha256:OLD_DIGEST AS builder 为新的版本与摘要(完整文件清单见 files-to-update.md)。
- 更新文档:在 ./CLAUDE.md 的“Key Technologies”中更新版本引用。
- 可选更新 Atlas:拉取 arigaio/atlas 镜像并提取摘要,更新 ./app/controlplane/Dockerfile.migrations;更新 ./common.mk 前必须先验证版本可用:curl -sSf https://atlasgo.sh | ATLAS_VERSION=vX.XX.X sh -s -- --version,若不可用则只更新 Docker 镜像;可用后用 curl -sSf https://atlasgo.sh | ATLAS_VERSION=vX.XX.X sh -s -- -y 更新安装版本。
- 验证:运行 make test 与 make lint,出现错误需先解决。
- 收尾检查:更新许可证头年份;若涉及 proto 文件运行 buf format -w;若构造函数依赖变化运行 wire ./...;用 go mod tidy 校验 go.mod。
适用场景:需要跨 Chainloop 的 CLI、控制平面与 Artifact CAS 等组件统一升级 Go 版本时。
限制与注意:Docker 镜像必须使用 SHA256 摘要以保证安全与可复现;dagger 模块的 go.mod 不得更新;Go 升级可能引入破坏性变更,需充分测试。其余细节暂未提供。