本文档介绍了 act 系统,一个旨在本地运行 GitHub Actions 工作流的工具。它概述了核心架构、关键组件和执行流程,作为深入了解特定子系统的详细文档的入口。
有关使用该工具的实用指南,请参阅入门。有关特定组件实现的详细信息,请参阅核心组件部分。
Act(“全球思考,本地行动”)是一个允许开发者在其本地机器上运行 GitHub Actions 工作流的工具。它解决了两个主要用例:
makeAct 从 .github/workflows/ 目录读取工作流文件,确定需要运行哪些操作,通过 Docker 处理容器镜像管理,并在一个与 GitHub Actions 运行时环境高度相似的环境中执行工作流步骤。
来源:README.md1-27 cmd/root.go46-65
Act 遵循模块化架构,围绕几个关键组件组织,这些组件协同工作以解析、规划和执行 GitHub Actions 工作流。该系统设计灵活,支持各种执行环境和工作流配置。
来源:pkg/runner/runner.go16-20 pkg/runner/runner.go70-255 cmd/root.go57-65
Act 系统由以下主要组件组成:
| 组件 | 描述 | 主要文件 |
|---|---|---|
| 命令行接口 | 处理命令行参数、配置文件和用户交互 | cmd/root.go |
| 运行器系统 | 编排工作流执行,创建执行计划 | pkg/runner/runner.go |
| 工作流规划器 | 解析工作流文件并创建执行计划 | pkg/model/planner.go |
| 运行上下文 | 提供工作流和作业的执行上下文 | pkg/runner/run_context.go |
| 作业执行器 | 管理工作流作业的执行 | pkg/runner/job_executor.go |
| 步骤执行器 | 处理单个步骤的执行 | pkg/runner/step.go |
| 表达式评估器 | 实现 GitHub Actions 表达式语法 | pkg/runner/expression.go |
| 容器系统 | 管理用于作业执行的 Docker 容器 | pkg/container/*.go |
| 产物管理 | 处理工作流制品(artifacts) | pkg/artifacts/server.go |
| 缓存管理 | 实现操作缓存 | pkg/runner/action_cache.go |
来源:cmd/root.go28-35 pkg/runner/runner.go16-255
Act 遵循结构化流程来执行 GitHub Actions 工作流:
来源:cmd/root.go386-704 pkg/runner/runner.go107-221
CLI 处理:Act 首先处理命令行参数,从 .actrc 文件读取配置,并设置执行环境。
计划创建:工作流规划器解析 GitHub Actions 工作流文件,并根据触发事件或指定作业创建执行计划。
运行器设置:运行器配置执行上下文,包括环境变量、密钥和事件数据。
作业执行:作业根据其依赖关系执行,可能并行执行,每个作业都在自己的容器中运行。
步骤执行:在每个作业中,步骤按顺序执行,并对不同类型的步骤(运行命令、Docker 操作、JavaScript 操作等)进行特殊处理。
来源:cmd/root.go386-458 pkg/runner/runner.go107-140
Act 使用 Docker 为运行工作流创建隔离环境。容器系统是 Act 复制 GitHub Actions 运行时环境的关键组件。
容器系统提供:
来源:cmd/root.go404-411 pkg/runner/runner.go43-51
Act 与多个外部系统集成,以提供完整的工作流执行环境:
这些集成使得 Act 能够提供一个与 GitHub Actions 云环境高度相似的本地体验。
来源:cmd/root.go667-681 README.md17-18
Act 提供了一个强大的系统,用于在本地运行 GitHub Actions 工作流,为开发者提供更快的反馈周期,并使 GitHub Actions 能够用作本地任务运行器。其模块化架构支持各种工作流配置和执行环境。
有关特定组件的更多详细信息,请参阅本维基中的相关部分: