CI 工作流架构
CI(.github/workflows/ci.yml)是 PR 验证的统一入口,也负责 main 发布前验证。
功能分支 push 不再执行另一份 PR 验证。定时、手动和受保护发布保留各自的生命周期。
先规划,再分配 runner
ci-plan.py 比较明确的 base/head 提交,输出 ci-plan.json 和任务摘要。
新增、删除和重命名的配方都纳入比较。运行时比较使用固定版本 updater 的结构化签名;
无法解析的历史描述符会保守测试,不会被静默忽略。仅元数据修改仍需通过静态、注册、
站点及候选声明检查。
规划器基于两份源码展开 xim.pkgindex.* 模块导入与包依赖的反向影响,并将展开后的
文件集交给消费者测试。引用是配方中任意位置的包坐标(<命名空间>:<名称>[@<版本或范围>],
涵盖依赖表达式),或 deps 表中的裸名称;其余裸字符串(关键词、分类、程序名、路径)不是引用。
一个名称指向该名称的所有配方。钉住确切版本的消费者,仅当该版本条目改变或配方在版本条目之外
改变时受影响;写范围或不写版本的消费者受任何改变影响;经由另一消费者到达的消费者按整体改变
计。因此追加一个版本只规划该包及其未钉住版本的消费者:mcpp 的版本更新规划 4 个包,此前裸词
使之规划 71 个(#1094)。动态构造的平台表交给现有平台读取器处理,不宣称无法保证的精确度。
只有存在待安装文件时,才分配平台生命周期任务。原生宿主仍是 Linux/Windows x86_64 和 Apple Silicon macOS;自动升级候选保留精确的原生平台/架构矩阵。x86_64 安装成功 不能证明 ARM64 载荷可执行。
.github/ci-profiles.json 管理路由,包含各复用 workflow 自身、执行器及消费的包。
路由修改会重新验证各 profile。现有文件通过 workflow_call 执行,保留模拟器、SDK、
原生扩展、GUI、裸机及 Luban 验收。资源构建器和周期巡检既可复用,也保留独立的
手动或定时入口。
框架修改会在桌面原生宿主安装 Eden 桌面包和 Android 数据包,并执行真实 CLI/APK 冒烟测试,验证载荷、路由及卸载。ncurses 闭包回归针对相关运行库或框架变更执行, 不再追加到每个无关包 PR。
一个固定的 required 结果
required 总会执行,并核对计划要求的任务清单。失败、取消、计划内任务跳过或结果
缺失都算失败;没有计划执行的任务可以跳过。规划失败不能得到通过结果。PR 入口不设
路径过滤,因此纯文档 PR 也有同一个 required 结果。
新检查首次通过后,仓库管理员应将 GitHub Actions 的 required 状态加入 main 规则集,
并保留现有审查、签名和历史规则。分支规则属于仓库设置,不属于 YAML。
机器人提案只显式派发这个入口,传递完整 base 和预期 head SHA。分支执行前发生变化 则验证失败。候选验证只读;发现更新和创建提案仍在拥有独立写权限的定时 updater 中。 PR 不会运行发布步骤。
环境、资源及发布
复合 action setup-xlings 复用平台生命周期、最低客户端注册与 Eden 测试的安装流程。
明确的版本保留既有兼容性覆盖,不在调度迁移时静默改变最低支持版本。
资源构建先过滤 .github/res-build-matrix.json,再展开矩阵;only=sample-music 只启动
一个构建 runner,而非 64 个。工具链冒烟也按各编译器实际支持的消费者平台选择,
GCC 修改不会分配无关的 macOS LLVM baseline 任务。
索引、Pages 和资源镜像发布监听成功的 main CI push 运行,并检出该运行对应的精确
SHA,而非假设之后 main 指向的提交已被验证。索引发布范围还覆盖构建器和指针发布器。
定时及显式手动修复仍可使用。主/子索引指针写入与滚动备份串行执行;发布过程不会像
过期 PR 验证那样被取消。验证与发布保留不同权限边界。
未来应优先缓存具有明确内容身份的下载或构建产物。本次迁移不引入整个可变 xlings home 的缓存,以免绕过运行时绑定或安装回归检查。
维护
调度、门禁与机器人派发回归测试:
python3 -m pytest tests/test_ci_architecture.py tests/test_autoupdate_dispatch.py -q
修改 workflow 表达式前运行 actionlint。回归场景覆盖共享模块与依赖展开、删除和重命名、 元数据调度、平台选择、完整 PR 比较、计划内失败/跳过、资源矩阵过滤、编译器选择和 发布源码固定。既有静态、隔离、注册和各项集成检查继续作为可执行的验收标准。
原生 Actions 产物过期属于传输问题,不代表可以改变工具链输入。ARM64 复用流程仅能在 完成来源运行、提交历史和构建器校验后,从不可变 release 恢复既有准入摘要完全一致的 归档;glibc 来源账本、双镜像核对和新的原生验收仍会执行,并记录恢复传输的证据。 定时或手动索引、Pages 发布也会核对精确源码 SHA 对应的成功 main CI。