Closed4

Github actionsでJob単位でのpathsフィルターを実現するpaths-filter@3 の挙動で気をつけること

shinoyushinoyu

動作検証は下記で実行した
https://github.com/shinoyu/paths-filter-woking-test

actionsの設定はこんな感じで
https://github.com/shinoyu/paths-filter-woking-test/blob/main/.github/workflows/paths_changes_woking.yml

# tre
.
├── .github
│   └── workflows
│       └── paths_changes_woking.yml
├── folder-1
│   └── docs.md
├── folder-2
│   └── docs.md
└── folder-3
    └── docs.md

こう。検証用なのでざっくりとする

shinoyushinoyu

個人的にハマったこととしては、公式のexampleではシンプルな設定を記載している。

https://github.com/dorny/paths-filter?tab=readme-ov-file#example

- uses: dorny/paths-filter@v3
  id: changes
  with:
    filters: |
      src:
        - 'src/**'

  # run only if some file in 'src' folder was changed
- if: steps.changes.outputs.src == 'true'
  run: ...

自分が検証したときは2点問題が発生した

  1. if: steps.changes.... で制御すると、Unrecongnized named-value: 'step'のエラーが出る
  2. dorny/paths-filter@v3にて、outputsの定義を書かないと、変更を検知しても後続のジョブが動作しない
shinoyushinoyu

1の問題に関しては、if: steps.changes.... ではなく、needsを使って、if: needs.changes.... という形にすれば対応可能

2の問題に関しては、下記のようにちゃんとoutputsを定義して上げる必要がある

jobs:
  changes:
+    outputs:
+      folder1: ${{ steps.changes.outputs.folder1 }}
+      folder2: ${{ steps.changes.outputs.folder2 }}
+      folder3: ${{ steps.changes.outputs.folder3 }}
    runs-on: ubuntu-latest
    steps:

これがないと差分があっても、後続ジョブのif時に値が正しく渡されない(当たり前だが)

このスクラップは4ヶ月前にクローズされました