[![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) [![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) [![Public workflows that use this action.](https://img.shields.io/endpoint?url=https%3A%2F%2Fused-by.vercel.app%2Fapi%2Fgithub-actions%2Fused-by%3Faction%3Dtj-actions%2Fchanged-files%26badge%3Dtrue)](https://github.com/search?o=desc\&q=tj-actions+changed-files+language%3AYAML\&s=\&type=Code)
Retrieve all changed files and directories relative to the target branch (`pull_request*` based events) or the last remote commit (`push` or `pull_request*` based event) returning the **absolute path** to all changed files and directories from the project root.
* Using [Glob pattern](https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet) matching.
> * For files located in a sub-directory ensure that the pattern specified contains `**/` (globstar) to match any preceding directories or explicitly pass the full path relative to the project root. See: [#314](https://github.com/tj-actions/changed-files/issues/314).
> * All multiline inputs should not use double or single qoutes since the value is already a string seperated by a newline character. See [Examples](#examples) for more information.
| any\_changed | `string` | `true` OR `false` | Returns `true` when any <br/> of the filenames provided using <br/> the `files` input has changed. If no `files` have been specified,<br> an empty string `''` is returned. <br/> i.e. *using a combination of all added, <br />copied, modified and renamed files (ACMR)* |
| only\_changed | `string` | `true` OR `false` | Returns `true` when only <br/> files provided using <br/> the `files` input has changed. If no `files` have been specified,<br> an empty string `''` is returned. <br/> i.e. *using a combination of all added, <br />copied, modified and renamed files (ACMR)* |
| other\_changed\_files | `string` | `'new.txt path/to/file.png ...'` | Returns all other changed files <br/> not listed in the files input <br/> i.e. *using a combination of all added, <br />copied, modified and renamed files (ACMR)* |
| any\_modified | `string` | `true` OR `false` | Returns `true` when any <br/> of the filenames provided using <br/> the `files` input has been modified. If no `files` have been specified,<br> an empty string `''` is returned. <br/> i.e. *using a combination of all added, <br />copied, modified, renamed, and deleted files (ACMRD)* |
| only\_modified | `string` | `true` OR `false` | Returns `true` when only <br/> files provided using <br/> the `files` input has been modified. If no `files` have been specified,<br> an empty string `''` is returned.(ACMRD) |
| other\_modified\_files | `string` | `'new.txt path/to/file.png ...'` | Returns all other modified files <br/> not listed in the files input <br/> i.e. *a combination of all added, <br /> copied, modified, and deleted files (ACMRD)* |
| any\_deleted | `string` | `true` OR `false` | Returns `true` when any <br/> of the filenames provided using <br/> the `files` input has been deleted. If no `files` have been specified,<br> an empty string `''` is returned. (D) |
| only\_deleted | `string` | `true` OR `false` | Returns `true` when only <br/> files provided using <br/> the `files` input has been deleted. If no `files` have been specified,<br> an empty string `''` is returned. (D) |
| other\_deleted\_files | `string` | `'new.txt path/to/file.png ...'` | Returns all other deleted files <br/> not listed in the files input <br/> i.e. *a combination of all deleted files (D)* |
| all\_changed\_files | `string` | `'new.txt path/to/file.png ...'` | Returns all changed files <br/> i.e. *a combination of all added, <br />copied, modified and renamed files (ACMR)* |
| all\_modified\_files | `string` | `'new.txt path/to/file.png ...'` | Returns all changed files <br/> i.e. *a combination of all added, <br />copied, modified, renamed and deleted files (ACMRD)* |
| all\_changed\_and\_modified\_files | `string` | `'new.txt path/to/file.png ...'` | Returns all changed <br/> and modified files <br/> i.e. *a combination of (ACMRDTUX)* |
| all\_old\_new\_renamed\_files | `string` | `'old name.txt,new name.txt old name 2.txt,new name 2.txt...'` | Returns only files that are Renamed and list their old and new names. <br> NOTE: This requires setting `include_all_old_new_renamed_files` to `true` (R) |
| added\_files | `string` | `'new.txt path/to/file.png ...'` | Returns only files that are Added (A) |
| copied\_files | `string` | `'new.txt path/to/file.png ...'` | Returns only files that are Copied (C) |
| deleted\_files | `string` | `'new.txt path/to/file.png ...'` | Returns only files that are Deleted (D) |
| modified\_files | `string` | `'new.txt path/to/file.png ...'` | Returns only files that are Modified (M) |
| renamed\_files | `string` | `'new.txt path/to/file.png ...'` | Returns only files that are Renamed (R) |
| type\_changed\_files | `string` | `'new.txt path/to/file.png ...'` | Returns only files that have their file type changed (T) |
| unmerged\_files | `string` | `'new.txt path/to/file.png ...'` | Returns only files that are Unmerged (U) |
| unknown\_files | `string` | `'new.txt path/to/file.png ...'` | Returns only files that are Unknown (X) |
| separator | `string` | `false` | `' '` | Split character for output strings |
| include\_all\_old\_new\_renamed\_files | `boolean` | `false` | `false` | Include `all_old_new_renamed_files` output. Note this can generate a large output See: [#501](https://github.com/tj-actions/changed-files/issues/501). |
| old\_new\_separator | `string` | `false` | `','` | Split character for old and new filename pairs |
| old\_new\_files\_separator | `string` | `false` | `' '` | Split character for multiple old and new filename pairs |
| files | `string` OR `string[]` | `false` | | Check for changes <br> using only these <br> list of file(s) <br> (Defaults to the <br> entire repo) <br/>**NOTE:** Multiline file/directory patterns <br/> should not include qoutes. <br/> |
| files\_separator | `string` | `false` | `'\n'` | Separator used to split the<br>`files` input |
| files\_from\_source\_file | `string` | `false` | | Source file(s) <br> used to populate <br> the `files` input |
| files\_ignore | `string` | `false` | | Ignore changes to these file(s) <br/>**NOTE:** Multiline file/directory patterns <br/> should not include qoutes. <br/> |
| files\_ignore\_separator | `string` | `false` | `'\n'` | Separator used to split the <br>`files-ignore` input |
| files\_ignore\_from\_source\_file | `string` | `false` | | Source file(s) <br> used to populate <br> the `files_ignore` input |
| sha | `string` | `true` | `${{ github.sha }}` | Specify a different <br> commit SHA <br> used for <br> comparing changes |
| base\_sha | `string` | `false` | | Specify a different <br> base commit SHA <br> used for <br> comparing changes |
| path | `string` | `false` | `'.'` | Relative path under <br>`GITHUB_WORKSPACE`<br> to the repository |
| quotepath | `boolean` | `false` | `true` | Output filenames completely verbatim by setting this to `false` |
| diff\_relative | `boolean` | `false` | | Exclude changes outside the current directory and show pathnames relative to it. **NOTE:** This requires you to specify the top level directory via the `path` input. |
| dir\_names | `boolean` | `false` | `false` | Output unique changed directories instead of filenames. <br>**NOTE:** This returns `.` for <br> changed files located in the root of the project. |
| json | `boolean` | `false` | `false` | Output changed files in JSON format which can be used for [matrix jobs](https://github.com/tj-actions/changed-files/blob/main/.github/workflows/manual-matrix-test.yml). |
| since | `string` | `false` | | Get changed files for commits whose timestamp is older than the given time. |
| until | `string` | `false` | | Get changed files for commits whose timestamp is earlier than the given time. |
| target\_branch\_fetch\_depth | `string` | `false` | `20` | Limit fetching commits from the target branch to a specified number. **NOTE**: This can be adjusted to resolve errors with insufficient history. See: [#668](https://github.com/tj-actions/changed-files/issues/668). |