菜单

概述

相关源文件

本文档介绍了 act 系统,一个旨在本地运行 GitHub Actions 工作流的工具。它概述了核心架构、关键组件和执行流程,作为深入了解特定子系统的详细文档的入口。

有关使用该工具的实用指南,请参阅入门。有关特定组件实现的详细信息,请参阅核心组件部分。

什么是 Act?

Act(“全球思考,本地行动”)是一个允许开发者在其本地机器上运行 GitHub Actions 工作流的工具。它解决了两个主要用例:

  1. 快速反馈 - 在本地测试工作流和操作的更改,无需提交和推送到 GitHub
  2. 本地任务运行器 - 将 GitHub Actions 用作本地任务自动化工具,类似于 make

Act 从 .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

执行流程详情

  1. CLI 处理:Act 首先处理命令行参数,从 .actrc 文件读取配置,并设置执行环境。

  2. 计划创建:工作流规划器解析 GitHub Actions 工作流文件,并根据触发事件或指定作业创建执行计划。

  3. 运行器设置:运行器配置执行上下文,包括环境变量、密钥和事件数据。

  4. 作业执行:作业根据其依赖关系执行,可能并行执行,每个作业都在自己的容器中运行。

  5. 步骤执行:在每个作业中,步骤按顺序执行,并对不同类型的步骤(运行命令、Docker 操作、JavaScript 操作等)进行特殊处理。

来源:cmd/root.go386-458 pkg/runner/runner.go107-140

容器系统

Act 使用 Docker 为运行工作流创建隔离环境。容器系统是 Act 复制 GitHub Actions 运行时环境的关键组件。

容器系统提供:

  • 作业执行隔离
  • 模拟 GitHub Actions 运行器的环境设置
  • 工作区文件的卷映射
  • 服务容器的网络配置
  • 针对不同执行平台的自定义配置

来源:cmd/root.go404-411 pkg/runner/runner.go43-51

与外部系统集成

Act 与多个外部系统集成,以提供完整的工作流执行环境:

  1. Docker 引擎:用于容器管理和隔离
  2. Git:用于仓库信息和检出操作
  3. GitHub API:用于令牌验证和可选交互
  4. 产物服务器:用于处理工作流产物
  5. 缓存服务器:用于操作和依赖项缓存

这些集成使得 Act 能够提供一个与 GitHub Actions 云环境高度相似的本地体验。

来源:cmd/root.go667-681 README.md17-18

结论

Act 提供了一个强大的系统,用于在本地运行 GitHub Actions 工作流,为开发者提供更快的反馈周期,并使 GitHub Actions 能够用作本地任务运行器。其模块化架构支持各种工作流配置和执行环境。

有关特定组件的更多详细信息,请参阅本维基中的相关部分: