diff --git a/.github/actions/pr_changed_files/action.yml b/.github/actions/pr_changed_files/action.yml new file mode 100644 index 0000000000000..da2bd4ab0e6c8 --- /dev/null +++ b/.github/actions/pr_changed_files/action.yml @@ -0,0 +1,38 @@ +name: 'Changed files in PR' +description: 'Get all changed files in a Pull Request' +author: 'ericLemanissier' +inputs: + files: + description: "Check for changes using only this list of files (Defaults to the entire repo)" + required: false + default: "" + +outputs: + all_changed_files: + description: List of all copied, modified, and added files. + value: ${{ steps.changed-files.outputs.all_changed_files }} + any_changed: + description: Return true only when any files provided using the files input have changed. + value: ${{ steps.changed-files.outputs.any_changed }} +runs: + using: "composite" + steps: + - uses: actions/setup-python@v4 + - name: Get changed files + id: changed-files + shell: python + env: + GITHUB_TOKEN: ${{ github.token }} + run: | + import json + import subprocess + import fnmatch + import os + + res = subprocess.run(["gh", "api", "/repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/files", "--paginate"], capture_output=True, check=True) + files = json.loads(res.stdout) + files = [f["filename"] for f in files] + files = [f for f in files if fnmatch.fnmatch(f, '''${{ inputs.files }}'''.strip())] + with open(os.getenv("GITHUB_OUTPUT"), "a") as output_file: + output_file.write(f"any_changed={'true' if files else 'false'}\n") + output_file.write(f"all_changed_files={' '.join(files)}\n") diff --git a/.github/workflows/linter-conan-v2.yml b/.github/workflows/linter-conan-v2.yml index 7a00231462537..146c807267d26 100644 --- a/.github/workflows/linter-conan-v2.yml +++ b/.github/workflows/linter-conan-v2.yml @@ -15,10 +15,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - with: - fetch-depth: 2 - name: Get changed files - uses: tj-actions/changed-files@v20 + uses: ./.github/actions/pr_changed_files id: changed_files with: files: | @@ -83,11 +81,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - with: - fetch-depth: 2 - name: Get changed files id: changed-files - uses: tj-actions/changed-files@v20 + uses: ./.github/actions/pr_changed_files with: files: | recipes/*/*/conanfile.py @@ -118,11 +114,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - with: - fetch-depth: 2 - name: Get changed files id: changed-files - uses: tj-actions/changed-files@v20 + uses: ./.github/actions/pr_changed_files with: files: | recipes/*/*/test_*/conanfile.py diff --git a/.github/workflows/linter-yaml.yml b/.github/workflows/linter-yaml.yml index edc701a2db86d..d7d4050e8071d 100644 --- a/.github/workflows/linter-yaml.yml +++ b/.github/workflows/linter-yaml.yml @@ -16,11 +16,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - with: - fetch-depth: 2 - - name: Get changed files - uses: tj-actions/changed-files@v20 + uses: ./.github/actions/pr_changed_files id: changed_files with: files: | @@ -69,9 +66,6 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - with: - fetch-depth: 2 - - uses: actions/setup-python@v4 with: python-version: ${{ env.PYVER }} @@ -83,7 +77,7 @@ jobs: - name: Get changed files (config) id: changed_files_config if: always() - uses: tj-actions/changed-files@v20 + uses: ./.github/actions/pr_changed_files with: files: | ${{ env.CONFIG_FILES_PATH }} @@ -105,7 +99,7 @@ jobs: - name: Get changed files (conandata) id: changed_files_conandata if: always() - uses: tj-actions/changed-files@v20 + uses: ./.github/actions/pr_changed_files with: files: | ${{ env.CONANDATA_FILES_PATH }}