22 Commits
Author SHA1 Message Date
tbphp d01656a1d8 perf(ci): 迁移自托管运行器并优化并行验收 (#634)
* perf(ci): 切换现有自托管运行器并复用本机缓存

* perf(ci): 将主要 Linux 任务迁至 Mac ARM64 运行器

* fix(ci): 使用动态端口执行 Windows 安装验收

* test(cpa): 等待异步处理完成后校验 WebSocket 行为

* perf(ci): 并行数据库测试并隔离容器验收端口

* ci: 为数据库合同测试启用内存盘

* test(cpa): 固定断连日志脱敏测试的执行顺序

* fix(ci): 修复自托管验收中断和架构兼容问题

* fix(ci): 原子准备 Windows 安装验收配置
2026-09-13 08:31:56 +08:00
tbphp 175949e20a feat(usage): 支持自定义时间统计并统一时间筛选 (#594)
* feat(usage): 统一时间区间统计与快捷筛选

* fix(usage): 精简时间筛选与趋势提示布局

* fix(usage): 保留未修改时间端点的原始时刻
2026-09-08 13:33:06 +08:00
tbphp 3d14c18dcf feat(release): 统一 2.x 镜像标签通道 (#512) 2026-08-31 17:35:12 +08:00
tbphp 5c16ed84b3 feat(windows): 增加原生服务安装包 (#493)
* feat(windows): 增加原生服务安装包

* fix(windows): 收紧服务安装与升级流程

* fix(windows): 固定服务安装路径与语言资源

* fix(windows): 等待安装器进程完成

* fix(windows): 清理首次安装失败残留
2026-08-29 23:26:23 +08:00
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
tbphp a991251bc3 ci(release): 复用 CI 结论并消除发布流程重复验证 2026-08-19 19:45:52 +08:00
tbphp 7745ed5ab5 fix: release 修复发布问题 2026-08-19 16:36:32 +08:00
tbphp ad26607510 fix: release 修复发布问题 2026-08-19 16:19:12 +08:00
tbphp c804e081a8 fix(release): 修复 Beta 发布 Smoke 检查 2026-08-19 15:37:05 +08:00
tbphp 70b1afb995 chore(license): 补齐第三方许可证声明与发布分发 2026-08-19 13:28:49 +08:00
tbphp 6f6f7c3efc refactor(channel): 切换为 Bifrost 渠道执行架构 2026-08-10 08:22:15 +08:00
tbphp c25c3525b5 feat(pricing): 重构模型目录与价格同步 2026-08-03 08:37:16 +08:00
tbphp 7c44ecfefa chore(access-key): 完成集合改造验收 2026-08-01 13:16:26 +08:00
tbphp 1e9a8ffb63 refactor(protocol): 统一 OpenAI Completions 协议命名 2026-07-30 21:31:24 +08:00
tbphp b91bd5edf5 refactor(router): 统一路由注册与回退 2026-07-30 11:49:28 +08:00
tbphp 027771eb40 fix(release): 冒烟脚本改用随机幂等键 2026-07-29 12:52:34 +08:00
tbphp a6a25a571b chore(deps): 升级依赖与构建安全基线 2026-07-29 10:59:52 +08:00
tbphp 7196b1bf50 fix(release): 补齐冒烟写请求幂等头 2026-07-29 05:37:35 +08:00
tbphp b89dd9471e fix(v2): 完成全量审查修复 2026-07-28 11:24:29 +08:00
tbphp c6b5525cf7 fix(m4): 对齐用量价格与发布契约 2026-07-27 08:09:56 +08:00
tbphp 4ab71ce123 fix(ci): 加固发布说明与资源清理 2026-07-27 06:26:01 +08:00
tbphp c97081d124 fix(ci): 补全 2.x 发布门禁 2026-07-27 06:10:30 +08:00