err*_*ata 10 workflow yaml github-actions
我正在尝试创建一个 GitHub Actions 工作流程,该工作流程将收集在上次提交中更改的特定路径,并为每个收集的路径(如果有)运行一个步骤。
目前,在我的工作流程中,我正在创建一个路径数组,但我不确定如何处理我的数组:
name: Test
on:
push
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
# This step will create "an array" of strings, e.g. "path1 path2 path3"
- name: array
id: arr
run: |
arr=()
for i in "$(git diff-tree --no-commit-id --name-only -r ${{ github.sha }})"
do
if [[ $i == *"path1"* ]]; then
arr+=("path1")
fi
if [[ $i == *"path2"* ]]; then
arr+=("path2")
fi
done
echo ::set-output name=arr::${arr[@]}
# How to run this step by iterating the `${{ steps.arr.outputs.arr }}`?
- name: reviewdog-lint
uses: reviewdog/action-eslint@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
reporter: github-pr-review
eslint_flags: 'my_project/some_folder/${{ SINGLE_PATH }}/' # `SINGLE_PATH` would be a path from the array
Run Code Online (Sandbox Code Playgroud)
像这样的事情一开始就有可能吗?如果没有,推荐什么方法来循环遍历某些值并将它们用作其他工作流程步骤中的参数?
Mic*_*ers 35
GitHub Actions 对此提供了一些支持。这里有一个非常好的教程,详细解释了如何执行此操作,但本质上您要做的就是将这些步骤分为两项工作。第一个作业将输出一个 JSON 对象,该对象将作为matrix第二个作业的输入。
这是一个简单的例子:
name: Test Github Actions Dynamic Matrix
on:
workflow_dispatch:
jobs:
setup:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.matrix.outputs.value }}
steps:
- id: matrix
run: |
echo "value=[\"a\", \"b\", \"c\"]" >> $GITHUB_OUTPUT
- run: |
echo "${{ steps.matrix.outputs.value }}"
build:
needs: [ setup ]
runs-on: ubuntu-latest
strategy:
matrix:
value: ${{fromJSON(needs.setup.outputs.matrix)}}
steps:
- run: |
echo "${{ matrix.value }}"
Run Code Online (Sandbox Code Playgroud)
你可以在这里看到它的动作
很难说不运行它,但我想说你需要在第二步中使用输出,将其分配给变量,例如:
env:
OUTPUT: ${{ steps.id.outputs.arr }}
Run Code Online (Sandbox Code Playgroud)
$OUTPUT然后在操作中用作环境变量。
该特定操作的问题在于它一次需要一次提交。但是你可以查看代码,它是一个shell脚本。您可以从第 15 行分叉它,并使其分割输入并对其运行一个循环,应用于eslint其中的每一个。
| 归档时间: |
|
| 查看次数: |
8959 次 |
| 最近记录: |