This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
EAS Workflows 中的自定义函数
编辑页面
了解如何使用自定义函数定义可重复使用的步骤序列
自定义函数为自定义作业和钩子定义可复用的步骤序列。你可以像调用内置函数一样,使用相对路径通过 uses 调用它们。每个自定义函数都在 function.yml 或 function.yaml 文件的 runs.steps 下定义其步骤。这些步骤使用与自定义作业步骤相同的格式。
有关 function.yml schema,请参阅语法参考中的自定义函数。
工作原理
为自定义函数创建一个目录,并在其中放置 function.yml 文件。EAS Workflows 也接受 function.yaml。EAS Workflows 会将你传递给 uses 的路径解析为相对于 EAS 项目目录的路径:
my-app.easworkflowspublish-preview-update.ymlfunctionssetupfunction.ymleas.json上例中的 .eas/functions/<name> 路径只是其中一种选择。uses 值必须以 ./ 或 ../ 开头,并指向包含 function.yml 或 function.yaml 文件的目录。以 ../ 开头的路径可以指向 EAS 项目目录之外,但自定义函数必须仍位于仓库内。
自定义函数内某个步骤上的相对 working_directory 从作业的默认工作目录解析,而不是从包含 function.yml 的目录解析。
你可以在以下位置使用自定义函数:
- 自定义作业
steps - 构建作业
steps - 作业
hooks和defaults.hooks
输入、输出和作用域
在调用位置使用 with: 传递输入。在函数内部,使用 ${{ inputs.<name> }} 读取输入。
在 function.yml 中使用 outputs 定义函数输出。EAS Workflows 会将每个输出公开为字符串。使用 ${{ steps.<call_id>.outputs.<name> }} 读取输出。使用调用步骤中的 id。调用方无法引用函数内部的步骤标识符。
表达式使用以下作用域:
- 在函数内部,
steps.*引用会解析为函数自身的步骤。 - EAS Workflows 会在调用方的作用域中计算调用步骤的
with、env和if值。 - 函数中的每个步骤都会继承调用步骤的
env值。在嵌套调用中,同名的内部值会覆盖外部值。 - EAS Workflows 会在函数的作用域中计算函数内的输入默认值和表达式。
- 调用步骤的
if会将整个函数作为一个整体进行控制。
嵌套
自定义函数可以调用其他自定义函数和内置的 eas/* 函数。目前,自定义函数无法调用 eas/build 或 eas/maestro_test。EAS Workflows 会将每个嵌套路径解析为相对于 EAS 项目目录的路径,而不是相对于调用函数所在的目录。
你最多可以将自定义函数嵌套 10 层。自定义函数不能直接或通过其他自定义函数调用自身。
示例
.eas/functions/greet/function.yml 定义了一个包含一个输入、一个输出和一个步骤的自定义函数:
工作流通过 uses: ./.eas/functions/greet 调用它,使用 with: 传递输入,并从 ${{ steps.greet.outputs.message }} 读取输出:
你也可以从钩子调用自定义函数: