Skip to content

Latest commit

 

History

History
29 lines (15 loc) · 2.63 KB

File metadata and controls

29 lines (15 loc) · 2.63 KB

构建与发布

日常 CI 保留 Go、竞态、Windows、容器和 LuCI 检查。Linux 的 13 个交叉编译目标在一个 runner 内顺序构建,共用同一个 Go 工具链和 runner 内的 Go 构建缓存。普通提交和 PR 不下载 OpenWrt SDK、不生成发布包。

正式发布由 release.yml 编排。OpenWrt 构建通过可复用工作流加入同一依赖图,发布任务在所有产物就绪后才分配 runner,不轮询等待另一条工作流。

OpenWrt 软件包

scripts/openwrt-targets.json 保存实际 Go ABI、包架构及包格式的映射。目前 61 个软件包对应 13 组 Go ABI。每组只编译一次客户端和 OpenWrt 后端;IPK 与 APK 复用这些静态二进制。

IPK 和 APK 各使用一个相应版本的官方 SDK,保留原生包格式、LuCI 目录、依赖、配置保留清单和生命周期脚本。SDK 用作打包环境,包内程序的目标架构由 Go 编译参数决定。包架构只在本软件包的 Makefile 定义中指定,不改变 SDK 的工具链或其他软件包架构。

生成包之前和之后均验证 ELF 位数、机器类型、字节序、CGO_ENABLED=0、Go CPU 参数、版本和提交身份。无 VFP 的 ARM 使用软件浮点构建,MIPS 与 MIPS64 同样使用对应的软件浮点参数。不会仅修改文件名或元数据来宣称支持另一种 ABI。

Go 已使用 -s -w 生成精简程序;批量打包不再用 SDK 的目标专用 strip 工具处理这些二进制,以保留 Go 构建信息。若以后启用 CGO 或加入动态库,需要重新评估共享 SDK 打包,不能继续沿用当前假设。

OpenWrt 发布部分共四个 runner job:一次 ABI 编译、IPK 打包、APK 打包及资产清单组装。两种格式的 SDK 打包顺序执行。中间产物保留一天,公开发布成功后删除本次运行的中间产物。

恢复中断的发布

workflow_dispatch 的 tag 字段接受现有草稿或已公开的版本,不移动原有标签。草稿中的通用资产只有在版本、提交和校验和均匹配时才会复用;已有容器镜像通过原有证明和身份检查后复用。

已公开版本的手动运行保留容器镜像协调及公开自动更新检查,不重新构建 OpenWrt 软件包。

自动化资源控制

自动合并机器人只选择默认分支的分支检查,不能把同提交的标签发布当作分支检查。失败或人工取消的运行均不自动重试,日志确认后由维护者决定是否重跑失败任务。

机器人以检查完成事件为主,每六小时补充核对一次。所有构建任务都有超时;合并检查仍要求原有 CI 成功,不降低已有检查要求。