Github-Action-Day14:带有矩阵的条件表达式

这是我的 Github Action Advent Calendar 的第十四天的内容,如果您想要了解更多已经发布的 tips 信息,查看此处的 索引

Github Action 拥有许多本身就很强大的组件,而当你将他们组合在一起使用时,事情才变得真正地强大起来。例如:矩阵工作流使你可以轻松地扩展一个简单的工作流为多个不同的 job 。而条件式的执行允许你限制一个 jobstep 的执行。

这两个特性完美地自然结合在一起 — 当您构建一个多个操作系统,平台,或是语言版本的矩阵时,您可能仅仅需要在这个矩阵的一个子集中运行一些 step。例如:当你在Linux 系统上运行时,你可能需要安装一个不同的编译器,或者在不同的操作系统上安装略有不同的依赖项。

Translate Note:

简而言之,就是通过矩阵将一个 job 扩展为多个 job,但是同时使用条件式根据不同的 job 运行环境(系统环境) 控制 job 中的某些 step 的运行。

详细的请看下面的例子就清楚了。

我可以组合之前的一些概念来为我的一个项目构建工作流,一个 C 语言的系统库。这个库将使用 跨平台工具安装矩阵工作流 来为我的 CI 执行构建以及测试的步骤。

这个工作流的目的是为了安装 Ninja 构建系统,然后使用 CMake 创建构建脚本,以利用这一点 — CMake 和 Ninja的协同工作,生成快速,跨平台的本地构建。最后,我们会使用 cmake 运行这个构建,使用 ctest 运行我们的测试。

Translate Note:

因为我们的工作流并不运行在原作的仓库中,cmake 命令的部分要求不满足,为了避免异常,和仓库有交互的代码我已经注释了。

剩余的代码足够帮我们理解 矩阵工作流 和 条件表达式 如何结合使用的了。

当这个工作流运行时,这个条件可以确保只有合适的 “Install Dependencies” 步骤才可以运行在特定的平台上。针对其他平台的运行步骤都会被取消。

image-20210825212008591

现在,我们开始看看我们如何将 Github Action 的简单内容结合为更复杂,更强大的工作流吧。