本页解释了 act 如何处理和执行不同类型的 GitHub Actions。它涵盖了操作解析过程、Docker、Node.js 和复合操作的执行流程,以及提高性能的缓存机制。
有关操作执行所涉及的整体步骤执行过程的信息,请参阅步骤执行。
Act 支持三种标准 GitHub Action 类型(Docker、Node.js 和复合操作),并根据它们的位置以不同方式解析它们
来源
所有操作都遵循三阶段执行过程:预执行、主执行和后执行。每个阶段都根据操作中定义的表达式进行条件判断。
来源
Docker 操作在从 Dockerfile 构建或从注册表拉取的容器中运行。
Docker 执行过程
来源
Node.js 操作使用指定的 Node.js 运行时(12、16 或 20)执行 JavaScript 代码。
Node.js 执行过程
来源
复合操作按操作中定义的步骤序列运行。
复合操作执行过程
来源
Act 为远程操作实现了复杂的缓存系统,以提高性能并支持离线执行。
缓存系统
ActionCache 接口定义了操作缓存的契约GoGitActionCache 为远程操作实现了基于 Git 的缓存GoGitActionCacheOfflineMode 扩展了缓存以支持离线使用LocalRepositoryCache 允许使用本地操作覆盖远程操作来源
远程操作从 GitHub 获取(或从缓存中获取),然后根据其类型执行。
远程操作处理器
actions/checkout@v3)actions/checkout 操作来源
操作通过遵循 GitHub 约定的环境变量接收输入。
| 进程 | 描述 |
|---|---|
| 输入变量 | 在环境中转换为 INPUT_NAME 格式 |
| 默认值 | 当步骤定义中未提供输入时使用 |
| 表达式插值 | 对 ${{ github.token }} 等表达式的值进行处理 |
| 步骤输出 | 捕获并提供给后续步骤 |
| 状态持久性 | 在预执行/主执行/后执行阶段之间保存的状态变量 |
环境设置过程
INPUT_ 前缀来源
以下模式在所有操作类型中普遍使用
操作可以定义在主执行之前和之后运行的预执行和后执行步骤
# Node.js action
runs:
using: node16
pre: setup.js # Runs before main
main: index.js # Main execution
post: cleanup.js # Runs after main, even if main fails
pre-if: always() # Condition for pre step
post-if: always() # Condition for post step
# Docker action
runs:
using: docker
image: Dockerfile
pre-entrypoint: /setup.sh
entrypoint: /entrypoint.sh
post-entrypoint: /cleanup.sh
系统根据条件(pre-if/post-if)和步骤结果决定是否运行这些步骤。
来源
系统处理多种特殊情况
来源
至此,我们完成了 Act 操作执行系统的概述。