{"id":13552752,"url":"https://github.com/tj-actions/changed-files","last_synced_at":"2025-05-13T16:07:08.172Z","repository":{"id":37543790,"uuid":"344672439","full_name":"tj-actions/changed-files","owner":"tj-actions","description":":octocat: Github action to retrieve all (added, copied, modified, deleted, renamed, type changed, unmerged, unknown) files and directories.","archived":false,"fork":false,"pushed_at":"2024-10-28T23:25:11.000Z","size":45374,"stargazers_count":1819,"open_issues_count":2,"forks_count":193,"subscribers_count":10,"default_branch":"main","last_synced_at":"2024-10-29T15:22:19.838Z","etag":null,"topics":["actions","change-detection","change-detetion","changed-file","changed-files","ci","ci-cd","conditional-execution","continuous-delivery","continuous-integration","github","github-actions","modified","modified-files","monorepo","restore-files","submodules","workflows","yaml-files"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tj-actions.png","metadata":{"files":{"readme":"README.md","changelog":"HISTORY.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["jackton1"],"patreon":null,"open_collective":"tj-actions","ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":[]}},"created_at":"2021-03-05T02:35:53.000Z","updated_at":"2024-10-29T04:53:43.000Z","dependencies_parsed_at":"2023-10-17T03:02:10.130Z","dependency_job_id":"98e75f02-6d78-436d-ad48-2ec3c8e7b80e","html_url":"https://github.com/tj-actions/changed-files","commit_stats":{"total_commits":3015,"total_committers":40,"mean_commits":75.375,"dds":"0.37777777777777777","last_synced_commit":"435fd74b2ec5d115590c1a20ba1101bf9a291563"},"previous_names":[],"tags_count":369,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tj-actions%2Fchanged-files","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tj-actions%2Fchanged-files/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tj-actions%2Fchanged-files/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tj-actions%2Fchanged-files/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tj-actions","download_url":"https://codeload.github.com/tj-actions/changed-files/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247774508,"owners_count":20993750,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["actions","change-detection","change-detetion","changed-file","changed-files","ci","ci-cd","conditional-execution","continuous-delivery","continuous-integration","github","github-actions","modified","modified-files","monorepo","restore-files","submodules","workflows","yaml-files"],"created_at":"2024-08-01T12:02:09.299Z","updated_at":"2025-04-25T15:56:21.628Z","avatar_url":"https://github.com/tj-actions.png","language":"TypeScript","readme":"[![Ubuntu](https://img.shields.io/badge/Ubuntu-E95420?style=for-the-badge\\\u0026logo=ubuntu\\\u0026logoColor=white)](https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on)\n[![Mac OS](https://img.shields.io/badge/mac%20os-000000?style=for-the-badge\\\u0026logo=macos\\\u0026logoColor=F0F0F0)](https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on)\n[![Windows](https://img.shields.io/badge/Windows-0078D6?style=for-the-badge\\\u0026logo=windows\\\u0026logoColor=white)](https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on)\n[![Public workflows that use this action.](https://img.shields.io/endpoint?style=for-the-badge\\\u0026url=https%3A%2F%2Fused-by.vercel.app%2Fapi%2Fgithub-actions%2Fused-by%3Faction%3Dtj-actions%2Fchanged-files%26package_id%3DUGFja2FnZS0yOTQyNTU4MDk5%26badge%3Dtrue)](https://github.com/search?o=desc\\\u0026q=tj-actions+changed-files+language%3AYAML\\\u0026s=\\\u0026type=Code)\n\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/4fe2f49c3ab144b0bbe4effc85a061a0)](https://app.codacy.com/gh/tj-actions/changed-files/dashboard?utm_source=gh\\\u0026utm_medium=referral\\\u0026utm_content=\\\u0026utm_campaign=Badge_grade)\n[![CI](https://github.com/tj-actions/changed-files/actions/workflows/test.yml/badge.svg)](https://github.com/tj-actions/changed-files/actions/workflows/test.yml)\n[![Update release version.](https://github.com/tj-actions/changed-files/actions/workflows/sync-release-version.yml/badge.svg)](https://github.com/tj-actions/changed-files/actions/workflows/sync-release-version.yml)\n\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n\n[![All Contributors](https://img.shields.io/badge/all_contributors-29-orange.svg?style=flat-square)](#contributors-)\n\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\n## changed-files\n\nEffortlessly track all changed files and directories relative to a target branch, the current branch (preceding commit or the last remote commit), multiple branches, or custom commits returning **relative paths** from the project root using this GitHub action.\n\n\u003e \\[!NOTE]\n\u003e\n\u003e *   This action solely identifies files that have changed for events such as [`pull_request*`, `push`, `merge_group`, `release`, and many more](#other-supported-events-electron). However, it doesn't detect pending uncommitted changes created during the workflow execution.\n\u003e\n\u003e     See: https://github.com/tj-actions/verify-changed-files instead.\n\n## Table of contents\n\n*   [Features 🚀](#features-)\n*   [Usage 💻](#usage-)\n    *   [On `pull_request` 🔀](#on-pull_request-)\n        *   [Using local .git directory 📁](#using-local-git-directory-)\n        *   [Using Github's API :octocat:](#using-githubs-api-octocat)\n    *   [On `push` ⬆️](#on-push-️)\n    *   [Other supported events :electron:](#other-supported-events-electron)\n*   [Inputs ⚙️](#inputs-️)\n*   [Useful Acronyms 🧮](#useful-acronyms-)\n*   [Outputs 📤](#outputs-)\n*   [Versioning 🏷️](#versioning-️)\n*   [Examples 📄](#examples-)\n*   [Real-world usage 🌐](#real-world-usage-)\n    *   [Open source projects 📦](#open-source-projects-)\n    *   [Scalability Example 📈](#scalability-example-)\n*   [Important Notice ⚠️](#important-notice-️)\n*   [Migration guide 🔄](#migration-guide-)\n*   [Credits 👏](#credits-)\n*   [Report Bugs 🐛](#report-bugs-)\n*   [Contributors ✨](#contributors-)\n\n## Features 🚀\n\n*   Fast execution, averaging 0-10 seconds.\n*   Leverages either [Github's REST API](https://docs.github.com/en/rest/reference/repos#list-commits) or [Git's native diff command](https://git-scm.com/docs/git-diff) to determine changed files.\n*   Facilitates easy debugging.\n*   Scales to handle large/mono repositories.\n*   Supports Git submodules.\n*   Supports [merge queues](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-a-merge-queue) for pull requests.\n*   Generates escaped [JSON output for running matrix jobs](https://github.com/tj-actions/changed-files/blob/main/.github/workflows/matrix-example.yml) based on changed files.\n*   Lists changed directories.\n    *   Limits matching changed directories to a specified maximum depth.\n    *   Optionally excludes the current directory.\n*   Writes outputs to a designated `.txt` or `.json` file for further processing.\n*   Restores deleted files to their previous location or a newly specified location.\n*   Supports fetching a fixed number of commits, which improves performance.\n*   Compatible with all platforms (Linux, MacOS, Windows).\n*   Supports [GitHub-hosted runners](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners).\n*   Supports [GitHub Enterprise Server](https://docs.github.com/en/enterprise-server@3.3/admin/github-actions/getting-started-with-github-actions-for-your-enterprise/getting-started-with-github-actions-for-github-enterprise-server).\n*   Supports [self-hosted runners](https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners).\n*   Lists all files and directories that have changed:\n    *   Between the current pull request branch and the last commit on the target branch.\n    *   Between the last commit and the current pushed change.\n    *   Between the last remote branch commit and the current HEAD.\n*   Restricts change detection to a subset of files and directories:\n    *   Provides boolean output indicating changes in specific files.\n    *   Uses [Glob pattern](https://codepen.io/mrmlnc/pen/OXQjMe) matching.\n        *   Supports Globstar.\n        *   Supports brace expansion.\n        *   Supports negation.\n    *   Uses [YAML](https://yaml.org/) syntax for specifying patterns.\n        *   Supports [YAML anchors \u0026 aliases](https://github.com/tj-actions/changed-files/blob/main/test/changed-files.yml#L8-L12).\n        *   Supports [YAML multi-line strings](https://github.com/tj-actions/changed-files/blob/main/test/changed-files.yml#L13-L16).\n\nAnd many more...\n\n## Usage 💻\n\n\u003e \\[!IMPORTANT]\n\u003e\n\u003e *   **Push Events**: When configuring [`actions/checkout`](https://github.com/actions/checkout#usage), make sure to set [`fetch-depth`](https://github.com/actions/checkout#usage) to either `0` or `2`, depending on your use case.\n\u003e *   **Mono Repositories**: To avoid pulling the entire branch history, you can utilize the default [`actions/checkout`](https://github.com/actions/checkout#usage)'s [`fetch-depth`](https://github.com/actions/checkout#usage) of `1` for [`pull_request`](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request) events.\n\u003e *   **Quoting Multiline Inputs**: Avoid using single or double quotes for [multiline](https://github.com/tj-actions/changed-files/blob/main/test/changed-files.yml#L13-L16) inputs. The value is already a string separated by a newline character. Refer to the [Examples](#examples-) section for more information.\n\u003e *   **Credentials Persistence**: If [`fetch-depth`](https://github.com/actions/checkout#usage) is not set to 0, make sure to set [`persist-credentials`](https://github.com/actions/checkout#usage)  to `true` when configuring [`actions/checkout`](https://github.com/actions/checkout#usage).\n\u003e *   **Matching Files and Folders**: To match all files and folders under a directory, this requires a globstar pattern e.g. `dir_name/**` which matches any number of subdirectories and files.\n\nVisit the [discussions for more information](https://github.com/tj-actions/changed-files/discussions) or [create a new discussion](https://github.com/tj-actions/changed-files/discussions/new/choose) for usage-related questions.\n\n### On [`pull_request`](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request) 🔀\n\nDetect changes to all files in a Pull request relative to the target branch or since the last pushed commit.\n\n#### Using local .git directory 📁\n\n```yaml\nname: CI\n\non:\n  pull_request:\n    branches:\n      - main\n\njobs:\n  # ------------------------------------------------------------------------------------------------------------------------------------------------\n  # Event `pull_request`: Compare the last commit of the main branch or last remote commit of the PR branch -\u003e to the current commit of a PR branch.\n  # ------------------------------------------------------------------------------------------------------------------------------------------------\n  changed_files:\n    runs-on: ubuntu-latest  # windows-latest || macos-latest\n    name: Test changed-files\n    steps:\n      - uses: actions/checkout@v4\n\n      # -----------------------------------------------------------------------------------------------------------\n      # Example 1\n      # -----------------------------------------------------------------------------------------------------------\n      - name: Get changed files\n        id: changed-files\n        uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n        # To compare changes between the current commit and the last pushed remote commit set `since_last_remote_commit: true`. e.g\n        # with:\n        #   since_last_remote_commit: true \n\n      - name: List all changed files\n        env:\n          ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}\n        run: |\n          for file in ${ALL_CHANGED_FILES}; do\n            echo \"$file was changed\"\n          done\n\n      # -----------------------------------------------------------------------------------------------------------\n      # Example 2\n      # -----------------------------------------------------------------------------------------------------------\n      - name: Get all changed markdown files\n        id: changed-markdown-files\n        uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n        with:\n          # Avoid using single or double quotes for multiline patterns\n          files: |\n            **.md\n            docs/**.md\n\n      - name: List all changed files markdown files\n        if: steps.changed-markdown-files.outputs.any_changed == 'true'\n        env:\n          ALL_CHANGED_FILES: ${{ steps.changed-markdown-files.outputs.all_changed_files }}\n        run: |\n          for file in ${ALL_CHANGED_FILES}; do\n            echo \"$file was changed\"\n          done\n\n      # -----------------------------------------------------------------------------------------------------------\n      # Example 3\n      # -----------------------------------------------------------------------------------------------------------\n      - name: Get all test, doc and src files that have changed\n        id: changed-files-yaml\n        uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n        with:\n          files_yaml: |\n            doc:\n              - '**.md'\n              - docs/**\n            test:\n              - test/**\n              - '!test/**.md'\n            src:\n              - src/**\n          # Optionally set `files_yaml_from_source_file` to read the YAML from a file. e.g `files_yaml_from_source_file: .github/changed-files.yml`\n\n      - name: Run step if test file(s) change\n        # NOTE: Ensure all outputs are prefixed by the same key used above e.g. `test_(...)` | `doc_(...)` | `src_(...)` when trying to access the `any_changed` output.\n        if: steps.changed-files-yaml.outputs.test_any_changed == 'true'  \n        env:\n          TEST_ALL_CHANGED_FILES: ${{ steps.changed-files-yaml.outputs.test_all_changed_files }}\n        run: |\n          echo \"One or more test file(s) has changed.\"\n          echo \"List all the files that have changed: $TEST_ALL_CHANGED_FILES\"\n      \n      - name: Run step if doc file(s) change\n        if: steps.changed-files-yaml.outputs.doc_any_changed == 'true'\n        env:\n          DOC_ALL_CHANGED_FILES: ${{ steps.changed-files-yaml.outputs.doc_all_changed_files }}\n        run: |\n          echo \"One or more doc file(s) has changed.\"\n          echo \"List all the files that have changed: $DOC_ALL_CHANGED_FILES\"\n\n      # -----------------------------------------------------------------------------------------------------------\n      # Example 4\n      # -----------------------------------------------------------------------------------------------------------\n      - name: Get changed files in the docs folder\n        id: changed-files-specific\n        uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n        with:\n          files: docs/*.{js,html}  # Alternatively using: `docs/**`\n          files_ignore: docs/static.js\n\n      - name: Run step if any file(s) in the docs folder change\n        if: steps.changed-files-specific.outputs.any_changed == 'true'\n        env:\n          ALL_CHANGED_FILES: ${{ steps.changed-files-specific.outputs.all_changed_files }}\n        run: |\n          echo \"One or more files in the docs folder has changed.\"\n          echo \"List all the files that have changed: $ALL_CHANGED_FILES\"\n```\n\n#### Using Github's API :octocat:\n\n```yaml\nname: CI\n\non:\n  pull_request:\n    branches:\n      - main\n\njobs:\n  # -------------------------------------------------------------\n  # Event `pull_request`: Returns all changed pull request files.\n  # --------------------------------------------------------------\n  changed_files:\n    # NOTE:\n    # - This is limited to pull_request* events and would raise an error for other events.\n    # - A maximum of 3000 files can be returned.\n    # - For more flexibility and no limitations see \"Using local .git directory\" above.\n\n    runs-on: ubuntu-latest  # windows-latest || macos-latest\n    name: Test changed-files\n    permissions:\n      pull-requests: read\n\n    steps:\n      - name: Get changed files\n        id: changed-files\n        uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n\n      - name: List all changed files\n        env:\n          ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}\n        run: |\n          for file in ${ALL_CHANGED_FILES}; do\n            echo \"$file was changed\"\n          done\n```\n\n### On [`push`](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#push) ⬆️\n\nDetect changes to files made since the last pushed commit.\n\n```yaml\nname: CI\n\non:\n  push:\n    branches:\n      - main\n\njobs:\n  # -------------------------------------------------------------\n  # Using GitHub's API is not supported for push events\n  # -------------------------------------------------------------\n  # \n  # ----------------------------------------------------------------------------------------------\n  # Using local .git history\n  # ----------------------------------------------------------------------------------------------\n  # Event `push`: Compare the preceding remote commit -\u003e to the current commit of the main branch \n  # ----------------------------------------------------------------------------------------------\n  changed_files:\n    runs-on: ubuntu-latest  # windows-latest || macos-latest\n    name: Test changed-files\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 0  # OR \"2\" -\u003e To retrieve the preceding commit.\n\n      - name: Get changed files\n        id: changed-files\n        uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n      # NOTE: `since_last_remote_commit: true` is implied by default and falls back to the previous local commit.\n\n      - name: List all changed files\n        env:\n          ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}\n        run: |\n          for file in ${ALL_CHANGED_FILES}; do\n            echo \"$file was changed\"\n          done\n      ...\n```\n\n### Other supported events :electron:\n\n*   [schedule](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule)\n*   [release](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#release)\n*   [workflow\\_dispatch](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_dispatch)\n*   [workflow\\_run](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run)\n*   [merge\\_group](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#merge_group)\n*   [issue\\_comment](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#issue_comment)\n*   ...and many more\n\nTo access more examples, navigate to the [Examples](#examples-) section.\n\nIf you feel generous and want to show some extra appreciation:\n\nSupport this project with a :star:\n\n[![Buy me a coffee][buymeacoffee-shield]][buymeacoffee]\n\n[buymeacoffee]: https://www.buymeacoffee.com/jackton1\n\n[buymeacoffee-shield]: https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png\n\n\u003e \\[!IMPORTANT]\n\u003e\n\u003e *   When using `files_yaml*` inputs:\n\u003e     *   All keys must start with a letter or `_` and contain only alphanumeric characters, `-`, or `_`.\n\u003e\n\u003e         For example, `test` or `test_key` or `test-key` or `_test_key` are all valid choices.\n\n## Inputs ⚙️\n\n\u003c!-- AUTO-DOC-INPUT:START - Do not remove or modify this section --\u003e\n\n```yaml\n- uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n  id: changed-files\n  with:\n    # Github API URL.\n    # Type: string\n    # Default: \"${{ github.api_url }}\"\n    api_url: ''\n\n    # Specify a different base commit \n    # SHA or branch used for \n    # comparing changes \n    # Type: string\n    base_sha: ''\n\n    # Exclude changes outside the current \n    # directory and show path names \n    # relative to it. NOTE: This \n    # requires you to specify the \n    # top-level directory via the `path` \n    # input. \n    # Type: boolean\n    # Default: \"true\"\n    diff_relative: ''\n\n    # Output unique changed directories instead \n    # of filenames. NOTE: This returns \n    # `.` for changed files located \n    # in the current working directory \n    # which defaults to `$GITHUB_WORKSPACE`. \n    # Type: boolean\n    # Default: \"false\"\n    dir_names: ''\n\n    # Include only directories that have \n    # been deleted as opposed to \n    # directory names of files that \n    # have been deleted in the \n    # `deleted_files` output when `dir_names` is \n    # set to `true`. \n    # Type: boolean\n    # Default: \"false\"\n    dir_names_deleted_files_include_only_deleted_dirs: ''\n\n    # Exclude the current directory represented \n    # by `.` from the output \n    # when `dir_names` is set to \n    # `true`. \n    # Type: boolean\n    # Default: \"false\"\n    dir_names_exclude_current_dir: ''\n\n    # File and directory patterns to \n    # include in the output when \n    # `dir_names` is set to `true`. \n    # NOTE: This returns only the \n    # matching files and also the \n    # directory names. \n    # Type: string\n    dir_names_include_files: ''\n\n    # Separator used to split the \n    # `dir_names_include_files` input \n    # Type: string\n    # Default: \"\\n\"\n    dir_names_include_files_separator: ''\n\n    # Limit the directory output to \n    # a maximum depth e.g `test/test1/test2` \n    # with max depth of `2` \n    # returns `test/test1`. \n    # Type: string\n    dir_names_max_depth: ''\n\n    # Escape JSON output.\n    # Type: boolean\n    # Default: \"true\"\n    escape_json: ''\n\n    # Exclude changes to submodules.\n    # Type: boolean\n    # Default: \"false\"\n    exclude_submodules: ''\n\n    # Fail when the initial diff \n    # fails. \n    # Type: boolean\n    # Default: \"false\"\n    fail_on_initial_diff_error: ''\n\n    # Fail when the submodule diff \n    # fails. \n    # Type: boolean\n    # Default: \"false\"\n    fail_on_submodule_diff_error: ''\n\n    # Fetch additional history for submodules.\n    # Type: boolean\n    # Default: \"false\"\n    fetch_additional_submodule_history: ''\n\n    # Depth of additional branch history \n    # fetched. NOTE: This can be \n    # adjusted to resolve errors with \n    # insufficient history. \n    # Type: string\n    # Default: \"25\"\n    fetch_depth: ''\n\n    # Maximum number of retries to \n    # fetch missing history. \n    # Type: string\n    # Default: \"20\"\n    fetch_missing_history_max_retries: ''\n\n    # File and directory patterns used \n    # to detect changes (Defaults to the entire repo if unset). NOTE: \n    # Multiline file/directory patterns should not \n    # include quotes. \n    # Type: string\n    files: ''\n\n    # Source file(s) used to populate \n    # the `files` input. \n    # Type: string\n    files_from_source_file: ''\n\n    # Separator used to split the \n    # `files_from_source_file` input. \n    # Type: string\n    # Default: \"\\n\"\n    files_from_source_file_separator: ''\n\n    # Ignore changes to these file(s). \n    # NOTE: Multiline file/directory patterns should \n    # not include quotes. \n    # Type: string\n    files_ignore: ''\n\n    # Source file(s) used to populate \n    # the `files_ignore` input \n    # Type: string\n    files_ignore_from_source_file: ''\n\n    # Separator used to split the \n    # `files_ignore_from_source_file` input \n    # Type: string\n    # Default: \"\\n\"\n    files_ignore_from_source_file_separator: ''\n\n    # Separator used to split the \n    # `files_ignore` input \n    # Type: string\n    # Default: \"\\n\"\n    files_ignore_separator: ''\n\n    # YAML used to define a \n    # set of file patterns to \n    # ignore changes \n    # Type: string\n    files_ignore_yaml: ''\n\n    # Source file(s) used to populate \n    # the `files_ignore_yaml` input. Example: https://github.com/tj-actions/changed-files/blob/main/test/changed-files.yml \n    # Type: string\n    files_ignore_yaml_from_source_file: ''\n\n    # Separator used to split the \n    # `files_ignore_yaml_from_source_file` input \n    # Type: string\n    # Default: \"\\n\"\n    files_ignore_yaml_from_source_file_separator: ''\n\n    # Separator used to split the \n    # `files` input \n    # Type: string\n    # Default: \"\\n\"\n    files_separator: ''\n\n    # YAML used to define a \n    # set of file patterns to \n    # detect changes \n    # Type: string\n    files_yaml: ''\n\n    # Source file(s) used to populate \n    # the `files_yaml` input. Example: https://github.com/tj-actions/changed-files/blob/main/test/changed-files.yml \n    # Type: string\n    files_yaml_from_source_file: ''\n\n    # Separator used to split the \n    # `files_yaml_from_source_file` input \n    # Type: string\n    # Default: \"\\n\"\n    files_yaml_from_source_file_separator: ''\n\n    # Include `all_old_new_renamed_files` output. Note this \n    # can generate a large output \n    # See: #501. \n    # Type: boolean\n    # Default: \"false\"\n    include_all_old_new_renamed_files: ''\n\n    # Output list of changed files \n    # in a JSON formatted string \n    # which can be used for \n    # matrix jobs. Example: https://github.com/tj-actions/changed-files/blob/main/.github/workflows/matrix-example.yml \n    # Type: boolean\n    # Default: \"false\"\n    json: ''\n\n    # Output changed files in a \n    # format that can be used \n    # for matrix jobs. Alias for \n    # setting inputs `json` to `true` \n    # and `escape_json` to `false`. \n    # Type: boolean\n    # Default: \"false\"\n    matrix: ''\n\n    # Apply the negation patterns first. \n    # NOTE: This affects how changed \n    # files are matched. \n    # Type: boolean\n    # Default: \"false\"\n    negation_patterns_first: ''\n\n    # Split character for old and \n    # new renamed filename pairs. \n    # Type: string\n    # Default: \" \"\n    old_new_files_separator: ''\n\n    # Split character for old and \n    # new filename pairs. \n    # Type: string\n    # Default: \",\"\n    old_new_separator: ''\n\n    # Directory to store output files.\n    # Type: string\n    # Default: \".github/outputs\"\n    output_dir: ''\n\n    # Output renamed files as deleted \n    # and added files. \n    # Type: boolean\n    # Default: \"false\"\n    output_renamed_files_as_deleted_and_added: ''\n\n    # Specify a relative path under \n    # `$GITHUB_WORKSPACE` to locate the repository. \n    # Type: string\n    # Default: \".\"\n    path: ''\n\n    # Use non-ASCII characters to match \n    # files and output the filenames \n    # completely verbatim by setting this \n    # to `false` \n    # Type: boolean\n    # Default: \"true\"\n    quotepath: ''\n\n    # Recover deleted files.\n    # Type: boolean\n    # Default: \"false\"\n    recover_deleted_files: ''\n\n    # Recover deleted files to a \n    # new destination directory, defaults to \n    # the original location. \n    # Type: string\n    recover_deleted_files_to_destination: ''\n\n    # File and directory patterns used \n    # to recover deleted files, defaults \n    # to the patterns provided via \n    # the `files`, `files_from_source_file`, `files_ignore` and \n    # `files_ignore_from_source_file` inputs or all deleted \n    # files if no patterns are \n    # provided. \n    # Type: string\n    recover_files: ''\n\n    # File and directory patterns to \n    # ignore when recovering deleted files. \n    # Type: string\n    recover_files_ignore: ''\n\n    # Separator used to split the \n    # `recover_files_ignore` input \n    # Type: string\n    # Default: \"\\n\"\n    recover_files_ignore_separator: ''\n\n    # Separator used to split the \n    # `recover_files` input \n    # Type: string\n    # Default: \"\\n\"\n    recover_files_separator: ''\n\n    # Apply sanitization to output filenames \n    # before being set as output. \n    # Type: boolean\n    # Default: \"true\"\n    safe_output: ''\n\n    # Split character for output strings.\n    # Type: string\n    # Default: \" \"\n    separator: ''\n\n    # Specify a different commit SHA \n    # or branch used for comparing \n    # changes \n    # Type: string\n    sha: ''\n\n    # Get changed files for commits \n    # whose timestamp is older than \n    # the given time. \n    # Type: string\n    since: ''\n\n    # Use the last commit on \n    # the remote branch as the \n    # `base_sha`. Defaults to the last \n    # non-merge commit on the target \n    # branch for pull request events \n    # and the previous remote commit \n    # of the current branch for \n    # push events. \n    # Type: boolean\n    # Default: \"false\"\n    since_last_remote_commit: ''\n\n    # Skip initially fetching additional history \n    # to improve performance for shallow \n    # repositories. NOTE: This could lead \n    # to errors with missing history. \n    # It's intended to be used \n    # when you've fetched all necessary \n    # history to perform the diff. \n    # Type: boolean\n    # Default: \"false\"\n    skip_initial_fetch: ''\n\n    # Tags pattern to ignore.\n    # Type: string\n    tags_ignore_pattern: ''\n\n    # Tags pattern to include.\n    # Type: string\n    # Default: \"*\"\n    tags_pattern: ''\n\n    # GitHub token used to fetch \n    # changed files from Github's API. \n    # Type: string\n    # Default: \"${{ github.token }}\"\n    token: ''\n\n    # Get changed files for commits \n    # whose timestamp is earlier than \n    # the given time. \n    # Type: string\n    until: ''\n\n    # Use POSIX path separator `/` \n    # for output file paths on \n    # Windows. \n    # Type: boolean\n    # Default: \"false\"\n    use_posix_path_separator: ''\n\n    # Force the use of Github's \n    # REST API even when a \n    # local copy of the repository \n    # exists \n    # Type: boolean\n    # Default: \"false\"\n    use_rest_api: ''\n\n    # Write outputs to the `output_dir` \n    # defaults to `.github/outputs` folder. NOTE: \n    # This creates a `.txt` file \n    # by default and a `.json` \n    # file if `json` is set \n    # to `true`. \n    # Type: boolean\n    # Default: \"false\"\n    write_output_files: ''\n\n```\n\n\u003c!-- AUTO-DOC-INPUT:END --\u003e\n\n## Useful Acronyms 🧮\n\n|  Acronym  |   Meaning    |\n|:---------:|:------------:|\n|     A     |    Added     |\n|     C     |    Copied    |\n|     M     |   Modified   |\n|     D     |   Deleted    |\n|     R     |   Renamed    |\n|     T     | Type changed |\n|     U     |   Unmerged   |\n|     X     |   Unknown    |\n\n\u003e \\[!IMPORTANT]\n\u003e\n\u003e *   When using `files_yaml*` inputs:\n\u003e     *   it's required to prefix all outputs with the key to ensure that the correct outputs are accessible.\n\u003e\n\u003e         For example, if you use `test` as the key, you can access outputs like `added_files`, `any_changed`, and so on by prefixing them with the key `test_added_files` or `test_any_changed` etc.\n\n## Outputs 📤\n\n\u003c!-- AUTO-DOC-OUTPUT:START - Do not remove or modify this section --\u003e\n\n|                                                                     OUTPUT                                                                     |  TYPE  |                                                                                                                                                       DESCRIPTION                                                                                                                                                       |\n|------------------------------------------------------------------------------------------------------------------------------------------------|--------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n|                                      \u003ca name=\"output_added_files\"\u003e\u003c/a\u003e[added\\_files](#output_added_files)                                       | string |                                                                                                                                       Returns only files that are \u003cbr\u003eAdded (A).                                                                                                                                        |\n|                             \u003ca name=\"output_added_files_count\"\u003e\u003c/a\u003e[added\\_files\\_count](#output_added_files_count)                              | string |                                                                                                                                           Returns the number of `added_files`                                                                                                                                           |\n|          \u003ca name=\"output_all_changed_and_modified_files\"\u003e\u003c/a\u003e[all\\_changed\\_and\\_modified\\_files](#output_all_changed_and_modified_files)          | string |                                                                                                                    Returns all changed and modified \u003cbr\u003efiles i.e. a combination of \u003cbr\u003e(ACMRDTUX)                                                                                                                      |\n| \u003ca name=\"output_all_changed_and_modified_files_count\"\u003e\u003c/a\u003e[all\\_changed\\_and\\_modified\\_files\\_count](#output_all_changed_and_modified_files_count) | string |                                                                                                                                 Returns the number of `all_changed_and_modified_files`                                                                                                                                  |\n|                             \u003ca name=\"output_all_changed_files\"\u003e\u003c/a\u003e[all\\_changed\\_files](#output_all_changed_files)                              | string |                                                                                                    Returns all changed files i.e. \u003cbr\u003ea combination of all added, \u003cbr\u003ecopied, modified and renamed files \u003cbr\u003e(ACMR)                                                                                                     |\n|                    \u003ca name=\"output_all_changed_files_count\"\u003e\u003c/a\u003e[all\\_changed\\_files\\_count](#output_all_changed_files_count)                     | string |                                                                                                                                        Returns the number of `all_changed_files`                                                                                                                                        |\n|                            \u003ca name=\"output_all_modified_files\"\u003e\u003c/a\u003e[all\\_modified\\_files](#output_all_modified_files)                            | string |                                                                                              Returns all changed files i.e. \u003cbr\u003ea combination of all added, \u003cbr\u003ecopied, modified, renamed and deleted \u003cbr\u003efiles (ACMRD).                                                                                                |\n|                   \u003ca name=\"output_all_modified_files_count\"\u003e\u003c/a\u003e[all\\_modified\\_files\\_count](#output_all_modified_files_count)                   | string |                                                                                                                                       Returns the number of `all_modified_files`                                                                                                                                        |\n|                 \u003ca name=\"output_all_old_new_renamed_files\"\u003e\u003c/a\u003e[all\\_old\\_new\\_renamed\\_files](#output_all_old_new_renamed_files)                  | string | Returns only files that are \u003cbr\u003eRenamed and lists their old \u003cbr\u003eand new names. **NOTE:** This \u003cbr\u003erequires setting `include_all_old_new_renamed_files` to `true`. \u003cbr\u003eAlso, keep in mind that \u003cbr\u003ethis output is global and \u003cbr\u003ewouldn't be nested in outputs \u003cbr\u003egenerated when the `*_yaml_*` input \u003cbr\u003eis used. (R)  |\n|        \u003ca name=\"output_all_old_new_renamed_files_count\"\u003e\u003c/a\u003e[all\\_old\\_new\\_renamed\\_files\\_count](#output_all_old_new_renamed_files_count)         | string |                                                                                                                                    Returns the number of `all_old_new_renamed_files`                                                                                                                                    |\n|                                      \u003ca name=\"output_any_changed\"\u003e\u003c/a\u003e[any\\_changed](#output_any_changed)                                       | string |                      Returns `true` when any of \u003cbr\u003ethe filenames provided using the \u003cbr\u003e`files*` or `files_ignore*` inputs have changed. This \u003cbr\u003edefaults to `true` when no \u003cbr\u003epatterns are specified. i.e. *includes a combination of all added, copied, modified and renamed files (ACMR)*.                        |\n|                                      \u003ca name=\"output_any_deleted\"\u003e\u003c/a\u003e[any\\_deleted](#output_any_deleted)                                       | string |                                                             Returns `true` when any of \u003cbr\u003ethe filenames provided using the \u003cbr\u003e`files*` or `files_ignore*` inputs have been deleted. \u003cbr\u003eThis defaults to `true` when \u003cbr\u003eno patterns are specified. (D)                                                               |\n|                                     \u003ca name=\"output_any_modified\"\u003e\u003c/a\u003e[any\\_modified](#output_any_modified)                                     | string |            Returns `true` when any of \u003cbr\u003ethe filenames provided using the \u003cbr\u003e`files*` or `files_ignore*` inputs have been modified. \u003cbr\u003eThis defaults to `true` when \u003cbr\u003eno patterns are specified. i.e. \u003cbr\u003e*includes a combination of all added, copied, modified, renamed, and deleted files (ACMRD)*.             |\n|                                     \u003ca name=\"output_changed_keys\"\u003e\u003c/a\u003e[changed\\_keys](#output_changed_keys)                                     | string |                                                                Returns all changed YAML keys \u003cbr\u003ewhen the `files_yaml` input is \u003cbr\u003eused. i.e. key that contains \u003cbr\u003eany path that has either \u003cbr\u003ebeen added, copied, modified, and \u003cbr\u003erenamed (ACMR)                                                                  |\n|                                     \u003ca name=\"output_copied_files\"\u003e\u003c/a\u003e[copied\\_files](#output_copied_files)                                     | string |                                                                                                                                      Returns only files that are \u003cbr\u003eCopied (C).                                                                                                                                        |\n|                            \u003ca name=\"output_copied_files_count\"\u003e\u003c/a\u003e[copied\\_files\\_count](#output_copied_files_count)                            | string |                                                                                                                                          Returns the number of `copied_files`                                                                                                                                           |\n|                                   \u003ca name=\"output_deleted_files\"\u003e\u003c/a\u003e[deleted\\_files](#output_deleted_files)                                    | string |                                                                                                                                      Returns only files that are \u003cbr\u003eDeleted (D).                                                                                                                                       |\n|                          \u003ca name=\"output_deleted_files_count\"\u003e\u003c/a\u003e[deleted\\_files\\_count](#output_deleted_files_count)                           | string |                                                                                                                                          Returns the number of `deleted_files`                                                                                                                                          |\n|                                  \u003ca name=\"output_modified_files\"\u003e\u003c/a\u003e[modified\\_files](#output_modified_files)                                  | string |                                                                                                                                     Returns only files that are \u003cbr\u003eModified (M).                                                                                                                                       |\n|                         \u003ca name=\"output_modified_files_count\"\u003e\u003c/a\u003e[modified\\_files\\_count](#output_modified_files_count)                         | string |                                                                                                                                         Returns the number of `modified_files`                                                                                                                                          |\n|                                   \u003ca name=\"output_modified_keys\"\u003e\u003c/a\u003e[modified\\_keys](#output_modified_keys)                                    | string |                                                               Returns all modified YAML keys \u003cbr\u003ewhen the `files_yaml` input is \u003cbr\u003eused. i.e. key that contains \u003cbr\u003eany path that has either \u003cbr\u003ebeen added, copied, modified, and \u003cbr\u003edeleted (ACMRD)                                                                 |\n|                                     \u003ca name=\"output_only_changed\"\u003e\u003c/a\u003e[only\\_changed](#output_only_changed)                                     | string |                                                           Returns `true` when only files \u003cbr\u003eprovided using the `files*` or `files_ignore*` inputs \u003cbr\u003ehave changed. i.e. *includes a combination of all added, copied, modified and renamed files (ACMR)*.                                                             |\n|                                     \u003ca name=\"output_only_deleted\"\u003e\u003c/a\u003e[only\\_deleted](#output_only_deleted)                                     | string |                                                                                                  Returns `true` when only files \u003cbr\u003eprovided using the `files*` or `files_ignore*` inputs \u003cbr\u003ehave been deleted. (D)                                                                                                    |\n|                                   \u003ca name=\"output_only_modified\"\u003e\u003c/a\u003e[only\\_modified](#output_only_modified)                                    | string |                                                                                               Returns `true` when only files \u003cbr\u003eprovided using the `files*` or `files_ignore*` inputs \u003cbr\u003ehave been modified. (ACMRD).                                                                                                 |\n|                          \u003ca name=\"output_other_changed_files\"\u003e\u003c/a\u003e[other\\_changed\\_files](#output_other_changed_files)                           | string |                                                                           Returns all other changed files \u003cbr\u003enot listed in the files \u003cbr\u003einput i.e. includes a combination \u003cbr\u003eof all added, copied, modified \u003cbr\u003eand renamed files (ACMR).                                                                            |\n|                 \u003ca name=\"output_other_changed_files_count\"\u003e\u003c/a\u003e[other\\_changed\\_files\\_count](#output_other_changed_files_count)                  | string |                                                                                                                                       Returns the number of `other_changed_files`                                                                                                                                       |\n|                          \u003ca name=\"output_other_deleted_files\"\u003e\u003c/a\u003e[other\\_deleted\\_files](#output_other_deleted_files)                           | string |                                                                                                 Returns all other deleted files \u003cbr\u003enot listed in the files \u003cbr\u003einput i.e. a combination of \u003cbr\u003eall deleted files (D)                                                                                                   |\n|                 \u003ca name=\"output_other_deleted_files_count\"\u003e\u003c/a\u003e[other\\_deleted\\_files\\_count](#output_other_deleted_files_count)                  | string |                                                                                                                                       Returns the number of `other_deleted_files`                                                                                                                                       |\n|                         \u003ca name=\"output_other_modified_files\"\u003e\u003c/a\u003e[other\\_modified\\_files](#output_other_modified_files)                         | string |                                                                              Returns all other modified files \u003cbr\u003enot listed in the files \u003cbr\u003einput i.e. a combination of \u003cbr\u003eall added, copied, modified, and \u003cbr\u003edeleted files (ACMRD)                                                                                |\n|                \u003ca name=\"output_other_modified_files_count\"\u003e\u003c/a\u003e[other\\_modified\\_files\\_count](#output_other_modified_files_count)                | string |                                                                                                                                      Returns the number of `other_modified_files`                                                                                                                                       |\n|                                   \u003ca name=\"output_renamed_files\"\u003e\u003c/a\u003e[renamed\\_files](#output_renamed_files)                                    | string |                                                                                                                                      Returns only files that are \u003cbr\u003eRenamed (R).                                                                                                                                       |\n|                          \u003ca name=\"output_renamed_files_count\"\u003e\u003c/a\u003e[renamed\\_files\\_count](#output_renamed_files_count)                           | string |                                                                                                                                          Returns the number of `renamed_files`                                                                                                                                          |\n|                            \u003ca name=\"output_type_changed_files\"\u003e\u003c/a\u003e[type\\_changed\\_files](#output_type_changed_files)                            | string |                                                                                                                             Returns only files that have \u003cbr\u003etheir file type changed (T).                                                                                                                               |\n|                   \u003ca name=\"output_type_changed_files_count\"\u003e\u003c/a\u003e[type\\_changed\\_files\\_count](#output_type_changed_files_count)                   | string |                                                                                                                                       Returns the number of `type_changed_files`                                                                                                                                        |\n|                                   \u003ca name=\"output_unknown_files\"\u003e\u003c/a\u003e[unknown\\_files](#output_unknown_files)                                    | string |                                                                                                                                      Returns only files that are \u003cbr\u003eUnknown (X).                                                                                                                                       |\n|                          \u003ca name=\"output_unknown_files_count\"\u003e\u003c/a\u003e[unknown\\_files\\_count](#output_unknown_files_count)                           | string |                                                                                                                                          Returns the number of `unknown_files`                                                                                                                                          |\n|                                  \u003ca name=\"output_unmerged_files\"\u003e\u003c/a\u003e[unmerged\\_files](#output_unmerged_files)                                  | string |                                                                                                                                     Returns only files that are \u003cbr\u003eUnmerged (U).                                                                                                                                       |\n|                         \u003ca name=\"output_unmerged_files_count\"\u003e\u003c/a\u003e[unmerged\\_files\\_count](#output_unmerged_files_count)                         | string |                                                                                                                                         Returns the number of `unmerged_files`                                                                                                                                          |\n\n\u003c!-- AUTO-DOC-OUTPUT:END --\u003e\n\n## Versioning 🏷️\n\nThis GitHub Action follows the principles of [Semantic Versioning](https://semver.org) for versioning releases.\n\nThe format of the version string is as follows:\n\n*   major: indicates significant changes or new features that may not be backward compatible.\n\n*   minor: indicates minor changes or new features that are backward compatible.\n\n*   patch: indicates bug fixes or other small changes that are backward compatible.\n\n## Examples 📄\n\n\u003cdetails\u003e\n\u003csummary\u003eGet all changed files in the current branch\u003c/summary\u003e\n\n```yaml\n...\n    - name: Get changed files\n      id: changed-files\n      uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n...\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGet all changed files without escaping unsafe filename characters\u003c/summary\u003e\n\n```yaml\n...\n    - name: Get changed files\n      id: changed-files\n      uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n      with:\n        safe_output: false # set to false because we are using an environment variable to store the output and avoid command injection.\n\n    - name: List all added files\n      env:\n        ADDED_FILES: ${{ steps.changed-files.outputs.added_files }}\n      run: |\n        for file in ${ADDED_FILES}; do\n          echo \"$file was added\"\n        done\n...\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGet all changed files and use a comma separator\u003c/summary\u003e\n\n```yaml\n...\n    - name: Get all changed files and use a comma separator in the output\n      id: changed-files\n      uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n      with:\n        separator: \",\"\n...\n```\n\nSee [inputs](#inputs) for more information.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e Get all changed files and list all added files\u003c/summary\u003e\n\n```yaml\n...\n    - name: Get changed files\n      id: changed-files\n      uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n\n    - name: List all added files\n      env:\n        ADDED_FILES: ${{ steps.changed-files.outputs.added_files }}\n      run: |\n        for file in ${ADDED_FILES}; do\n          echo \"$file was added\"\n        done\n...\n```\n\nSee [outputs](#outputs) for a list of all available outputs.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGet all changed files and optionally run a step if a file was modified\u003c/summary\u003e\n\n```yaml\n...\n    - name: Get changed files\n      id: changed-files\n      uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n\n    - name: Run a step if my-file.txt was modified\n      if: contains(steps.changed-files.outputs.modified_files, 'my-file.txt')\n      run: |\n        echo \"my-file.txt file has been modified.\"\n...\n```\n\nSee [outputs](#outputs) for a list of all available outputs.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGet all changed files and write the outputs to a txt file\u003c/summary\u003e\n\n```yaml\n...\n\n   - name: Get changed files and write the outputs to a Txt file\n     id: changed-files-write-output-files-txt\n     uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n     with:\n       write_output_files: true\n\n   - name: Verify the contents of the .github/outputs/added_files.txt file\n     run: |\n       cat .github/outputs/added_files.txt\n...\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGet all changed files and write the outputs to a json file\u003c/summary\u003e\n\n```yaml\n...\n   - name: Get changed files and write the outputs to a JSON file\n     id: changed-files-write-output-files-json\n     uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n     with:\n       json: true\n       write_output_files: true\n\n   - name: Verify the contents of the .github/outputs/added_files.json file\n     run: |\n       cat .github/outputs/added_files.json\n...\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGet all changed files using a list of files\u003c/summary\u003e\n\n```yaml\n...\n    - name: Get changed files\n      id: changed-files\n      uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n      with:\n        files: |\n          my-file.txt\n          *.sh\n          *.png\n          !*.md\n          test_directory/**\n          **/*.sql\n...\n```\n\nSee [inputs](#inputs) for more information.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGet all changed files using a list of files and take action based on the changes\u003c/summary\u003e\n\n```yaml\n...\n    - name: Get changed files\n      id: changed-files-specific\n      uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n      with:\n        files: |\n          my-file.txt\n          *.sh\n          *.png\n          !*.md\n          test_directory/**\n          **/*.sql\n\n    - name: Run step if any of the listed files above change\n      if: steps.changed-files-specific.outputs.any_changed == 'true'\n      run: |\n        echo \"One or more files listed above has changed.\"\n\n    - name: Run step if only the files listed above change\n      if: steps.changed-files-specific.outputs.only_changed == 'true'\n      run: |\n        echo \"Only files listed above have changed.\"\n\n    - name: Run step if any of the listed files above is deleted\n      if: steps.changed-files-specific.outputs.any_deleted == 'true'\n      env:\n        DELETED_FILES: ${{ steps.changed-files-specific.outputs.deleted_files }}\n      run: |\n        for file in ${DELETED_FILES}; do\n          echo \"$file was deleted\"\n        done\n\n    - name: Run step if all listed files above have been deleted\n      if: steps.changed-files-specific.outputs.only_deleted == 'true'\n      env:\n        DELETED_FILES: ${{ steps.changed-files-specific.outputs.deleted_files }}\n      run: |\n        for file in ${DELETED_FILES}; do\n          echo \"$file was deleted\"\n        done\n...\n```\n\nSee [outputs](#outputs) for a list of all available outputs.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGet all changed files using a source file or list of file(s) to populate to files input\u003c/summary\u003e\n\n```yaml\n...\n    - name: Get changed files using a source file or list of file(s) to populate to files input.\n      id: changed-files-specific-source-file\n      uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n      with:\n        files_from_source_file: test/changed-files-list.txt\n...\n```\n\nSee [inputs](#inputs) for more information.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGet changed files using a source file or list of file(s) to populate to files input and optionally specify more files\u003c/summary\u003e\n\n```yaml\n...\n    - name: Get changed files using a source file or list of file(s) to populate to files input and optionally specify more files.\n      id: changed-files-specific-source-file-and-specify-files\n      uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n      with:\n        files_from_source_file: |\n          test/changed-files-list.txt\n        files: |\n          test.txt\n...\n```\n\nSee [inputs](#inputs) for more information.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003eGet all changed files using a different SHA\u003c/summary\u003e\n\n```yaml\n...\n    - name: Get changed files using a different SHA\n      id: changed-files\n      uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n      with:\n        sha: ${{ github.event.pull_request.head.sha }}\n...\n```\n\nSee [inputs](#inputs) for more information.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGet all changed files using a different base SHA\u003c/summary\u003e\n\n```yaml\n...\n    - name: Get changed files using a different base SHA\n      id: changed-files\n      uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n      with:\n        base_sha: ${{ github.event.pull_request.base.sha }}\n...\n```\n\nSee [inputs](#inputs) for more information.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGet all changed files between the previous tag and the current tag\u003c/summary\u003e\n\n```yaml\n...\non:\n  push:\n    tags:\n      - 'v*'\n\njobs:\n  release:\n    name: Release\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n\n      - name: Get changed files\n        id: changed-files\n        uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n\n      - name: List changed files\n        env:\n          ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}\n        run: |\n          echo \"List all the files that have changed: $ALL_CHANGED_FILES\"\n\n      - name: Get changed files in the .github folder\n        id: changed-files-specific\n        uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n        with:\n          files: .github/**\n\n      - name: Run step if any file(s) in the .github folder change\n        if: steps.changed-files-specific.outputs.any_changed == 'true'\n        env:\n          ALL_CHANGED_FILES: ${{ steps.changed-files-specific.outputs.all_changed_files }}\n        run: |\n          echo \"One or more files in the .github folder has changed.\"\n          echo \"List all the files that have changed: $ALL_CHANGED_FILES\"\n...\n```\n\nSee [inputs](#inputs) for more information.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGet all changed files for a repository located in a different path\u003c/summary\u003e\n\n```yaml\n...\n    - name: Checkout into dir1\n      uses: actions/checkout@v4\n      with:\n        fetch-depth: 0\n        path: dir1\n\n    - name: Run changed-files with defaults in dir1\n      id: changed-files-for-dir1\n      uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n      with:\n        path: dir1\n\n    - name: List all added files in dir1\n      env:\n        ADDED_FILES: ${{ steps.changed-files-for-dir1.outputs.added_files }}\n      run: |\n        for file in ${ADDED_FILES}; do\n          echo \"$file was added\"\n        done\n...\n```\n\nSee [inputs](#inputs) for more information.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGet all changed files with non-äšćįí characters i.e (Filename in other languages)\u003c/summary\u003e\n\n```yaml\n...\n    - name: Run changed-files with quotepath disabled\n      id: changed-files-quotepath\n      uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n      with:\n        quotepath: \"false\"\n\n    - name: Run changed-files with quotepath disabled for a specified list of file(s)\n      id: changed-files-quotepath-specific\n      uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n      with:\n        files: test/test-è.txt\n        quotepath: \"false\"\n...\n```\n\nSee [inputs](#inputs) for more information.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGet all changed files using the last successful commit of the base branch\u003c/summary\u003e\n\n\u003cul\u003e\n    \u003cli\u003e\n        \u003cdetails\u003e\n        \u003csummary\u003ePush event\u003c/summary\u003e\n\n```yaml\n...\n      - name: Get branch name\n        id: branch-name\n        uses: tj-actions/branch-names@v6\n\n      - uses: nrwl/nx-set-shas@v3\n        id: last_successful_commit_push\n        with:\n          main-branch-name: ${{ steps.branch-name.outputs.current_branch }} # Get the last successful commit for the current branch.\n          workflow-id: 'test.yml'\n\n      - name: Run changed-files with the commit of the last successful test workflow run\n        id: changed-files-base-sha-push\n        uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n        with:\n          base_sha: ${{ steps.last_successful_commit_push.outputs.base }}\n...\n```\n\n\u003c/details\u003e\n\u003c/li\u003e\n\n\u003cli\u003e\n\u003cdetails\u003e\n\u003csummary\u003ePull request events \u003c/summary\u003e\n\n```yaml\n...\n      - name: Get branch name\n        id: branch-name\n        uses: tj-actions/branch-names@v5\n\n      - uses: nrwl/nx-set-shas@v3\n        id: last_successful_commit_pull_request\n        with:\n          main-branch-name: ${{ steps.branch-name.outputs.base_ref_branch }} # Get the last successful commit on the master or main branch\n          workflow_id: 'test.yml'\n\n      - name: Run changed-files with the commit of the last successful test workflow run on the main branch\n        id: changed-files-base-sha-pull-request\n        uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n        with:\n          base_sha: ${{ steps.last_successful_commit_pull_request.outputs.base }}\n...\n```\n\n\u003c/details\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003e **Warning**\n\u003e\n\u003e This setting overrides the commit sha used by setting `since_last_remote_commit` to true.\n\u003e It is recommended to use either solution that works for your use case.\n\nSee [inputs](#inputs) for more information.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGet all changed files but only return the directory names\u003c/summary\u003e\n\n```yaml\n...\n    - name: Run changed-files with dir_names\n      id: changed-files-dir-names\n      uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n      with:\n        dir_names: \"true\"\n...\n```\n\nSee [inputs](#inputs) for more information.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGet all changed files and return JSON formatted outputs\u003c/summary\u003e\n\n```yaml\n...\n    - name: Run changed-files with JSON output\n      id: changed-files-json\n      uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n      with:\n        json: \"true\"\n...\n```\n\nSee [inputs](#inputs) for more information.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGet all changed files by commits pushed in the past\u003c/summary\u003e\n\n```yaml\n...\n    - name: Get changed-files since 2022-08-19\n      id: changed-files-since\n      uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n      with:\n        since: \"2022-08-19\"\n\n    - name: Get changed-files until 2022-08-20\n      id: changed-files-until\n      uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46\n      with:\n        until: \"2022-08-20\"\n...\n```\n\nSee [inputs](#inputs) for more information.\n\n\u003c/details\u003e\n\n## Real-world usage 🌐\n\n### Open source projects 📦\n\n*   [vitejs/vite: uses tj-actions/changed-files to automate testing](https://github.com/vitejs/vite/blob/8da04227d6f818a8ad9efc0056101968037c2e36/.github/workflows/ci.yml#L61)\n\n*   [qgis/QGIS: uses tj-actions/changed-files to automate spell checking](https://github.com/qgis/QGIS/blob/a5333497e90ac9de4ca70463d8e0b64c3f294d63/.github/workflows/code_layout.yml#L147)\n\n*   [tldr-pages/tldr: uses tj-actions/changed-files to automate detecting spelling errors](https://github.com/tldr-pages/tldr/blob/c1b714c55cb0048037b79a681a10d7f3ddb0164c/.github/workflows/codespell.yml#L18-L26)\n\n*   [nodejs/docker-node: uses tj-actions/changed-files to generate matrix jobs based on changes detected](https://github.com/nodejs/docker-node/blob/3c4fa6daf06a4786d202f2f610351837806a0380/.github/workflows/build-test.yml#L29)\n\n*   [aws-doc-sdk-examples: uses tj-actions/changed-files to automate testing](https://github.com/awsdocs/aws-doc-sdk-examples/blob/2393723ef6b0cad9502f4852f5c72f7be58ca89d/.github/workflows/javascript.yml#L22)\n\n*   [nhost: uses tj-actions/changed-files to automate testing based on changes detected](https://github.com/nhost/nhost/blob/71a8ce444618a8ac4d660518172fba4883c4014b/.github/workflows/ci.yaml#L44-L48)\n\n*   [qmk\\_firmware uses tj-actions/changed-files to run linters](https://github.com/qmk/qmk_firmware/blob/7a737235ffd49c32d2c5561e8fe53fd96baa7f96/.github/workflows/lint.yml#L30)\n\n*   [argo-cd uses tj-actions/changed-files to detect changed frontend or backend files](https://github.com/argoproj/argo-cd/blob/5bc1850aa1d26301043be9f2fb825d88c80c111c/.github/workflows/ci-build.yaml#L33)\n\n*   [argo-workflows uses tj-actions/changed-files to run specific jobs based on changes detected](https://github.com/argoproj/argo-workflows/blob/baef4856ff2603c76dbe277c825eaa3f9788fc91/.github/workflows/ci-build.yaml#L34)\n\nAnd many more...\n\n### Scalability Example 📈\n\n![image](https://github.com/tj-actions/changed-files/assets/17484350/23767413-4c51-42fb-ab1c-39ef72c44904)\n\n## Important Notice ⚠️\n\n\u003e \\[!IMPORTANT]\n\u003e\n\u003e *   Spaces in file names can introduce bugs when using bash loops. See: [#216](https://github.com/tj-actions/changed-files/issues/216)\n\u003e     However, this action will handle spaces in file names, with a recommendation of using a separator to prevent any hidden issues.\n\u003e\n\u003e     ![Screen Shot 2021-10-23 at 9 37 34 AM](https://user-images.githubusercontent.com/17484350/138558767-b13c90bf-a1ae-4e86-9520-70a6a4624f41.png)\n\n## Migration guide 🔄\n\nWith the switch from using grep's Extended regex to match files to the natively supported workflow glob pattern matching syntax introduced in [v13](https://github.com/tj-actions/changed-files/releases/tag/v13) you'll need to modify patterns used to match `files`.\n\n```diff\n...\n      - name: Get specific changed files\n        id: changed-files-specific\n        uses: tj-actions/changed-files@v24\n        with:\n          files: |\n-            \\.sh$\n-            .(sql|py)$\n-            ^(dir1|dir2)\n+            **/*.{sh,sql,py}\n+            {dir1,dir2}/**\n```\n\n*   Free software: [MIT license](LICENSE)\n\n## Credits 👏\n\nThis package was created with [cookiecutter-action](https://github.com/tj-actions/cookiecutter-action).\n\n*   [tj-actions/auto-doc](https://github.com/tj-actions/auto-doc)\n*   [tj-actions/verify-changed-files](https://github.com/tj-actions/verify-changed-files)\n*   [tj-actions/demo](https://github.com/tj-actions/demo)\n*   [tj-actions/demo2](https://github.com/tj-actions/demo2)\n*   [tj-actions/demo3](https://github.com/tj-actions/demo3)\n*   [tj-actions/release-tagger](https://github.com/tj-actions/release-tagger)\n\n## Report Bugs 🐛\n\nReport bugs at https://github.com/tj-actions/changed-files/issues.\n\nIf you are reporting a bug, please include:\n\n*   Your operating system name and version.\n*   All essential details about your workflow that might be helpful in troubleshooting. (**NOTE**: Ensure that you include full log outputs with debugging enabled)\n*   Detailed steps to reproduce the bug.\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\n\u003c!-- prettier-ignore-start --\u003e\n\n\u003c!-- markdownlint-disable --\u003e\n\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/jsoref\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/2119212?v=4?s=100\" width=\"100px;\" alt=\"Josh Soref\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJosh Soref\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=jsoref\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/monoxgas\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1223016?v=4?s=100\" width=\"100px;\" alt=\"Nick Landers\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eNick Landers\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=monoxgas\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Kras4ooo\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1948054?v=4?s=100\" width=\"100px;\" alt=\"Krasimir Nikolov\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKrasimir Nikolov\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=Kras4ooo\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=Kras4ooo\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/IvanPizhenko\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/11859904?v=4?s=100\" width=\"100px;\" alt=\"Ivan Pizhenko\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eIvan Pizhenko\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=IvanPizhenko\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=IvanPizhenko\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/talva-tr\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/82046981?v=4?s=100\" width=\"100px;\" alt=\"talva-tr\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003etalva-tr\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=talva-tr\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://bandism.net/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/22633385?v=4?s=100\" width=\"100px;\" alt=\"Ikko Ashimine\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eIkko Ashimine\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=eltociear\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Zamiell\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/5511220?v=4?s=100\" width=\"100px;\" alt=\"James\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJames\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=Zamiell\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/wushujames\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/677529?v=4?s=100\" width=\"100px;\" alt=\"James Cheng\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJames Cheng\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=wushujames\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://qiita.com/SUZUKI_Masaya\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/15100604?v=4?s=100\" width=\"100px;\" alt=\"Masaya Suzuki\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMasaya Suzuki\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=massongit\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://fagai.net\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1772112?v=4?s=100\" width=\"100px;\" alt=\"fagai\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003efagai\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=fagai\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/pkit\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/805654?v=4?s=100\" width=\"100px;\" alt=\"Constantine Peresypkin\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eConstantine Peresypkin\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=pkit\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/deronnax\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/439279?v=4?s=100\" width=\"100px;\" alt=\"Mathieu Dupuy\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMathieu Dupuy\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=deronnax\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/JoeOvo\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/100686542?v=4?s=100\" width=\"100px;\" alt=\"Joe Moggridge\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJoe Moggridge\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=JoeOvo\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://www.credly.com/users/thyarles/badges\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1340046?v=4?s=100\" width=\"100px;\" alt=\"Charles Santos\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eCharles Santos\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=thyarles\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/kostiantyn-korniienko-aurea\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/37180625?v=4?s=100\" width=\"100px;\" alt=\"Kostiantyn Korniienko\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKostiantyn Korniienko\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=kostiantyn-korniienko-aurea\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/lpulley\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/7193187?v=4?s=100\" width=\"100px;\" alt=\"Logan Pulley\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLogan Pulley\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=lpulley\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://www.linkedin.com/in/kenji-miyake/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/31987104?v=4?s=100\" width=\"100px;\" alt=\"Kenji Miyake\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKenji Miyake\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=kenji-miyake\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/adonisgarciac\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/71078987?v=4?s=100\" width=\"100px;\" alt=\"adonisgarciac\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eadonisgarciac\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=adonisgarciac\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=adonisgarciac\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/cfernhout\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/22294606?v=4?s=100\" width=\"100px;\" alt=\"Chiel Fernhout\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eChiel Fernhout\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=cfernhout\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/albertoperdomo2\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/62241095?v=4?s=100\" width=\"100px;\" alt=\"Alberto Perdomo\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAlberto Perdomo\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=albertoperdomo2\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://arthurvolant.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/37664438?v=4?s=100\" width=\"100px;\" alt=\"Arthur\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eArthur\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/issues?q=author%3AV0lantis\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=V0lantis\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/rodrigorfk\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1995033?v=4?s=100\" width=\"100px;\" alt=\"Rodrigo Fior Kuntzer\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRodrigo Fior Kuntzer\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=rodrigorfk\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=rodrigorfk\" title=\"Tests\"\u003e⚠️\u003c/a\u003e \u003ca href=\"https://github.com/tj-actions/changed-files/issues?q=author%3Arodrigorfk\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/levenleven\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/6463364?v=4?s=100\" width=\"100px;\" alt=\"Aleksey Levenstein\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAleksey Levenstein\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=levenleven\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/dan-hill2802\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/5046322?v=4?s=100\" width=\"100px;\" alt=\"Daniel Hill\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDaniel Hill\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=dan-hill2802\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://keisukeyamashita.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/23056537?v=4?s=100\" width=\"100px;\" alt=\"KeisukeYamashita\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKeisukeYamashita\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=KeisukeYamashita\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/codesculpture\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/63452117?v=4?s=100\" width=\"100px;\" alt=\"Aravind\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAravind\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=codesculpture\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/tj-actions/changed-files/issues?q=author%3Acodesculpture\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://lukaspfahler.de\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/2308119?v=4?s=100\" width=\"100px;\" alt=\"Lukas Pfahler\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLukas Pfahler\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=Whadup\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/RajendraP\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/8928165?v=4?s=100\" width=\"100px;\" alt=\"Rajendra Pandey\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRajendra Pandey\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=RajendraP\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://undefined.moe/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/29992205?v=4?s=100\" width=\"100px;\" alt=\"undefined\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eundefined\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-actions/changed-files/commits?author=undefined-moe\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","funding_links":["https://github.com/sponsors/jackton1","https://opencollective.com/tj-actions","https://www.buymeacoffee.com/jackton1"],"categories":["TypeScript","Shell","HarmonyOS","actions"],"sub_categories":["Windows Manager"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftj-actions%2Fchanged-files","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftj-actions%2Fchanged-files","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftj-actions%2Fchanged-files/lists"}