Skip to content

[Feature] 建立 RT-Thread 版本管理 CI 与发布流程 #11956

Open

Description

@kurisaW

建立 RT-Thread 版本管理 CI 与发布流程(分阶段实施)

状态: 计划中,未实现
里程碑: 待 B01 盘点后排期

背景

当前版本发布和测试证据主要依赖人工整理,基线容易漂移,Z/Y 版本的发布边界也不够清晰。本 Issue 用于把版本策略落到可运行的 CI、报告和发布任务上:Z 每月生成报告和发布提议,由人工决定是否发布;Y 每 3~6 个月结合硬件验证评审发布。优先推荐开发者使用 X/Y 基线。

本 Issue 只跟踪建设任务,不代表相关能力已实现。文件名为建议,优先复用现有 GitHub Actions、QEMU BSP 和测试框架,不另起多套系统。

目标

  • 盘清现有 CI、构建、QEMU、测试框架和硬件验证能力,明确复用/补齐/新增。
  • 建立公共配置:测试矩阵、发布策略、已知问题、结果格式。
  • 打通 Z 线:基线准备 → 构建 → QEMU 内核/组件测试 → 汇总 → 月报 → 发布提议 → 人工批准发布。
  • 打通 Y 线:固定基线固件 → 硬件测试清单 → 人工上传结果 → CI 校验 → 报告草稿 → 人工审核发布。

非目标

  • 首期不承诺全平台覆盖,不建设自动硬件实验室,不承诺固定完成期限。
  • 未确认 ci/release-policy.yml 前,不启用自动发布。
  • QEMU 仿真结论不扩大为实机结论;SPI/I2C、DMA、引脚、时序等未覆盖项交给硬件验证。
  • AI 只辅助生成提交摘要或报告草稿,不参与统计计算,也不决定是否发布。

前置条件

  • B01 完成现有能力盘点后,再确定责任人、工作量和排期。
  • 首轮只选择一个确认可运行的 QEMU BSP,跑通全链路后再扩矩阵。
  • 确认 Discussion 分类、通知名单、受保护发布环境和维护者审批机制。

任务清单

公共配置 B01~B05

  • B01 盘点现有能力。 列出现有 CI、构建命令、QEMU 启动命令、测试框架、硬件和维护人,交付“复用/补齐/新增”清单。
  • B02 建立 ci/test-matrix.yml。 登记 BSP、架构、配置、工具链/QEMU 版本、构建与启动命令、用例 ID、超时、责任人和是否必测。首轮只选一个可运行 QEMU BSP。
  • B03 建立 ci/release-policy.yml。 明确 Z 是主线收敛快照还是补丁线,登记来源分支、上次发布标签选择规则、版本递增规则、维护者名单。未确认前不启用自动发布。
  • B04 建立 ci/known-issues.yml。 记录 Issue、受影响平台/用例、影响、负责人、复查日期和是否阻断。不允许用宽泛规则忽略所有失败。
  • B05 定义结果格式。 统一 JSON/JUnit,至少包含 SHA、配置、用例 ID、状态、耗时、固件校验值和日志链接。缺字段、重复用例、缺失结果不得按通过处理。

Z 线 C01~C08

  • C01 基线准备。 编写 ci/prepare_release.py,接收 base_tag、candidate_sha、版本号,校验提交存在、基线关系和版本号未占用;每月生成 manifest.json,下游统一从 manifest 读取 SHA。无新增提交时生成“无变更”提议,由人工决定跳过。
  • C02 固件构建。 复用现有构建方式,按矩阵固定工具链、配置和依赖版本;输出 ELF/固件、实际配置、构建日志、依赖清单和 SHA256。构建失败仍上传日志,对应测试标记“未执行:构建失败”,不得从计划分母删除。
  • C03 QEMU 内核运行。 编写 ci/run_qemu.py,加载固件、捕获串口,设置启动/单用例/整轮超时并清理进程;复用现有测试框架,解析用例开始/结束标记,不能只看退出码。首批覆盖启动、线程调度、信号量、互斥量、事件、消息队列、定时器、内存分配释放。区分断言失败、崩溃、超时和基础设施异常。
  • C04 组件/驱动运行。 根据现有设备模型选首批用例:文件创建/读写/删除、虚拟块设备 I/O、虚拟网卡收发或回环、串口、系统时钟。每组用例提供独立配置、输入数据、预期结果和清理步骤;网络对端由 CI 控制。登记 QEMU 设备模型和未覆盖项。
  • C05 结果汇总与门禁。 编写 ci/collect_results.py,上游成功/失败都执行;核对计划与结果分片,缺失项标记未运行。输出通过、失败、超时、跳过、未运行数量,按平台/模块展示。执行覆盖率 = 有运行结论用例数 / 计划用例数;通过率 = 通过数 /(通过+失败+超时)。代码覆盖率仅在工具支持时单独采集。对照已知问题表,新增失败要求维护者定级;必测缺失、启动失败、数据损坏、严重死锁等列为阻断。
  • C06 月报与提交功能说明。 编写 ci/generate_release_report.py,生成 Markdown、汇总 JSON 和证据索引;对比上次基线与本次完整 SHA,关联 PR,按内核、组件、驱动、BSP、修复/优化分类,缺标签提交不得遗漏。报告包含版本建议、提交范围、功能说明、指标、已知/新增问题、未测范围和阻断结论。AI 不可用时仍输出基础报告。
  • C07 自动发布提议。 建立 Discussion 模板,填写报告、候选 SHA、建议编号、提交摘要、指标、风险和三个决策选项;配置分类和通知名单,按周期与发布类型查重,同周期更新原提议并保留基线变化记录。先实现 dry-run 本地 Markdown,确认模板后再启用远端创建和通知。提议写权限与 PR 测试任务隔离。
  • C08 人工批准后发布。 建立手动发布入口,输入提议链接、获批 SHA、manifest 和版本号;使用受保护环境或等效维护者审批,不把普通评论视为授权。核对批准记录、门禁、版本宏、SHA 和产物校验值;版本宏需更改时先提交再测试新基线。创建 Tag、Release,附报告、变更说明和校验值;Z 标为收敛追溯节点,不进入默认推荐入口。重试时校验已有标签 SHA,只补齐缺失步骤。发布报告和产物永久关联版本。

