GitHub 动作构建矩阵:$ 是如何工作的?
GitHub Action build matrix: How does the $ work?
runs-on: $
strategy:
matrix:
node: [6, 8, 10]
os: [ubuntu-16.04, ubuntu-18.04]
steps:
- uses: actions/setup-node@v1
with:
version: $
此代码段表示 "setup-node" 操作在六种不同的配置中是 运行(两个不同的 os 版本上的三个不同的节点版本)。
但是,我不明白 $ 的实际工作原理。 runs-on
如何获取 os
数组中的值? version
键如何获取 node
数组的值?
使用构建矩阵选项的自定义操作看起来如何?
$
运算符尚未记录在案,但在示例中您可以看到它的用法。它似乎类似于 MongoDB's $
operator,如果您熟悉那个的话。在 MongoDB 中,显然在这里,$
代表 "the value of the current element in the list"。例如,文档片段将创建六个作业,三个 运行 在 Ubuntu 16.04 和三个 Ubuntu 18.04.
文档还不够完整,您引用的文档片段中使用 $
运算符的方式将来会发生变化。片段 应该 是:
runs-on: ${{ matrix.os }}
strategy:
matrix:
node: [6, 8, 10]
os: [ubuntu-16.04, ubuntu-18.04]
steps:
- uses: actions/setup-node@v1
with:
version: ${{ matrix.node }}
虽然 GitHub 动作解析器可以很简单地找出应该分配给 runs-on
参数的字符串列表(因为 6、8 和 10 不是runs-on
的有效值),它不知道 setup-node
的 version
输入的有效值是什么。 (顺便说一句,截至 2019 年 8 月 14 日,它已重命名为 node-version
,但文档片段尚未更新)。 action.yml
配置文件中没有列出有效输入值的任何内容,只有名称和描述。
因此,由于此文档片段无法按原样工作,我猜它会在某个时候更新,以说明 $
是当前选定的矩阵变量集,并且 ${{ variableName }}
(例如,${{ matrix.node }}
或 ${{ matrix.os }}
)是您应该在使用这些变量的作业配置部分中放置的内容。
至于你问题的第二部分,"How would a custom action look like that works with the build matrix option?",我认为它看起来像是一个正常的动作,在 action.yml
中记录它的输入(参见 the action.yml
for setup-node v1 的示例这看起来像什么)。然后当你在你的工作中调用它时,你会做:
strategy:
matrix:
someVariable: [foo, bar]
steps:
- uses: my-actions/quux@v1.0
with:
someInput: ${{ matrix.someVariable }}
runs-on: $
strategy:
matrix:
node: [6, 8, 10]
os: [ubuntu-16.04, ubuntu-18.04]
steps:
- uses: actions/setup-node@v1
with:
version: $
此代码段表示 "setup-node" 操作在六种不同的配置中是 运行(两个不同的 os 版本上的三个不同的节点版本)。
但是,我不明白 $ 的实际工作原理。 runs-on
如何获取 os
数组中的值? version
键如何获取 node
数组的值?
使用构建矩阵选项的自定义操作看起来如何?
$
运算符尚未记录在案,但在示例中您可以看到它的用法。它似乎类似于 MongoDB's $
operator,如果您熟悉那个的话。在 MongoDB 中,显然在这里,$
代表 "the value of the current element in the list"。例如,文档片段将创建六个作业,三个 运行 在 Ubuntu 16.04 和三个 Ubuntu 18.04.
文档还不够完整,您引用的文档片段中使用 $
运算符的方式将来会发生变化。片段 应该 是:
runs-on: ${{ matrix.os }}
strategy:
matrix:
node: [6, 8, 10]
os: [ubuntu-16.04, ubuntu-18.04]
steps:
- uses: actions/setup-node@v1
with:
version: ${{ matrix.node }}
虽然 GitHub 动作解析器可以很简单地找出应该分配给 runs-on
参数的字符串列表(因为 6、8 和 10 不是runs-on
的有效值),它不知道 setup-node
的 version
输入的有效值是什么。 (顺便说一句,截至 2019 年 8 月 14 日,它已重命名为 node-version
,但文档片段尚未更新)。 action.yml
配置文件中没有列出有效输入值的任何内容,只有名称和描述。
因此,由于此文档片段无法按原样工作,我猜它会在某个时候更新,以说明 $
是当前选定的矩阵变量集,并且 ${{ variableName }}
(例如,${{ matrix.node }}
或 ${{ matrix.os }}
)是您应该在使用这些变量的作业配置部分中放置的内容。
至于你问题的第二部分,"How would a custom action look like that works with the build matrix option?",我认为它看起来像是一个正常的动作,在 action.yml
中记录它的输入(参见 the action.yml
for setup-node v1 的示例这看起来像什么)。然后当你在你的工作中调用它时,你会做:
strategy:
matrix:
someVariable: [foo, bar]
steps:
- uses: my-actions/quux@v1.0
with:
someInput: ${{ matrix.someVariable }}