使Linux上的Swift测试保持同步
如果您的Swift项目在Linux上使用swift test
,则您知道需要运行swift test --generate-linuxmain
才能免费获得在Apple平台上获得的东西,即。 让XCTest
知道它运行哪个测试。 该命令会生成几个仅在Linux上使用的文件,如果要在CI中的Linux上测试产品,则必须将这些文件提交到存储库中。
毫无疑问,Swift的早期生活中有一个痛点,但现在仅仅是多余的样板。 差不多了,由于每次添加新测试时都必须重新运行该命令,因此很容易忘记,然后就无法在Linux上正确地进行测试。
因此,让我们添加一个CI挂钩即可。 使用Travis的构建阶段,很容易添加一个所有测试都依赖的阶段:
#使用这些默认值,除非我们在各个作业中覆盖它们
操作系统:osx
语言:迅捷
osx_image:xcode10.1
工作:
包括:
-阶段:预测试
名称:检查Linux测试是否已同步
安装:快速测试--generate-linuxmain
脚本:git diff-退出代码
-阶段:测试
名称:macOS / Swift 4.2.1
脚本:快速测试--parallel
-信封:SWIFT_VERSION = 4.2.1
操作系统:Linux
名称:Linux / Swift 4.2.1
语言:通用
安装:
评估“ $(curl -sL https://swiftenv.fuller.li/install.sh)”
脚本:快速测试--parallel
预测试很简单,我们运行swift test --generate-linuxmain
,然后询问git
是否存在差异。 如果存在任何差异,那么我们(或贡献者) swift test --generate-linuxmain
在提交之前忘记运行swift test --generate-linuxmain
。
自动化运行swift test --generate-linuxmain
并提交这些更改是很巧妙的,也许GitHub Actions(在最终版本时)可以使我们到达那里,但是在那之前,让我们的CI提交它正在测试的仓库是一个很不错的选择。好主意(无限CI周期不是我想要的未来)。 因此,添加支票是我们所能获得的最好的选择。
我们正在使用Kyle Fuller出色的Swift版本管理器在Linux上安装特定版本的Swift。 Travis提供的图像没有通过APT提供的Swift。
这为我们提供了一个类似于以下内容的矩阵:
如果预测试失败,则测试不会运行,并且拉取请求将被阻止。
嘿!
我是Max Howell,我想专职从事开放源码的写作,写作和全部工作。 我从事开源工作已有15年了,您可能已经使用过其中的一部分(有人自制吗?)。 我需要您的帮助才能继续,任何贡献都值得欢迎。 非常感谢。
https://patreon.com/mxcl