web-dev-qa-db-ja.com

値の配列を使用してGitHubアクションワークフローのステップを繰り返す

最後のコミットで変更された特定のパスを収集し、収集された各パスに対してステップを実行する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

そもそもこのようなことは可能ですか?そうでない場合、いくつかの値をループして他のワークフローステップの引数として使用するための推奨される方法は何ですか?

6
errata

実行せずに言うのは難しいですが、次のような変数に割り当てることにより、2番目のステップで出力を使用する必要があると思います。

env:
          OUTPUT: ${{ steps.id.outputs.arr }}

次に、$OUTPUTをアクション内の環境変数として使用します。

その特定のアクションの問題は、一度に1つのコミットがかかることです。しかし、あなたはできます コードをチェックしてください 、それはシェルスクリプトです。 15行目からフォークして、入力を分割してループを実行し、eslintをそれらすべてに適用できます。

0
jjmerelo