最後のコミットで変更された特定のパスを収集し、収集された各パスに対してステップを実行するGitHubアクションワークフローを作成しようとしています。
現在、ワークフローではパスの配列を作成していますが、配列の処理方法がわかりません。
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
そもそもこのようなことは可能ですか?そうでない場合、いくつかの値をループして他のワークフローステップの引数として使用するための推奨される方法は何ですか?
実行せずに言うのは難しいですが、次のような変数に割り当てることにより、2番目のステップで出力を使用する必要があると思います。
env:
OUTPUT: ${{ steps.id.outputs.arr }}
次に、$OUTPUT
をアクション内の環境変数として使用します。
その特定のアクションの問題は、一度に1つのコミットがかかることです。しかし、あなたはできます コードをチェックしてください 、それはシェルスクリプトです。 15行目からフォークして、入力を分割してループを実行し、eslint
をそれらすべてに適用できます。