web-dev-qa-db-fra.com

Utilisation d'un tableau de valeurs pour répéter une étape dans le flux de travail Actions GitHub

J'essaie de créer un flux de travail GitHub Actions qui collecterait des chemins spécifiques modifiés lors du dernier commit et exécuterait une étape pour chacun des chemins collectés, le cas échéant.

Actuellement, dans mon flux de travail, je crée un tableau de chemins, mais je ne sais pas comment procéder avec mon tableau:

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

Quelque chose comme ça est même possible en premier lieu? Sinon, quelle serait la méthode recommandée pour parcourir certaines valeurs et les utiliser comme arguments dans d'autres étapes du flux de travail?

6
errata

Difficile à dire sans l'exécuter, mais je dirais que vous devez utiliser la sortie dans la deuxième étape en l'attribuant à une variable, quelque chose comme:

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

Ensuite, vous utilisez $OUTPUT comme variable d'environnement à l'intérieur de l'action.

Le problème avec cette action particulière est qu'elle ne prend qu'une seule validation à la fois. Mais vous pouvez consultez le code , c'est un script Shell. Vous pouvez le dériver à partir de la ligne 15 et le diviser en entrée et exécuter une boucle dessus, en appliquant eslint à chacun d'eux.

0
jjmerelo