本文档解释了 Act 如何处理 GitHub Actions,包括不同的 Actions 类型(JavaScript、Docker 和复合型),它们的执行流程,以及 Act 如何与 GitHub Actions 生态系统保持兼容性。有关 Step 执行的通用信息,请参阅 Steps System。
Act 支持 GitHub Actions 定义的三种 Actions 类型:
每种 Actions 类型都有不同的处理方式,但都遵循代码库中定义的通用模型。
来源:pkg/model/action.go68-80 pkg/model/action.go51-66 pkg/model/action.go38-49 pkg/model/action.go95-99 pkg/model/action.go102-105
Act 在执行 Actions 之前需要定位并加载 Actions 元数据。该系统支持多种 Actions 定义格式。
来源:pkg/runner/action.go43-117 pkg/model/action.go107-124
Act 从以下来源读取 Actions 元数据:
action.yml - 主要元数据文件action.yaml - 备用元数据文件Dockerfile - 适用于没有元数据的 Docker Actionsargs 时创建合成 ActionsAct 同时支持来自 GitHub 仓库的远程 Actions 和来自工作区的本地 Actions。
来源:pkg/runner/step_action_remote.go22-251 pkg/runner/step_action_local.go18-134 pkg/runner/step_action_remote.go40-145
Actions 执行系统有一个主要执行器,负责处理不同的 Actions 类型。
来源:pkg/runner/action.go153-210 pkg/runner/action.go246-354 pkg/runner/action_composite.go84-124
Actions 可以有在 Actions 生命周期不同阶段执行的预处理、主执行和后处理步骤。
来源:pkg/runner/action.go486-497 pkg/runner/action.go499-510 pkg/runner/action.go512-580 pkg/runner/action.go582-605 pkg/runner/action.go607-618 pkg/runner/action.go620-685
对于基于 Node.js 的 Actions,Act 会:
来源:pkg/runner/action.go178-188 pkg/runner/action.go444-453
对于基于 Docker 的 Actions,Act 会:
来源:pkg/runner/action.go246-354 pkg/runner/action.go385-432
对于复合型 Actions,Act 会:
来源: pkg/runner/action_composite.go13-45 pkg/runner/action_composite.go47-82 pkg/runner/action_composite.go84-124 pkg/runner/action_composite.go126-236
Act 会仔细设置 Action 的运行环境,以确保其行为与 GitHub 的 Runner 兼容。
来源: pkg/runner/action.go212-224 pkg/runner/action.go434-453 pkg/runner/action_composite.go13-45
环境包括
INPUT_ 为前缀)RUNNER_TOOL_CACHE)远程 Action 需要额外的处理来获取和准备 Action
来源: pkg/runner/step_action_remote.go40-145 pkg/runner/step_action_remote.go253-290 pkg/runner/step_action_remote.go292-304
Act 支持 GitHub Enterprise,允许通过配置选项将 Actions 替换为 github.com 版本。
ReplaceGheActionWithGithubCom - 要替换的 Action 列表ReplaceGheActionTokenWithGithubCom - 用于身份验证的 Token来源: pkg/runner/action.go178-188
来源: pkg/runner/action.go246-354
来源: pkg/runner/action_composite.go84-124 pkg/runner/action_composite.go126-194
Act 的 Action 执行系统是一个复杂的组件,与 GitHub 对 Actions 的实现平行。通过支持相同的 Action 类型(JavaScript、Docker 和复合)并提供兼容的执行环境,Act 使得本地工作流测试能够非常接近 GitHub 托管 Runner 的行为。
通过精心设计的 Action 发现、准备和执行架构,以及预/主/后生命周期处理,Act 确保 Actions 在本地或 GitHub 上运行的行为一致。
来源: pkg/runner/action.go pkg/model/action.go pkg/runner/action_composite.go pkg/runner/step_action_remote.go pkg/runner/step_action_local.go