tbphp
1bc4c7fead
perf(release): 镜像复用预编译产物 + GOPROXY 网络容错 (#467)
* fix(ci): GOPROXY 在网络错误时回退到直连源
默认的 GOPROXY=https://proxy.golang.org,direct 用逗号分隔,只在收到
404/410 时才回退到下一个源;proxy.golang.org 的瞬时网络故障(如
HTTP/2 stream INTERNAL_ERROR)会直接让整个 job 失败,默认配置里的
direct 后备源在最需要它的场景下形同虚设。
改用竖线分隔,任何错误(含网络错误)都回退。实验验证:
- 逗号:首个源 EOF -> 直接失败,不尝试第二个源
- 竖线:首个源 EOF -> 成功回退并完成下载
ci.yml、release.yml 以 workflow 级 env 统一设置;Dockerfile 内的
go mod download 走同一问题,一并设置。不引入第三方镜像源,避免为
发布链路增加新的信任方。
* perf(release): 镜像打包复用预编译产物,不再重复编译
publish-images 此前在 Docker 内从 go mod download 开始重新编译 Go 与
Web(两个平台各一次,实测 216s),而 build-binaries 早已交叉编译出
gpt-load-linux-amd64/arm64——正是镜像需要的那两个文件。
Dockerfile 拆出共享的 runtime stage,两条打包路径都以它为基:
- source-build:默认 target,自包含源码构建,供本地与用户自建使用,
必须保持在文件末尾,否则默认构建会落到 prebuilt 而要求预编译产物
- prebuilt:发布用,直接 COPY 预编译二进制
runtime 配置只定义一次,避免两套配置各自漂移。GitHub artifact 不保留
可执行位,prebuilt 用 COPY --chmod=0755 显式恢复。
发布证据链:新增 prebuilt-image-smoke,在发布前用与 publish-images
完全相同的打包路径做 smoke 与 Trivy 扫描,并加入 publication-preflight
的 needs;docker-smoke 继续覆盖源码自包含路径,两者不可互相替代。
release-docker-smoke.sh 新增 RELEASE_SMOKE_BUILD_TARGET 支持指定 target。
container_contract_test.go 原用「最后一个 FROM」定位 runtime 契约,多
stage 后不再成立,改为定位共享 runtime stage,并新增两条断言:每个可
发布 stage 必须派生自 runtime、除 runtime 外不得再有直接以 alpine 为基
的 stage,防止新增路径绕开全部 runtime 断言。已反向验证两条断言均能
拦截对应的破坏方式。
本地验证:prebuilt 镜像实跑 release-docker-smoke.sh 全流程通过(含
非 root 运行、数据目录权限、健康检查、Web UI、认证边界);删除
release/ 后默认 target 仍能正常源码构建。
* fix(release): prebuilt smoke 覆盖 arm64,补全发布前验证
publish-images 推送 linux/amd64 与 linux/arm64 两个平台,两条 prebuilt
路径 COPY 的是不同的二进制,但此前 prebuilt-image-smoke 只在 x86_64
runner 上验证了 amd64,arm64 打包路径没有发布前验证。
改为双架构矩阵,arm64 使用原生 ubuntu-24.04-arm runner(仓库在
native-artifact-smoke 已有先例)而非 QEMU:QEMU 模拟下的启动行为不能
代表真实 arm64 运行时。同时按架构精确下载单个产物,不再整批拉取。
另外让 RELEASE_SMOKE_BUILD_TARGET 的校验错误信息带上实际传入的值,
便于排查 CI 环境变量配置问题。
本地在 arm64 主机上实跑 prebuilt smoke 全流程通过。
2026-08-24 22:26:58 +08:00
..
2026-08-20 17:19:32 +08:00
2026-08-12 16:58:32 +08:00
2026-08-19 20:04:29 +08:00
2026-08-24 11:11:22 +08:00
2026-08-24 11:11:22 +08:00
2026-08-15 15:37:50 +08:00
2026-08-24 11:11:22 +08:00
2026-08-24 20:07:11 +08:00
2026-08-17 16:12:07 +08:00
2026-08-24 20:07:11 +08:00
2026-08-24 20:07:11 +08:00
2026-08-18 08:08:44 +08:00
2026-08-10 18:46:59 +08:00
2026-08-24 11:11:22 +08:00
2026-08-24 11:11:22 +08:00
2026-08-17 12:05:32 +08:00
2026-08-01 18:18:49 +08:00
2026-08-24 11:11:22 +08:00
2026-07-24 08:37:22 +08:00
2026-08-11 17:42:10 +08:00
2026-08-24 11:11:22 +08:00
2026-08-22 02:00:23 +08:00
2026-08-22 02:00:23 +08:00
2026-08-24 20:07:11 +08:00
2026-08-24 11:11:22 +08:00
2026-08-24 20:07:11 +08:00
2026-08-15 15:46:33 +08:00
2026-08-24 20:07:11 +08:00
2026-08-03 08:37:16 +08:00
2026-07-31 00:13:17 +08:00
2026-08-24 22:26:58 +08:00