执行摘要
- 一句话:提取Docker构建逻辑为可复用工作流,简化3个发布工作流
- 推荐动作:值得精读,特别对于负责CI/CD的工程师。展示了如何通过
workflow_call将重复的Docker构建逻辑抽取为可复用工作流,减少冗余代码并统一构建参数。关键设计决策包括:使用job outputs代替artifact传递digest、通过JSON tag_config灵活生成多架构标签、暴露image_repo支持测试环境。建议合并前按PR body中的测试计划手动触发验证。
功能与动机
减少Docker发布工作流中的重复代码,降低维护成本,并修复遗漏的构建参数。PR body指出原三个工作流共815行,大量重复;新方案通过workflow_call复用公共步骤,使每个调用工作流仅保留版本解析、标签配置等差异逻辑。同时修复了runtime ARM64 CUDA 13构建时缺少INSTALL_FLASHINFER_JIT_CACHE=1参数的问题。
实现拆解
1. 创建可复用构建工作流 _docker-build-and-publish.yml
- 文件新增,283行。
- 定义
workflow_call输入:docker_target, sgl_version, extra_build_args, checkout_ref, tag_config, use_environment, image_repo。
- 包含两个job:
build-x86(AMD64)和build-arm64(ARM64)。
- 每个job执行:清理磁盘、checkout、设置Docker Buildx、登录Docker Hub、构建指定目标并推送by-digest、输出digest。
- 主job
create-manifest:根据tag_config JSON生成多架构manifest并推送。
- 关键改进:使用job outputs传递digest,替代upload-artifact/download-artifact。
2. 创建可复用清理工作流 _docker-cleanup-nightly.yml
- 文件新增,78行。
- 接收
tag_prefixes, keep_count, image_repo参数。
- 通过Docker Hub API获取标签列表,删除超出保留数量的旧标签。
3. 简化三个调用工作流
release-docker.yml: 从295行减至47行,仅保留resolve-version job和调用可复用工作流的步骤。
release-docker-runtime.yml: 同样从310行减至47行。
release-docker-dev.yml: 从210行减至96行,新增prepare job用于计算checkout_ref、extra_build_args和tag_config,然后调用可复用工作流。
- 所有调用工作流新增
image_repo输入(默认lmsysorg/sglang),便于测试时推到staging仓库。
4. 迁移运行时配置
- 所有工作流改用
ubuntu-latest代替已弃用的ubuntu-22.04。
- 原
release-docker-dev.yml中的矩阵策略(4个平台×CUDA版本组合)被移到prepare job的tag_config JSON中,由可复用工作流统一处理。
关键文件:
.github/workflows/_docker-build-and-publish.yml(模块 CI工作流;类别 infra;类型 infrastructure): 核心可复用构建工作流,封装了所有Docker构建、推送、清单创建逻辑,是整个重构的基础。
.github/workflows/release-docker.yml(模块 CI工作流;类别 infra;类型 infrastructure): 框架Docker镜像发布工作流,从295行精简为47行,是重构的主要受益者之一。
.github/workflows/release-docker-runtime.yml(模块 CI工作流;类别 infra;类型 infrastructure): 运行时Docker镜像发布工作流,同样从310行精简为47行,修复了ARM64 CUDA 13构建缺少JIT缓存参数的问题。
.github/workflows/release-docker-dev.yml(模块 CI工作流;类别 infra;类型 infrastructure): 开发镜像发布工作流,从210行减至96行,新增prepare job计算配置,替代原矩阵策略。
.github/workflows/_docker-cleanup-nightly.yml(模块 CI工作流;类别 infra;类型 infrastructure): 新增可复用清理工作流,用于定期清理旧的nightly标签,减少Docker Hub上的垃圾标签。
关键符号:未识别
评论区精华
该PR无人工review评论,仅有一条Gemini自动评论表示无法生成review。无实质讨论。
风险与影响
关联脉络
参与讨论