使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