… 或者:GTK 开发人员如何检查他们在工具包上的工作.
自从 GNOME 集体迁移到 GitLab 以来,GTK 充分利用了该平台提供的功能,尤其是在其持续集成管道方面。
在过去,检查我们对工具包的更改是否正确的唯一方法是等待持续构建机器人通知我们主开发分支上的任何中断。虽然这比什么都没有好,但它不允许我们在任何事情的开发阶段(从功能到错误修复,从文档改进到添加新测试)期间阻止中断。
现在,GitLab 中提供的 CI 管道在每个分支和合并请求上运行,远早于更改到达其他所有人使用的公共开发分支。
主题分支和合并请求
当针对 GTK 4 主开发分支开发主题分支时,我们运行一个 CI 管道,该管道首先对分支中应用的更改进行简单的代码样式检查。样式检查使用 clang-format,它通常足以满足 GTK 编码风格;编码风格有一些“特殊”注意事项,clang-format 可能会产生误报和漏报。因此,允许样式检查失败,但强烈建议贡献者和审查者在失败时检查日志。
通过样式检查后,我们运行构建阶段,目前包含三个单独的作业
- 使用 Fedora 容器的 Linux 调试构建
- Windows 上的 MSYS2 构建
- Linux 发布构建
Linux 调试构建非常标准。
MSYS2 构建可以捕获 Windows 上 GNU 工具链的任何问题。
发布构建是必要的,以确保我们不依赖于我们在开发过程中使用的调试代码的副作用。
所有这些作业都会运行 GTK 测试套件。
我们同时以 JUnit 文件(利用 GitLab 的支持)和 HTML 报告(存储为管道工件)的形式发布测试报告。这使我们更容易检查哪些失败了,哪些成功了。
理想情况下,我们希望添加更多环境
- 基于其他主流发行版的 Linux 构建
- 使用 MSVC 工具链的 Windows 构建
- 一旦 GDK 后端修复,就进行 macOS 构建
构建和测试作业通过后,我们进入分析阶段。我们在 GTK 的代码库上运行 Clang 静态分析工具 并生成报告。在不久的将来,我们还可以运行像 UBSan 和 ASan 这样的消毒工具;用于我们的解析器(如 GtkBuilder 和 CSS)的模糊测试工具;或者验证我们的 UI 定义是否包含适当的可访问性描述符的工具。
与测试一样,我们将分析报告作为 GitLab 工件发布以供审查。
通过分析阶段后,我们构建 API 参考,并检查结果,以便正确记录新添加的符号。
最后,我们有手动 CI 作业来构建 GTK 演示应用程序、widget 工厂和图标浏览器的 Flatpak 包。这使设计师可以立即测试 Adwaita 中的更改或新添加的 widget,而无需在他们的系统上从头开始构建 GTK。
主线开发分支
一旦主题分支/合并请求的 CI 管道通过,我们就可以将更改合并到主开发分支中,并有一定的信心,即代码是正确的并且符合我们的预期。
主开发分支运行与先前描述的相同的管道,只是 Flatpak 作业不再是手动的了,因此始终可以在本地测试 GTK 的当前前沿版本。此外,文档在在线发布,因此始终是最新的。
GTK 3 怎么样?
在 GTK 3 分支中,我们有一个更简单的管道,它运行以下作业
- 在 Linux 和 Windows/MSYS2 上,对静态和共享库工件进行完整的 Meson 调试构建,在 Fedora 和 Debian 的当前稳定版本上
- 在 Linux 上进行完整的 Meson 发布构建,该构建还会生成 API 参考
- 在 Linux 和 Windows/MSYS2 上进行 Autotools 构建
- 在 Linux 上进行可选的 Autotools distcheck 构建
只要 GTK 3 支持 Autotools,Autotools 作业就会存在。理想情况下,我们希望利用 Meson 构建为 macOS 和 Windows/MSVC 添加其他作业。
一旦 GTK 4 CI 管道达到一定的功能和稳定性水平,我们将把它反向移植到 GTK 3,这样我们就可以更加确信当前稳定分支不会退步。
有关更多信息,您可以查看 GTK 存储库
.gitlab-ci.yml
用于主开发分支- 包含各种辅助脚本的
.gitlab-ci
目录。