本文档解释了 Act 如何处理 GitHub Actions 作业定义和矩阵配置。它涵盖了 Act 代码库中的作业结构、矩阵扩展和执行流程。有关作业中所含步骤的信息,请参阅步骤系统。
作业是 GitHub Actions 工作流的核心,包含步骤、容器配置和策略定义。在 Act 中,作业由工作流模型中的Job结构体表示。
来源:pkg/model/workflow.go174-191 pkg/model/workflow.go554-566
作业有几个关键组成部分:
If表达式runs-on属性作业模型支持不同类型,通过Type()方法识别
来源:pkg/model/workflow.go500-552 pkg/model/workflow_test.go176-260
矩阵构建允许使用不同的配置多次运行作业。Act 处理矩阵以生成具有不同输入参数组合的作业变体。
矩阵在作业的strategy部分定义
来源:pkg/model/workflow.go380-479 pkg/model/workflow_test.go329-395
GetMatrixes()方法按照以下步骤处理矩阵扩展:
如果处理后矩阵为空,则返回一个空的矩阵条目,以确保作业至少运行一次。
策略部分支持两个关键设置来控制矩阵执行:
true时,如果任何矩阵作业失败,则取消所有正在进行的作业来源:pkg/model/workflow.go193-200 pkg/model/workflow.go214-241
Act 中的作业执行涉及使用每个矩阵组合运行作业。jobExecutor负责作业的设置、运行和清理。
来源:pkg/runner/job_executor.go22-155
作业执行器:
当作业具有矩阵时,需要特殊处理结果状态:
来源:pkg/runner/job_executor.go157-183
对于矩阵作业,Act 会保留矩阵组合之间的现有结果状态。这确保了如果任何矩阵作业失败,整个作业都会被标记为失败。
矩阵作业可以并行运行以提高执行速度。max-parallel设置控制此行为,Act 使用并行执行器实现它。
来源:pkg/common/executor.go94-132 pkg/common/executor_test.go77-114
并行执行系统:
max-parallel限制fail-fast为 true,则在发生错误时取消其他作业Act 为矩阵执行设置了合理的默认值:
fail-fast:如果未指定,默认值为truemax-parallel:如果未指定,默认值为4来源:pkg/model/workflow.go214-241 pkg/model/workflow.go466-476
在作业执行期间,矩阵值可在上下文中访问,并可在表达式和命令中引用
来源:pkg/runner/job_executor.go28-34
矩阵值:
matrix.<key>添加到作业的上下文中${{ matrix.node-version }}以下是矩阵如何在工作流文件中定义以及 Act 如何处理它们的示例:
这将在 Act 中生成 5 个作业变体:
这些将根据max-parallel设置以最多 2 个并行运行。