Y 线 C09

  • C09 硬件验证。 形成 3~6 个月目标对应的板卡/驱动矩阵,列出板卡、外设、接线、工具、测试人和预计工时,优先本版本变更与保障平台。复用 C01/C02 输出固定基线固件,生成测试清单:用例 ID、烧录/操作步骤、预期结果和上传入口。建立结构化结果模板,测试人通过 PR 或指定入口上传结果和日志,CI 校验 SHA、板卡、用例及附件。复用 C05 汇总人工结果,硬件与 QEMU 分栏,漏测不默认通过。编写报告提示词/SKILL,AI 仅生成草稿,统计由脚本计算。测试负责人审核报告,核心维护者决定发布,复用 C08 执行发布并标识推荐基线。

分批实施

批次 工作 完成标准
1:自动跑起来 B01~B05、C01~C03 一个 QEMU BSP 全链路通过;编译失败、死循环和崩溃可检测
2:自动生成证据 C04~C06 首批组件/驱动可运行;月报包含提交说明、指标、已知问题和证据
3:连接发布流程 C07~C08 提议 dry-run、人工批准、正式标签与归档、失败重试演练完成
并行:硬件验证 C09 一块真实板卡跑通“领取固件 → 测试 → 上传 → CI 校验 → AI 草稿 → 人工审核”

验收标准 / Definition of Done

  • 流水线运行期间主线更新不改变本轮基线;错误标签或重复版本在构建前被拒绝。
  • 干净 runner 可构建;注入编译错误后构建失败且日志可下载。
  • 正常 QEMU 用例逐项输出结果;注入断言失败、死循环、启动失败后均能准确失败、保存日志并退出。
  • 每个纳入组件有可运行用例;数据错误和网络超时能被识别,未覆盖设备显示在报告中。
  • 删除结果文件会出现漏测;已知失败不从统计删除;未定级新增失败及阻断项不能自动放行。
  • 提交列表与 Git 范围一致,每条结论链接证据;即使构建失败也能输出失败报告。
  • 重复运行发布提议不重复建帖,提议 SHA 与报告相同;创建提议不会触发正式发布。
  • 未审批、SHA 不同、阻断未清、版本宏不匹配均被拒绝;中断重跑不会生成重复版本或改变标签。
  • C09 用一块真实板卡跑通全流程;错误 SHA 和缺失用例可被发现。
  • 月度定时启用前完整影子运行一轮:生成报告与提议草稿,不实际发布,验证失败检测、漏测处理、审批和中断恢复。

实施约束

  • 每项指定 CI/模块/BSP/发布责任人,估算工作量后排期;不先承诺全平台覆盖或固定建设期限。
  • PR 仅执行相关快速任务;取消过期运行,复用构建产物,避免多个工作流重复构建。
  • 记录 runner 耗时、算力开销和人工维护工时,再扩展矩阵。
  • C02~C05 做成可复用任务;C01、C06、C07 可由一个月度工作流串联;C08 单独隔离发布权限。

Activity

  1. github-actions commented on Oct 30, 2026

    @github-actions

    如需认领并处理此 Issue,请评论 /claim。

    To claim and work on this issue, comment /claim.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions