问题
目前,RT-Thread仓库中的CI(持续集成)系统对BSP(板级支持包)的检查主要限于基本的GPIO和UART编译配置。这种限制可能导致其他一些.c文件未被检测到,从而可能会导致系统更新的时候出现编译不过的情况。通过添加BSP的YML文件,我们可以让CI系统编译更多配置,确保更全面的代码编译覆盖率。
引入yml有以下几点优势:
可读性和易用性:YML文件采用一种简洁明了的格式,非常接近人类语言,便于阅读和理解,即使是非技术人员也能很容易地进行编辑。
集中管理:使用YML文件可以将所有配置选项集中在一个地方,便于统一管理和修改,减少了分散管理带来的复杂性和可能的错误。
版本控制友好:YML文件是文本文件,可以轻松集成到Git等版本控制系统中。这允许跟踪配置变化历史,并在需要时回滚到之前的版本。
扩展性强:YML文件结构化良好,支持嵌套配置,适合用于描述复杂的配置场景,并且易于扩展以满足新的需求。
自动化集成:YML配置文件可以方便地与CI/CD工具集成,实现自动化构建、测试和部署流程,确保各环境下的一致性。
以下是yml文件的主要内容如下所示。
简介
我们的RT-Thread仓库中,BSP的CI检测已经涵盖了大部分BSP,所有检测配置都集中在.github/workflow/bsp_buildings.yml文件中。当新的BSP提交时,只需在此YML文件中添加相关配置即可。这一过程已经在300多个BSP中得到了应用,每次Pull Request(PR)都会触发相应的检测。
以下是bsp_buildings.yml中的部分内容
之前论坛有文章介绍了如何使用attach文件来扩大CI检测范围,当前的目标基本一致,即希望CI能检测更多配置,从而编译更多的.c文件。此外,用户还可以上传自己的常用配置以便复用。RT-Thread论坛上搜索”attach”关键字大家可以查看文章。
attach: 大致上可以理解为不同的config配置,提供给CI,让CI来进行编译检查。
yml文件
我们引入了一个包含所有配置的YML文件,方便统一管理和修改。这种方式与attach文件功能相同,采用YML文件更易管理和编辑,也可以采用之前attach文件方式,目前是兼容的。
参考yml文件
https://github.com/RT-Thread/rt-thread/blob/master/bsp/nrf5x/nrf5340/.ci/attachconfig/ci.attachconfig.yml
如何添加yml文件
第一步添加ci.attachconfig.yml
在你常用的bsp下面添加文件.ci/attachconfig/ci.attachconfig.yml
比如bsp/nrf5x/nrf5340/.ci/attachconfig/csi.attachconfig.yml
参考链接
https://github.com/RT-Thread/rt-thread/blob/master/bsp/nrf5x/nrf52840/.ci/attachconfig/ci.attachconfig.yml
注意这里的文件夹结构和文件名不要改变。
第二步,添加对应的CONFIG
在YML文件中填写需要启用的menuconfig选项。例如,为测试segger_rtt,可参考以下配置:
添加如下配置
这里的配置就是差异的配置,你可以在menuconfig之后,查看.config 的差异,找到这些修改之后的配置。这里注意只需要填写主要的menuconfig的那个主配置,比如这里选中软件包CONFIG_PKG_USING_SEGGER_RTT 其他默认配置不需要添加,只添加修改的配置即可。
如果想要disable某个配置也是添加CONFIG_RT_USING_SERIAL_V2=n即可。
第三步,提PR验证
通常提交PR之后,会有一个对所有BSP的检测
https://github.com/RT-Thread/rt-thread/actions/workflows/bsp_buildings.yml
这里是所有bsp的检测
找到你的BSP查看修改是否生效
这里可以看到编译是否通过,如果不通过,需要修改对应的.c文件
额外功能
添加scons 参数
另外如果需要加--strict 强制编译的话。
直接添加一个参数scons_arg:
例如:
添加依赖
如果想要复用之前的config,可以参考下图,添加depends 节点
添加引用
如果想复用之前的scons_arg: 参数也可以参考下面写法:
这个主体功能在https://github.com/RT-Thread/rt-thread/blob/master/tools/ci/bsp_buildings.py 中实现。
总结
通过引入YML配置文件,可以有效保存和管理常用的menuconfig配置。这种方法有助于在CI中维护稳定的配置环境,使得常用的配置不会在编译过程中出现问题。建议在添加YML文件时遵循以下规则:
采用单独的yml文件放所有的配置,
每个配置名称尽量不同,如果相同请用--- 号隔开,可以参考yml语法
尽量在kconfig中写出所有修改的配置,保证config配置能够尽可能方便验证。
#表示注释
参考引用
官方文档:https://yaml.org/spec/1.2.2/
yml转jason:https://nodeca.github.io/js-yaml/
yml语法教程:https://mp.weixin.qq.com/s/S6l5KHyufsV0FGDgm-ZW9g
想要在RT-Thread平台或社区投放内容?或想参与相关直播活动及赛事?RT-Thread已开放对接窗口,请通过邮件与我们取得联系,期待合作!