kong/Changed Files
Get all Added, Copied, Modified, Deleted, Renamed, Type changed, Unmerged, and Unknown files.
View on GitHubTrust Signals
- Scorecard Score
- not yet scored
- Maintenance Recency
- Activelast commit Mar 26, 2026
- License
- MIT
Pinned Snippet
uses: kong/changed-files@cd69b79ca4e2a1198064c5e6564cce68920df311 # no releases — HEAD as of 2026-07-11tags can be moved; commit SHAs can't. why a SHA?
Inputs
| name | description | required | default |
|---|---|---|---|
| separator | Split character for output strings. | no | "" |
| include_all_old_new_renamed_files | Include `all_old_new_renamed_files` output. Note this can generate a large output See: #501. | no | false |
| old_new_separator | Split character for old and new filename pairs. | no | , |
| old_new_files_separator | Split character for old and new renamed filename pairs. | no | "" |
| files_from_source_file | Source file(s) used to populate the `files` input. | no | "" |
| files_from_source_file_separator | Separator used to split the `files_from_source_file` input. | no | "" |
| files | File and directory patterns used to detect changes (Defaults to the entire repo if unset). NOTE: Multiline file/directory patterns should not include quotes. | no | "" |
| files_separator | Separator used to split the `files` input | no | "" |
| files_yaml | YAML used to define a set of file patterns to detect changes | no | "" |
| files_yaml_from_source_file | Source file(s) used to populate the `files_yaml` input. Example: https://github.com/tj-actions/changed-files/blob/main/test/changed-files.yml | no | "" |
| files_yaml_from_source_file_separator | Separator used to split the `files_yaml_from_source_file` input | no | "" |
| files_ignore_yaml | YAML used to define a set of file patterns to ignore changes | no | "" |
| files_ignore_yaml_from_source_file | Source file(s) used to populate the `files_ignore_yaml` input. Example: https://github.com/tj-actions/changed-files/blob/main/test/changed-files.yml | no | "" |
| files_ignore_yaml_from_source_file_separator | Separator used to split the `files_ignore_yaml_from_source_file` input | no | "" |
| files_ignore | Ignore changes to these file(s). NOTE: Multiline file/directory patterns should not include quotes. | no | "" |
| files_ignore_separator | Separator used to split the `files_ignore` input | no | "" |
| files_ignore_from_source_file | Source file(s) used to populate the `files_ignore` input | no | "" |
| files_ignore_from_source_file_separator | Separator used to split the `files_ignore_from_source_file` input | no | "" |
| sha | Specify a different commit SHA or branch used for comparing changes | no | — |
| base_sha | Specify a different base commit SHA or branch used for comparing changes | no | — |
| since | Get changed files for commits whose timestamp is older than the given time. | no | "" |
| until | Get changed files for commits whose timestamp is earlier than the given time. | no | "" |
| path | Specify a relative path under `$GITHUB_WORKSPACE` to locate the repository. | no | . |
| quotepath | Use non-ASCII characters to match files and output the filenames completely verbatim by setting this to `false` | no | true |
| diff_relative | Exclude changes outside the current directory and show path names relative to it. NOTE: This requires you to specify the top-level directory via the `path` input. | no | true |
| dir_names | Output unique changed directories instead of filenames. NOTE: This returns `.` for changed files located in the current working directory which defaults to `$GITHUB_WORKSPACE`. | no | false |
| dir_names_max_depth | Limit the directory output to a maximum depth e.g `test/test1/test2` with max depth of `2` returns `test/test1`. | no | — |
| dir_names_exclude_current_dir | Exclude the current directory represented by `.` from the output when `dir_names` is set to `true`. | no | false |
| dir_names_include_files | File and directory patterns to include in the output when `dir_names` is set to `true`. NOTE: This returns only the matching files and also the directory names. | no | "" |
| dir_names_include_files_separator | Separator used to split the `dir_names_include_files` input | no | "" |
| dir_names_deleted_files_include_only_deleted_dirs | Include only directories that have been deleted as opposed to directory names of files that have been deleted in the `deleted_files` output when `dir_names` is set to `true`. | no | false |
| json | Output list of changed files in a JSON formatted string which can be used for matrix jobs. Example: https://github.com/tj-actions/changed-files/blob/main/.github/workflows/matrix-example.yml | no | false |
| escape_json | Escape JSON output. | no | true |
| safe_output | Apply sanitization to output filenames before being set as output. | no | true |
| fetch_depth | Depth of additional branch history fetched. NOTE: This can be adjusted to resolve errors with insufficient history. | no | 25 |
| skip_initial_fetch | Skip initially fetching additional history to improve performance for shallow repositories. NOTE: This could lead to errors with missing history. It's intended to be used when you've fetched all necessary history to perform the diff. | no | false |
| fetch_additional_submodule_history | Fetch additional history for submodules. | no | false |
| since_last_remote_commit | Use the last commit on the remote branch as the `base_sha`. Defaults to the last non-merge commit on the target branch for pull request events and the previous remote commit of the current branch for push events. | no | false |
| write_output_files | Write outputs to the `output_dir` defaults to `.github/outputs` folder. NOTE: This creates a `.txt` file by default and a `.json` file if `json` is set to `true`. | no | false |
| output_dir | Directory to store output files. | no | .github/outputs |
| output_renamed_files_as_deleted_and_added | Output renamed files as deleted and added files. | no | false |
| recover_deleted_files | Recover deleted files. | no | false |
| recover_deleted_files_to_destination | Recover deleted files to a new destination directory, defaults to the original location. | no | "" |
| recover_files | File and directory patterns used to recover deleted files, defaults to the patterns provided via the `files`, `files_from_source_file`, `files_ignore` and `files_ignore_from_source_file` inputs or all deleted files if no patterns are provided. | no | "" |
| recover_files_separator | Separator used to split the `recover_files` input | no | "" |
| recover_files_ignore | File and directory patterns to ignore when recovering deleted files. | no | "" |
| recover_files_ignore_separator | Separator used to split the `recover_files_ignore` input | no | "" |
| token | GitHub token used to fetch changed files from Github's API. | no | ${{ github.token }} |
| api_url | Github API URL. | no | ${{ github.api_url }} |
| use_rest_api | Force the use of Github's REST API even when a local copy of the repository exists | no | false |
| fail_on_initial_diff_error | Fail when the initial diff fails. | no | false |
| fail_on_submodule_diff_error | Fail when the submodule diff fails. | no | false |
| negation_patterns_first | Apply the negation patterns first. NOTE: This affects how changed files are matched. | no | false |
| matrix | Output changed files in a format that can be used for matrix jobs. Alias for setting inputs `json` to `true` and `escape_json` to `false`. | no | false |
| exclude_submodules | Exclude changes to submodules. | no | false |
| exclude_symlinks | Exclude symlinks from changed files. | no | false |
| skip_same_sha | Do not fail when base and head SHAs are identical. | no | false |
| fetch_missing_history_max_retries | Maximum number of retries to fetch missing history. | no | 20 |
| use_posix_path_separator | Use POSIX path separator `/` for output file paths on Windows. | no | false |
| tags_pattern | Tags pattern to include. | no | * |
| tags_ignore_pattern | Tags pattern to ignore. | no | "" |
Outputs
| name | description |
|---|---|
| added_files | Returns only files that are Added (A). |
| added_files_count | Returns the number of `added_files` |
| any_added | Returns `true` when any of the filenames provided using the `files*` or `files_ignore*` inputs have been added. |
| copied_files | Returns only files that are Copied (C). |
| copied_files_count | Returns the number of `copied_files` |
| deleted_files | Returns only files that are Deleted (D). |
| deleted_files_count | Returns the number of `deleted_files` |
| modified_files | Returns only files that are Modified (M). |
| modified_files_count | Returns the number of `modified_files` |
| renamed_files | Returns only files that are Renamed (R). |
| renamed_files_count | Returns the number of `renamed_files` |
| all_old_new_renamed_files | Returns only files that are Renamed and lists their old and new names. **NOTE:** This requires setting `include_all_old_new_renamed_files` to `true`. Also, keep in mind that this output is global and wouldn't be nested in outputs generated when the `*_yaml_*` input is used. (R) |
| all_old_new_renamed_files_count | Returns the number of `all_old_new_renamed_files` |
| type_changed_files | Returns only files that have their file type changed (T). |
| type_changed_files_count | Returns the number of `type_changed_files` |
| unmerged_files | Returns only files that are Unmerged (U). |
| unmerged_files_count | Returns the number of `unmerged_files` |
| unknown_files | Returns only files that are Unknown (X). |
| unknown_files_count | Returns the number of `unknown_files` |
| all_changed_and_modified_files | Returns all changed and modified files i.e. a combination of (ACMRDTUX) |
| all_changed_and_modified_files_count | Returns the number of `all_changed_and_modified_files` |
| all_changed_files | Returns all changed files i.e. a combination of all added, copied, modified and renamed files (ACMR) |
| all_changed_files_count | Returns the number of `all_changed_files` |
| any_changed | Returns `true` when any of the filenames provided using the `files*` or `files_ignore*` inputs have changed. This defaults to `true` when no patterns are specified. i.e. *includes a combination of all added, copied, modified and renamed files (ACMR)*. |
| only_changed | Returns `true` when only files provided using the `files*` or `files_ignore*` inputs have changed. i.e. *includes a combination of all added, copied, modified and renamed files (ACMR)*. |
| other_changed_files | Returns all other changed files not listed in the files input i.e. includes a combination of all added, copied, modified and renamed files (ACMR). |
| other_changed_files_count | Returns the number of `other_changed_files` |
| all_modified_files | Returns all changed files i.e. a combination of all added, copied, modified, renamed and deleted files (ACMRD). |
| all_modified_files_count | Returns the number of `all_modified_files` |
| any_modified | Returns `true` when any of the filenames provided using the `files*` or `files_ignore*` inputs have been modified. This defaults to `true` when no patterns are specified. i.e. *includes a combination of all added, copied, modified, renamed, and deleted files (ACMRD)*. |
| only_modified | Returns `true` when only files provided using the `files*` or `files_ignore*` inputs have been modified. (ACMRD). |
| other_modified_files | Returns all other modified files not listed in the files input i.e. a combination of all added, copied, modified, and deleted files (ACMRD) |
| other_modified_files_count | Returns the number of `other_modified_files` |
| any_deleted | Returns `true` when any of the filenames provided using the `files*` or `files_ignore*` inputs have been deleted. This defaults to `true` when no patterns are specified. (D) |
| only_deleted | Returns `true` when only files provided using the `files*` or `files_ignore*` inputs have been deleted. (D) |
| other_deleted_files | Returns all other deleted files not listed in the files input i.e. a combination of all deleted files (D) |
| other_deleted_files_count | Returns the number of `other_deleted_files` |
| modified_keys | Returns all modified YAML keys when the `files_yaml` input is used. i.e. key that contains any path that has either been added, copied, modified, and deleted (ACMRD) |
| changed_keys | Returns all changed YAML keys when the `files_yaml` input is used. i.e. key that contains any path that has either been added, copied, modified, and renamed (ACMR) |