我最近开始为我的代码实现自动测试,我注意到 CI 没有捕获编译器的警告 - 即使有警告,测试也显示为成功。我最初为编译器添加了一个标志,将警告转换为错误 和allow_failure=True,但问题是编译器在第一个警告->错误时停止,并且不会完成整个编译。然后,我使用此处解释的技巧将警告写入文件中,然后测试该文件是否不为零:
- make 2> >(tee make.warnings)
- test ! -s make.warnings
Run Code Online (Sandbox Code Playgroud)
整个编译完成后,如果有警告写入文件,这将给出错误 - 并且使用allow_failure=True,这适用于我没有错误/警告的情况,但也适用于我有警告的情况。但是,如果我有真正的错误,这也会在 CI 中显示为警告,并且不会因为allow_failure=True.
我找不到一种方法来allow_failure=True依赖脚本中运行的内容(无需创建新阶段)或使用某些条件(即文件是否为空)。有没有一种简单的方法可以做到我所缺少的?