diff --git a/.github/workflows/changed-files.yml b/.github/workflows/changed-files.yml index 3b0dacecf..d1a114add 100644 --- a/.github/workflows/changed-files.yml +++ b/.github/workflows/changed-files.yml @@ -1,14 +1,24 @@ name: changed-files on: pull_request: + branches: + - main + push: + branches: + - main + + +env: + LOCAL_DIR_FOR_SYNC: check-change jobs: - change-on-branch: + changes-in-ga-steps: runs-on: ubuntu-latest steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 with: fetch-depth: 0 # OR "2" -> To retrieve the preceding commit. + - name: add test.txt file id: add-file run: | @@ -28,6 +38,7 @@ jobs: files_yaml: | test: - 'test-*' + - name: output change run: | { @@ -35,3 +46,43 @@ jobs: echo "all_changed_files: ${{ steps.changed-files-yaml.outputs.test_all_changed_files }}"; echo "add-file: ${{ steps.add-file.outputs.changed }}"; } >> "$GITHUB_STEP_SUMMARY" + + get-changed-dirs: + runs-on: [ubuntu-latest] + outputs: + changed_dirs: ${{ steps.changed-files.outputs.all_changed_files }} + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 # OR "2" -> To retrieve the preceding commit. + + - name: get all changes + id: changed-files + uses: tj-actions/changed-files@v41 + with: + dir_names: true + dir_names_max_depth: 2 # e.g. check-change/test-2 + json: true + escape_json: false + files: "${{ env.LOCAL_DIR_FOR_SYNC }}/**" + files_ignore: '**/README.md' + # Reference: https://github.com/tj-actions/changed-files/blob/main/.github/workflows/matrix-test.yml + + - name: check output + run: | + echo "changed_dirs: ${{ steps.changed-files.outputs.all_changed_files }}" >> "$GITHUB_STEP_SUMMARY" + + do-sth-on-changed-dirs: + runs-on: ubuntu-latest + if: ${{ needs.get-changed-dirs.outputs.changed_dirs != '[]' }} # Without it, the strategy parser will fail if the changed_directories is empty. + strategy: + matrix: + dir: ${{ fromJson(needs.get-changed-dirs.outputs.changed_dirs) }} + exclude: # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategymatrixexclude + - dir: check-change # exclude the parent dir (you can't use ${{ env.LOCAL_DIR_FOR_SYNC }} in matrix) + needs: + - get-changed-dirs + steps: + - uses: actions/checkout@v3 + - run: | + echo "do sth on changed dir ${{ matrix.dir }}" >> "$GITHUB_STEP_SUMMARY" diff --git a/README.md b/README.md index c741152ae..ce76248b9 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ |[pre-commit](.github/workflows/pre-commit.yml)|pull_request|Run `pre-commit`.| |[s3-local](.github/workflows/s3-local.yml)|pull_request|Use `minio` for s3 mock in GitHub Actions. **This workflow is brokenāŒ.**| |[terrraform-fmt](.github/workflows/terraform-fmt.yml)|pull_request|Run `terraform fmt` for `**.tf`.| +|[changed-files](.github/workflows/changed-files.yml)|pull_request|do sth for changed files/dir using https://github.com/tj-actions/changed-files| ### 2. release diff --git a/check-change/file-to-ingnore.json b/check-change/file-to-ingnore.json new file mode 100644 index 000000000..7ba1b793e --- /dev/null +++ b/check-change/file-to-ingnore.json @@ -0,0 +1 @@ +{ "key": "value" } diff --git a/check-change/test-2/README.md b/check-change/test-2/README.md new file mode 100644 index 000000000..6a307c8cc --- /dev/null +++ b/check-change/test-2/README.md @@ -0,0 +1 @@ +# test-2 diff --git a/check-change/test-2/test.txt b/check-change/test-2/test.txt new file mode 100644 index 000000000..9daeafb98 --- /dev/null +++ b/check-change/test-2/test.txt @@ -0,0 +1 @@ +test