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?
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.