Compare commits
59 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
da093c1609 | ||
|
|
c634be959b | ||
|
|
2139fa1b6f | ||
|
|
6784c9e1ee | ||
|
|
607d5ddbbf | ||
|
|
d588360bfe | ||
|
|
90f2c0c1b1 | ||
|
|
0d6e9b7196 | ||
|
|
8f90cc165a | ||
|
|
75758bc65f | ||
|
|
066e72a5fb | ||
|
|
c23e564e67 | ||
|
|
c0080255e3 | ||
|
|
3a3d3a2b86 | ||
|
|
79ef9d3fee | ||
|
|
da4597ee22 | ||
|
|
9f4ec1c14f | ||
|
|
4da6e32cfe | ||
|
|
7f1c4cb6db | ||
|
|
939fbca781 | ||
|
|
9ba175ae24 | ||
|
|
f7779a6302 | ||
|
|
05bdc91228 | ||
|
|
6d07b6ee59 | ||
|
|
1cf54bb5d3 | ||
|
|
21b4a4bc7b | ||
|
|
658f397297 | ||
|
|
38a0c329bb | ||
|
|
b0be21b8df | ||
|
|
97825a1994 | ||
|
|
13189f9e52 | ||
|
|
2a9f067522 | ||
|
|
ad01f6fdba | ||
|
|
b082611680 | ||
|
|
a36c479373 | ||
|
|
90a4f2a326 | ||
|
|
41ff1f2249 | ||
|
|
b20ce84763 | ||
|
|
875213d4a9 | ||
|
|
71b57652f0 | ||
|
|
834b86247e | ||
|
|
d8d3669cb3 | ||
|
|
940b170a31 | ||
|
|
55b93d0734 | ||
|
|
25ef3926d1 | ||
|
|
4d33bd5f9c | ||
|
|
f25e47258b | ||
|
|
a3c4ccbde0 | ||
|
|
b114534101 | ||
|
|
303f064ba9 | ||
|
|
e981e53b7f | ||
|
|
d850ef91f7 | ||
|
|
8701b586f3 | ||
|
|
9b1ba9a603 | ||
|
|
18c8a4eceb | ||
|
|
892553a457 | ||
|
|
50a9cc9b7b | ||
|
|
c300d15dae | ||
|
|
c076064636 |
1
.github/workflows/greetings.yml
vendored
1
.github/workflows/greetings.yml
vendored
@@ -7,6 +7,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/first-interaction@v1
|
||||
continue-on-error: true
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
issue-message: "Thanks for reporting this issue, don't forget to star this project if you haven't already to help us reach a wider audience."
|
||||
|
||||
10
.github/workflows/matrix-test.yml
vendored
10
.github/workflows/matrix-test.yml
vendored
@@ -8,10 +8,10 @@ on:
|
||||
|
||||
jobs:
|
||||
changed-files:
|
||||
name: Get changes
|
||||
name: Get changed files
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
||||
matrix: ${{ steps.changed-files.outputs.all_changed_files }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
@@ -23,17 +23,17 @@ jobs:
|
||||
with:
|
||||
json: true
|
||||
quotepath: false
|
||||
escape_json: false
|
||||
- name: List all changed files
|
||||
run: echo '${{ steps.changed-files.outputs.all_changed_files }}'
|
||||
- id: set-matrix
|
||||
run: echo "matrix={\"files\":${{ steps.changed-files.outputs.all_changed_files }}}" >> "$GITHUB_OUTPUT"
|
||||
|
||||
matrix-job:
|
||||
name: Run Matrix Job
|
||||
runs-on: ubuntu-latest
|
||||
needs: [changed-files]
|
||||
strategy:
|
||||
matrix: ${{ fromJSON(needs.changed-files.outputs.matrix) }}
|
||||
matrix:
|
||||
files: ${{ fromJSON(needs.changed-files.outputs.matrix) }}
|
||||
max-parallel: 4
|
||||
fail-fast: false
|
||||
steps:
|
||||
|
||||
17
.github/workflows/test.yml
vendored
17
.github/workflows/test.yml
vendored
@@ -286,11 +286,15 @@ jobs:
|
||||
shell:
|
||||
bash
|
||||
|
||||
test-unset-github-output-env:
|
||||
name: Test unset GITHUB_OUTPUT env
|
||||
test-using-branch-names-for-base-sha-and-sha-inputs:
|
||||
name: Test using branch names for base_sha and sha inputs
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
if: needs.build.outputs.files_changed != 'true'
|
||||
if: |
|
||||
(
|
||||
github.event_name == 'push' ||
|
||||
github.event_name == 'pull_request'
|
||||
) && needs.build.outputs.files_changed != 'true'
|
||||
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
@@ -304,12 +308,11 @@ jobs:
|
||||
with:
|
||||
name: build-assets
|
||||
|
||||
- name: Run changed-files with unset GITHUB_OUTPUT env
|
||||
- name: Run changed-files with main as the base_sha
|
||||
id: changed-files
|
||||
continue-on-error: true
|
||||
uses: ./
|
||||
env:
|
||||
GITHUB_OUTPUT: ""
|
||||
with:
|
||||
base_sha: main
|
||||
|
||||
- name: Show output
|
||||
run: |
|
||||
|
||||
3
.github/workflows/update-readme.yml
vendored
3
.github/workflows/update-readme.yml
vendored
@@ -15,6 +15,9 @@ jobs:
|
||||
|
||||
- name: Run auto-doc
|
||||
uses: tj-actions/auto-doc@v3
|
||||
with:
|
||||
use_code_blocks: true
|
||||
use_major_version: true
|
||||
|
||||
- name: Run remark
|
||||
uses: tj-actions/remark@v3
|
||||
|
||||
67
HISTORY.md
67
HISTORY.md
@@ -1,5 +1,72 @@
|
||||
# Changelog
|
||||
|
||||
# [40.1.1](https://github.com/tj-actions/changed-files/compare/v40.1.0...v40.1.1) - (2023-11-08)
|
||||
|
||||
## <!-- 16 -->➕ Add
|
||||
|
||||
- Added missing changes and modified dist assets.
|
||||
([e981e53](https://github.com/tj-actions/changed-files/commit/e981e53b7faf4d2fbf8e077b7eec07ef0f7fa221)) - (GitHub Action)
|
||||
|
||||
## <!-- 7 -->⚙️ Miscellaneous Tasks
|
||||
|
||||
- **deps:** Update dependency @types/node to v20.9.0 ([25ef392](https://github.com/tj-actions/changed-files/commit/25ef3926d147cd02fc7e931c1ef50772bbb0d25d)) - (renovate[bot])
|
||||
- **deps:** Update dependency @types/lodash to v4.14.201 ([4d33bd5](https://github.com/tj-actions/changed-files/commit/4d33bd5f9cd03b7df1e544c3426cb9e63c52791e)) - (renovate[bot])
|
||||
- **deps:** Update dependency @types/micromatch to v4.0.5 ([f25e472](https://github.com/tj-actions/changed-files/commit/f25e47258b32eef5d87030d4f6eb9e20cd7349b0)) - (renovate[bot])
|
||||
- **deps:** Update dependency @types/uuid to v9.0.7 ([a3c4ccb](https://github.com/tj-actions/changed-files/commit/a3c4ccbde013ddc2eb4c788b5a7162fa72a1ad9b)) - (renovate[bot])
|
||||
- **deps:** Update dependency @types/jest to v29.5.8 ([b114534](https://github.com/tj-actions/changed-files/commit/b11453410196db60f4c2f6b84ae222a41ed17300)) - (renovate[bot])
|
||||
- **deps:** Update typescript-eslint monorepo to v6.10.0 ([303f064](https://github.com/tj-actions/changed-files/commit/303f064ba95d994742bfb189d37d5d0632a80222)) - (renovate[bot])
|
||||
- **deps:** Lock file maintenance ([d850ef9](https://github.com/tj-actions/changed-files/commit/d850ef91f77568044a20bbf67b57d1b74934f716)) - (renovate[bot])
|
||||
- **deps:** Update dependency eslint to v8.53.0 ([8701b58](https://github.com/tj-actions/changed-files/commit/8701b586f31d75024fe0fcb5eaddd30a7f4c0605)) - (renovate[bot])
|
||||
|
||||
## <!-- 9 -->⬆️ Upgrades
|
||||
|
||||
- Upgraded to v40.1.0 ([#1695](https://github.com/tj-actions/changed-files/issues/1695))
|
||||
|
||||
Co-authored-by: jackton1 <jackton1@users.noreply.github.com> ([9b1ba9a](https://github.com/tj-actions/changed-files/commit/9b1ba9a603ec6c53c7a4610ddf3e14bde70ab0ea)) - (tj-actions[bot])
|
||||
|
||||
# [40.1.0](https://github.com/tj-actions/changed-files/compare/v40.0.2...v40.1.0) - (2023-11-03)
|
||||
|
||||
## <!-- 0 -->🚀 Features
|
||||
|
||||
- Add support for controlling the pattern order ([#1693](https://github.com/tj-actions/changed-files/issues/1693)) ([892553a](https://github.com/tj-actions/changed-files/commit/892553a4576166fd647dbd90ffa4b589f563572b)) - (Tonye Jack)
|
||||
|
||||
## <!-- 1 -->🐛 Bug Fixes
|
||||
|
||||
- **deps:** Update dependency yaml to v2.3.4 ([c300d15](https://github.com/tj-actions/changed-files/commit/c300d15daea754419fb9f133c53d821f0f6c17ea)) - (renovate[bot])
|
||||
|
||||
## <!-- 16 -->➕ Add
|
||||
|
||||
- Added missing changes and modified dist assets.
|
||||
([50a9cc9](https://github.com/tj-actions/changed-files/commit/50a9cc9b7b170bd6aaf4fb94db5da1c223606572)) - (GitHub Action)
|
||||
|
||||
## <!-- 26 -->🔄 Update
|
||||
|
||||
- Updated README.md ([#1694](https://github.com/tj-actions/changed-files/issues/1694))
|
||||
|
||||
Co-authored-by: repo-ranger[bot] <repo-ranger[bot]@users.noreply.github.com> ([18c8a4e](https://github.com/tj-actions/changed-files/commit/18c8a4ecebe93d32ed8a88e1d0c098f5f68c221b)) - (tj-actions[bot])
|
||||
|
||||
## <!-- 9 -->⬆️ Upgrades
|
||||
|
||||
- Upgraded to v40.0.2 ([#1689](https://github.com/tj-actions/changed-files/issues/1689))
|
||||
|
||||
Co-authored-by: jackton1 <jackton1@users.noreply.github.com> ([c076064](https://github.com/tj-actions/changed-files/commit/c07606463672e7c623bc2801b4002bd645aed1f2)) - (tj-actions[bot])
|
||||
|
||||
# [40.0.2](https://github.com/tj-actions/changed-files/compare/v40.0.1...v40.0.2) - (2023-10-31)
|
||||
|
||||
## <!-- 1 -->🐛 Bug Fixes
|
||||
|
||||
- Order of file patterns ([#1688](https://github.com/tj-actions/changed-files/issues/1688)) ([4052680](https://github.com/tj-actions/changed-files/commit/40526807ee1e208a1a8c1bbe6bd2d1b044ef6368)) - (Tonye Jack)
|
||||
|
||||
## <!-- 7 -->⚙️ Miscellaneous Tasks
|
||||
|
||||
- **deps:** Update dependency @types/node to v20.8.10 ([a59bf8f](https://github.com/tj-actions/changed-files/commit/a59bf8ffcfcfdd831463eff511b55a7123a04aca)) - (renovate[bot])
|
||||
|
||||
## <!-- 9 -->⬆️ Upgrades
|
||||
|
||||
- Upgraded to v40.0.1 ([#1686](https://github.com/tj-actions/changed-files/issues/1686))
|
||||
|
||||
Co-authored-by: jackton1 <jackton1@users.noreply.github.com> ([6821899](https://github.com/tj-actions/changed-files/commit/68218997649ac879f47639455e9669b94750b50f)) - (tj-actions[bot])
|
||||
|
||||
# [40.0.1](https://github.com/tj-actions/changed-files/compare/v40.0.0...v40.0.1) - (2023-10-30)
|
||||
|
||||
## <!-- 1 -->🐛 Bug Fixes
|
||||
|
||||
346
README.md
346
README.md
@@ -17,7 +17,7 @@
|
||||
|
||||
Effortlessly track all changed files and directories relative to a target branch, preceding commit or the last remote commit returning **relative paths** from the project root using this GitHub action.
|
||||
|
||||
> **Note**
|
||||
> **Note** :exclamation:
|
||||
>
|
||||
> * This action solely identifies files that have undergone changes within the context of events such as `pull_request*`, `push`, and more. However, it doesn't detect pending uncommitted changes created during the workflow execution.
|
||||
>
|
||||
@@ -83,7 +83,7 @@ And many more...
|
||||
|
||||
## Usage 💻
|
||||
|
||||
> **Important**
|
||||
> **Important** :bangbang:
|
||||
>
|
||||
> * **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.
|
||||
> * **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.
|
||||
@@ -309,7 +309,7 @@ Support this project with a :star:
|
||||
| U | Unmerged |
|
||||
| X | Unknown |
|
||||
|
||||
> **Warning**
|
||||
> **Warning** 🚨
|
||||
>
|
||||
> * When using `files_yaml*` inputs ensure all outputs are prefixed by the key `test_{...}` e.g. `test_added_files`, `test_any_changed`
|
||||
> * All keys must start with a letter or \_ and contain only alphanumeric characters, -, or \_.
|
||||
@@ -365,58 +365,292 @@ Support this project with a :star:
|
||||
|
||||
<!-- AUTO-DOC-INPUT:START - Do not remove or modify this section -->
|
||||
|
||||
| INPUT | TYPE | REQUIRED | DEFAULT | DESCRIPTION |
|
||||
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------|----------|---------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| <a name="input_api_url"></a>[api\_url](#input_api_url) | string | false | `"${{ github.api_url }}"` | Github API URL. |
|
||||
| <a name="input_base_sha"></a>[base\_sha](#input_base_sha) | string | false | | Specify a different base commit <br>SHA or branch used for <br>comparing changes |
|
||||
| <a name="input_diff_relative"></a>[diff\_relative](#input_diff_relative) | string | false | `"true"` | Exclude changes outside the current <br>directory and show path names <br>relative to it. **NOTE:** This <br>requires you to specify the <br>top level directory via the <br>`path` input. |
|
||||
| <a name="input_dir_names"></a>[dir\_names](#input_dir_names) | string | false | `"false"` | Output unique changed directories instead <br>of filenames. **NOTE:** This returns <br>`.` for changed files located <br>in the current working directory <br>which defaults to `$GITHUB_WORKSPACE`. |
|
||||
| <a name="input_dir_names_deleted_files_include_only_deleted_dirs"></a>[dir\_names\_deleted\_files\_include\_only\_deleted\_dirs](#input_dir_names_deleted_files_include_only_deleted_dirs) | string | false | `"false"` | Include only directories that have <br>been deleted as opposed to <br>directory names of files that <br>have been deleted in the <br>`deleted_files` output when `dir_names` is <br>set to `true`. |
|
||||
| <a name="input_dir_names_exclude_current_dir"></a>[dir\_names\_exclude\_current\_dir](#input_dir_names_exclude_current_dir) | string | false | `"false"` | Exclude the current directory represented <br>by `.` from the output <br>when `dir_names` is set to <br>`true`. |
|
||||
| <a name="input_dir_names_include_files"></a>[dir\_names\_include\_files](#input_dir_names_include_files) | string | false | | File and directory patterns to <br>include in the output when <br>`dir_names` is set to `true`. <br>**NOTE:** This returns only the <br>matching files and also the <br>directory names. |
|
||||
| <a name="input_dir_names_include_files_separator"></a>[dir\_names\_include\_files\_separator](#input_dir_names_include_files_separator) | string | false | `"\n"` | Separator used to split the <br>`dir_names_include_files` input |
|
||||
| <a name="input_dir_names_max_depth"></a>[dir\_names\_max\_depth](#input_dir_names_max_depth) | string | false | | Limit the directory output to <br>a maximum depth e.g `test/test1/test2` <br>with max depth of `2` <br>returns `test/test1`. |
|
||||
| <a name="input_escape_json"></a>[escape\_json](#input_escape_json) | string | false | `"true"` | Escape JSON output. |
|
||||
| <a name="input_fail_on_initial_diff_error"></a>[fail\_on\_initial\_diff\_error](#input_fail_on_initial_diff_error) | string | false | `"false"` | Fail when the initial diff <br>fails. |
|
||||
| <a name="input_fail_on_submodule_diff_error"></a>[fail\_on\_submodule\_diff\_error](#input_fail_on_submodule_diff_error) | string | false | `"false"` | Fail when the submodule diff <br>fails. |
|
||||
| <a name="input_fetch_additional_submodule_history"></a>[fetch\_additional\_submodule\_history](#input_fetch_additional_submodule_history) | string | false | `"false"` | Fetch additional history for submodules. |
|
||||
| <a name="input_fetch_depth"></a>[fetch\_depth](#input_fetch_depth) | string | false | `"50"` | Depth of additional branch history <br>fetched. **NOTE**: This can be <br>adjusted to resolve errors with <br>insufficient history. |
|
||||
| <a name="input_files"></a>[files](#input_files) | string | false | | File and directory patterns used <br>to detect changes (Defaults to the entire repo if unset) **NOTE:** <br>Multiline file/directory patterns should not <br>include quotes. |
|
||||
| <a name="input_files_from_source_file"></a>[files\_from\_source\_file](#input_files_from_source_file) | string | false | | Source file(s) used to populate <br>the `files` input. |
|
||||
| <a name="input_files_from_source_file_separator"></a>[files\_from\_source\_file\_separator](#input_files_from_source_file_separator) | string | false | `"\n"` | Separator used to split the <br>`files_from_source_file` input |
|
||||
| <a name="input_files_ignore"></a>[files\_ignore](#input_files_ignore) | string | false | | Ignore changes to these file(s) <br>**NOTE:** Multiline file/directory patterns should <br>not include quotes. |
|
||||
| <a name="input_files_ignore_from_source_file"></a>[files\_ignore\_from\_source\_file](#input_files_ignore_from_source_file) | string | false | | Source file(s) used to populate <br>the `files_ignore` input |
|
||||
| <a name="input_files_ignore_from_source_file_separator"></a>[files\_ignore\_from\_source\_file\_separator](#input_files_ignore_from_source_file_separator) | string | false | `"\n"` | Separator used to split the <br>`files_ignore_from_source_file` input |
|
||||
| <a name="input_files_ignore_separator"></a>[files\_ignore\_separator](#input_files_ignore_separator) | string | false | `"\n"` | Separator used to split the <br>`files_ignore` input |
|
||||
| <a name="input_files_ignore_yaml"></a>[files\_ignore\_yaml](#input_files_ignore_yaml) | string | false | | YAML used to define a <br>set of file patterns to <br>ignore changes |
|
||||
| <a name="input_files_ignore_yaml_from_source_file"></a>[files\_ignore\_yaml\_from\_source\_file](#input_files_ignore_yaml_from_source_file) | string | false | | Source file(s) used to populate <br>the `files_ignore_yaml` input. [Example](https://github.com/tj-actions/changed-files/blob/main/test/changed-files.yml) |
|
||||
| <a name="input_files_ignore_yaml_from_source_file_separator"></a>[files\_ignore\_yaml\_from\_source\_file\_separator](#input_files_ignore_yaml_from_source_file_separator) | string | false | `"\n"` | Separator used to split the <br>`files_ignore_yaml_from_source_file` input |
|
||||
| <a name="input_files_separator"></a>[files\_separator](#input_files_separator) | string | false | `"\n"` | Separator used to split the <br>`files` input |
|
||||
| <a name="input_files_yaml"></a>[files\_yaml](#input_files_yaml) | string | false | | YAML used to define a <br>set of file patterns to <br>detect changes |
|
||||
| <a name="input_files_yaml_from_source_file"></a>[files\_yaml\_from\_source\_file](#input_files_yaml_from_source_file) | string | false | | Source file(s) used to populate <br>the `files_yaml` input. [Example](https://github.com/tj-actions/changed-files/blob/main/test/changed-files.yml) |
|
||||
| <a name="input_files_yaml_from_source_file_separator"></a>[files\_yaml\_from\_source\_file\_separator](#input_files_yaml_from_source_file_separator) | string | false | `"\n"` | Separator used to split the <br>`files_yaml_from_source_file` input |
|
||||
| <a name="input_include_all_old_new_renamed_files"></a>[include\_all\_old\_new\_renamed\_files](#input_include_all_old_new_renamed_files) | string | false | `"false"` | Include `all_old_new_renamed_files` output. Note this <br>can generate a large output <br>See: [#501](https://github.com/tj-actions/changed-files/issues/501). |
|
||||
| <a name="input_json"></a>[json](#input_json) | string | false | `"false"` | Output list of changed files <br>in a JSON formatted string <br>which can be used for <br>matrix jobs. [Example](https://github.com/tj-actions/changed-files/blob/main/.github/workflows/matrix-test.yml) |
|
||||
| <a name="input_old_new_files_separator"></a>[old\_new\_files\_separator](#input_old_new_files_separator) | string | false | `" "` | Split character for old and <br>new renamed filename pairs. |
|
||||
| <a name="input_old_new_separator"></a>[old\_new\_separator](#input_old_new_separator) | string | false | `","` | Split character for old and <br>new filename pairs. |
|
||||
| <a name="input_output_dir"></a>[output\_dir](#input_output_dir) | string | false | `".github/outputs"` | Directory to store output files. |
|
||||
| <a name="input_output_renamed_files_as_deleted_and_added"></a>[output\_renamed\_files\_as\_deleted\_and\_added](#input_output_renamed_files_as_deleted_and_added) | string | false | `"false"` | Output renamed files as deleted <br>and added files. |
|
||||
| <a name="input_path"></a>[path](#input_path) | string | false | `"."` | Specify a relative path under <br>`$GITHUB_WORKSPACE` to locate the repository. |
|
||||
| <a name="input_quotepath"></a>[quotepath](#input_quotepath) | string | false | `"true"` | Use non-ascii characters to match <br>files and output the filenames <br>completely verbatim by setting this <br>to `false` |
|
||||
| <a name="input_recover_deleted_files"></a>[recover\_deleted\_files](#input_recover_deleted_files) | string | false | `"false"` | Recover deleted files. |
|
||||
| <a name="input_recover_deleted_files_to_destination"></a>[recover\_deleted\_files\_to\_destination](#input_recover_deleted_files_to_destination) | string | false | | Recover deleted files to a <br>new destination directory, defaults to <br>the original location. |
|
||||
| <a name="input_recover_files"></a>[recover\_files](#input_recover_files) | string | false | | File and directory patterns used <br>to recover deleted files, defaults <br>to the patterns provided via <br>the `files`, `files_from_source_file`, `files_ignore` and <br>`files_ignore_from_source_file` inputs or all deleted <br>files if no patterns are <br>provided. |
|
||||
| <a name="input_recover_files_ignore"></a>[recover\_files\_ignore](#input_recover_files_ignore) | string | false | | File and directory patterns to <br>ignore when recovering deleted files. |
|
||||
| <a name="input_recover_files_ignore_separator"></a>[recover\_files\_ignore\_separator](#input_recover_files_ignore_separator) | string | false | `"\n"` | Separator used to split the <br>`recover_files_ignore` input |
|
||||
| <a name="input_recover_files_separator"></a>[recover\_files\_separator](#input_recover_files_separator) | string | false | `"\n"` | Separator used to split the <br>`recover_files` input |
|
||||
| <a name="input_separator"></a>[separator](#input_separator) | string | false | `" "` | Split character for output strings |
|
||||
| <a name="input_sha"></a>[sha](#input_sha) | string | false | | Specify a different commit SHA <br>or branch used for comparing <br>changes |
|
||||
| <a name="input_since"></a>[since](#input_since) | string | false | | Get changed files for commits <br>whose timestamp is older than <br>the given time. |
|
||||
| <a name="input_since_last_remote_commit"></a>[since\_last\_remote\_commit](#input_since_last_remote_commit) | string | false | `"false"` | Use the last commit on <br>the remote branch as the <br>`base_sha`. Defaults to the last <br>non-merge commit on the target <br>branch for pull request events <br>and the previous remote commit <br>of the current branch for <br>push events. |
|
||||
| <a name="input_skip_initial_fetch"></a>[skip\_initial\_fetch](#input_skip_initial_fetch) | string | false | `"false"` | Skip the initial fetch to <br>improve performance for shallow repositories. <br>**NOTE**: This could lead to <br>errors with missing history and <br>the intended use is limited <br>to when you've fetched the <br>history necessary to perform the <br>diff. |
|
||||
| <a name="input_token"></a>[token](#input_token) | string | false | `"${{ github.token }}"` | Github token used to fetch <br>changed files from Github's API. |
|
||||
| <a name="input_until"></a>[until](#input_until) | string | false | | Get changed files for commits <br>whose timestamp is earlier than <br>the given time. |
|
||||
| <a name="input_write_output_files"></a>[write\_output\_files](#input_write_output_files) | string | false | `"false"` | Write outputs to the `output_dir` <br>defaults to `.github/outputs` folder. **NOTE:** <br>This creates a `.txt` file <br>by default and a `.json` <br>file if `json` is set <br>to `true`. |
|
||||
```yaml
|
||||
- uses: tj-actions/changed-files@v40
|
||||
id: changed-files
|
||||
with:
|
||||
# Github API URL.
|
||||
# Type: string
|
||||
# Default: "${{ github.api_url }}"
|
||||
api_url: ''
|
||||
|
||||
# Specify a different base commit SHA or branch used
|
||||
# for comparing changes
|
||||
# Type: string
|
||||
base_sha: ''
|
||||
|
||||
# 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.
|
||||
# Type: boolean
|
||||
# Default: "true"
|
||||
diff_relative: ''
|
||||
|
||||
# Output unique changed directories instead of filenames. NOTE: This
|
||||
# returns `.` for changed files located in the current
|
||||
# working directory which defaults to `$GITHUB_WORKSPACE`.
|
||||
# Type: boolean
|
||||
# Default: "false"
|
||||
dir_names: ''
|
||||
|
||||
# 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`.
|
||||
# Type: boolean
|
||||
# Default: "false"
|
||||
dir_names_deleted_files_include_only_deleted_dirs: ''
|
||||
|
||||
# Exclude the current directory represented by `.` from the
|
||||
# output when `dir_names` is set to `true`.
|
||||
# Type: boolean
|
||||
# Default: "false"
|
||||
dir_names_exclude_current_dir: ''
|
||||
|
||||
# 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.
|
||||
# Type: string
|
||||
dir_names_include_files: ''
|
||||
|
||||
# Separator used to split the `dir_names_include_files` input
|
||||
# Type: string
|
||||
# Default: "\n"
|
||||
dir_names_include_files_separator: ''
|
||||
|
||||
# Limit the directory output to a maximum depth e.g
|
||||
# `test/test1/test2` with max depth of `2` returns `test/test1`.
|
||||
# Type: string
|
||||
dir_names_max_depth: ''
|
||||
|
||||
# Escape JSON output.
|
||||
# Type: boolean
|
||||
# Default: "true"
|
||||
escape_json: ''
|
||||
|
||||
# Fail when the initial diff fails.
|
||||
# Type: boolean
|
||||
# Default: "false"
|
||||
fail_on_initial_diff_error: ''
|
||||
|
||||
# Fail when the submodule diff fails.
|
||||
# Type: boolean
|
||||
# Default: "false"
|
||||
fail_on_submodule_diff_error: ''
|
||||
|
||||
# Fetch additional history for submodules.
|
||||
# Type: boolean
|
||||
# Default: "false"
|
||||
fetch_additional_submodule_history: ''
|
||||
|
||||
# Depth of additional branch history fetched. NOTE: This can
|
||||
# be adjusted to resolve errors with insufficient history.
|
||||
# Type: string
|
||||
# Default: "50"
|
||||
fetch_depth: ''
|
||||
|
||||
# File and directory patterns used to detect changes (Defaults to the entire repo if unset).
|
||||
# NOTE: Multiline file/directory patterns should not include quotes.
|
||||
# Type: string
|
||||
files: ''
|
||||
|
||||
# Source file(s) used to populate the `files` input.
|
||||
# Type: string
|
||||
files_from_source_file: ''
|
||||
|
||||
# Separator used to split the `files_from_source_file` input.
|
||||
# Type: string
|
||||
# Default: "\n"
|
||||
files_from_source_file_separator: ''
|
||||
|
||||
# Ignore changes to these file(s). NOTE: Multiline file/directory patterns
|
||||
# should not include quotes.
|
||||
# Type: string
|
||||
files_ignore: ''
|
||||
|
||||
# Source file(s) used to populate the `files_ignore` input
|
||||
# Type: string
|
||||
files_ignore_from_source_file: ''
|
||||
|
||||
# Separator used to split the `files_ignore_from_source_file` input
|
||||
# Type: string
|
||||
# Default: "\n"
|
||||
files_ignore_from_source_file_separator: ''
|
||||
|
||||
# Separator used to split the `files_ignore` input
|
||||
# Type: string
|
||||
# Default: "\n"
|
||||
files_ignore_separator: ''
|
||||
|
||||
# YAML used to define a set of file patterns
|
||||
# to ignore changes
|
||||
# Type: string
|
||||
files_ignore_yaml: ''
|
||||
|
||||
# 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
|
||||
# Type: string
|
||||
files_ignore_yaml_from_source_file: ''
|
||||
|
||||
# Separator used to split the `files_ignore_yaml_from_source_file` input
|
||||
# Type: string
|
||||
# Default: "\n"
|
||||
files_ignore_yaml_from_source_file_separator: ''
|
||||
|
||||
# Separator used to split the `files` input
|
||||
# Type: string
|
||||
# Default: "\n"
|
||||
files_separator: ''
|
||||
|
||||
# YAML used to define a set of file patterns
|
||||
# to detect changes
|
||||
# Type: string
|
||||
files_yaml: ''
|
||||
|
||||
# Source file(s) used to populate the `files_yaml` input. Example:
|
||||
# https://github.com/tj-actions/changed-files/blob/main/test/changed-files.yml
|
||||
# Type: string
|
||||
files_yaml_from_source_file: ''
|
||||
|
||||
# Separator used to split the `files_yaml_from_source_file` input
|
||||
# Type: string
|
||||
# Default: "\n"
|
||||
files_yaml_from_source_file_separator: ''
|
||||
|
||||
# Include `all_old_new_renamed_files` output. Note this can generate a large
|
||||
# output See: #501.
|
||||
# Type: boolean
|
||||
# Default: "false"
|
||||
include_all_old_new_renamed_files: ''
|
||||
|
||||
# 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-test.yml
|
||||
# Type: boolean
|
||||
# Default: "false"
|
||||
json: ''
|
||||
|
||||
# Apply the negation patterns first. NOTE: This affects how
|
||||
# changed files are matched.
|
||||
# Type: boolean
|
||||
# Default: "false"
|
||||
negation_patterns_first: ''
|
||||
|
||||
# Split character for old and new renamed filename pairs.
|
||||
# Type: string
|
||||
# Default: " "
|
||||
old_new_files_separator: ''
|
||||
|
||||
# Split character for old and new filename pairs.
|
||||
# Type: string
|
||||
# Default: ","
|
||||
old_new_separator: ''
|
||||
|
||||
# Directory to store output files.
|
||||
# Type: string
|
||||
# Default: ".github/outputs"
|
||||
output_dir: ''
|
||||
|
||||
# Output renamed files as deleted and added files.
|
||||
# Type: boolean
|
||||
# Default: "false"
|
||||
output_renamed_files_as_deleted_and_added: ''
|
||||
|
||||
# Specify a relative path under `$GITHUB_WORKSPACE` to locate the
|
||||
# repository.
|
||||
# Type: string
|
||||
# Default: "."
|
||||
path: ''
|
||||
|
||||
# Use non-ASCII characters to match files and output the
|
||||
# filenames completely verbatim by setting this to `false`
|
||||
# Type: boolean
|
||||
# Default: "true"
|
||||
quotepath: ''
|
||||
|
||||
# Recover deleted files.
|
||||
# Type: boolean
|
||||
# Default: "false"
|
||||
recover_deleted_files: ''
|
||||
|
||||
# Recover deleted files to a new destination directory, defaults
|
||||
# to the original location.
|
||||
# Type: string
|
||||
recover_deleted_files_to_destination: ''
|
||||
|
||||
# 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.
|
||||
# Type: string
|
||||
recover_files: ''
|
||||
|
||||
# File and directory patterns to ignore when recovering deleted
|
||||
# files.
|
||||
# Type: string
|
||||
recover_files_ignore: ''
|
||||
|
||||
# Separator used to split the `recover_files_ignore` input
|
||||
# Type: string
|
||||
# Default: "\n"
|
||||
recover_files_ignore_separator: ''
|
||||
|
||||
# Separator used to split the `recover_files` input
|
||||
# Type: string
|
||||
# Default: "\n"
|
||||
recover_files_separator: ''
|
||||
|
||||
# Split character for output strings.
|
||||
# Type: string
|
||||
# Default: " "
|
||||
separator: ''
|
||||
|
||||
# Specify a different commit SHA or branch used for
|
||||
# comparing changes
|
||||
# Type: string
|
||||
sha: ''
|
||||
|
||||
# Get changed files for commits whose timestamp is older
|
||||
# than the given time.
|
||||
# Type: string
|
||||
since: ''
|
||||
|
||||
# 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.
|
||||
# Type: boolean
|
||||
# Default: "false"
|
||||
since_last_remote_commit: ''
|
||||
|
||||
# Skip the initial fetch to improve performance for shallow
|
||||
# repositories. NOTE: This could lead to errors with missing
|
||||
# history and the intended use is limited to when
|
||||
# you've fetched the history necessary to perform the diff.
|
||||
# Type: boolean
|
||||
# Default: "false"
|
||||
skip_initial_fetch: ''
|
||||
|
||||
# GitHub token used to fetch changed files from Github's
|
||||
# API.
|
||||
# Type: string
|
||||
# Default: "${{ github.token }}"
|
||||
token: ''
|
||||
|
||||
# Get changed files for commits whose timestamp is earlier
|
||||
# than the given time.
|
||||
# Type: string
|
||||
until: ''
|
||||
|
||||
# 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`.
|
||||
# Type: boolean
|
||||
# Default: "false"
|
||||
write_output_files: ''
|
||||
|
||||
```
|
||||
|
||||
<!-- AUTO-DOC-INPUT:END -->
|
||||
|
||||
@@ -938,7 +1172,7 @@ And many more...
|
||||
|
||||
## Important Notice ⚠️
|
||||
|
||||
> **Important**
|
||||
> **Important** : :bangbang:
|
||||
>
|
||||
> * Spaces in file names can introduce bugs when using bash loops. See: [#216](https://github.com/tj-actions/changed-files/issues/216)
|
||||
> However, this action will handle spaces in file names, with a recommendation of using a separator to prevent any hidden issues.
|
||||
|
||||
45
action.yml
45
action.yml
@@ -4,11 +4,11 @@ author: tj-actions
|
||||
|
||||
inputs:
|
||||
separator:
|
||||
description: "Split character for output strings"
|
||||
description: "Split character for output strings."
|
||||
required: false
|
||||
default: " "
|
||||
include_all_old_new_renamed_files:
|
||||
description: "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)."
|
||||
description: "Include `all_old_new_renamed_files` output. Note this can generate a large output See: #501."
|
||||
required: false
|
||||
default: "false"
|
||||
old_new_separator:
|
||||
@@ -24,11 +24,13 @@ inputs:
|
||||
required: false
|
||||
default: ""
|
||||
files_from_source_file_separator:
|
||||
description: 'Separator used to split the `files_from_source_file` input'
|
||||
description: "Separator used to split the `files_from_source_file` input."
|
||||
default: "\n"
|
||||
required: false
|
||||
files:
|
||||
description: "File and directory patterns used to detect changes (Defaults to the entire repo if unset) **NOTE:** Multiline file/directory patterns should not include quotes."
|
||||
description: |
|
||||
File and directory patterns used to detect changes (Defaults to the entire repo if unset).
|
||||
NOTE: Multiline file/directory patterns should not include quotes.
|
||||
required: false
|
||||
default: ""
|
||||
files_separator:
|
||||
@@ -40,7 +42,7 @@ inputs:
|
||||
required: false
|
||||
default: ""
|
||||
files_yaml_from_source_file:
|
||||
description: "Source file(s) used to populate the `files_yaml` input. [Example](https://github.com/tj-actions/changed-files/blob/main/test/changed-files.yml)"
|
||||
description: "Source file(s) used to populate the `files_yaml` input. Example: https://github.com/tj-actions/changed-files/blob/main/test/changed-files.yml"
|
||||
required: false
|
||||
default: ""
|
||||
files_yaml_from_source_file_separator:
|
||||
@@ -52,7 +54,7 @@ inputs:
|
||||
required: false
|
||||
default: ""
|
||||
files_ignore_yaml_from_source_file:
|
||||
description: "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)"
|
||||
description: "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"
|
||||
required: false
|
||||
default: ""
|
||||
files_ignore_yaml_from_source_file_separator:
|
||||
@@ -60,7 +62,7 @@ inputs:
|
||||
default: "\n"
|
||||
required: false
|
||||
files_ignore:
|
||||
description: "Ignore changes to these file(s) **NOTE:** Multiline file/directory patterns should not include quotes."
|
||||
description: "Ignore changes to these file(s). NOTE: Multiline file/directory patterns should not include quotes."
|
||||
required: false
|
||||
default: ""
|
||||
files_ignore_separator:
|
||||
@@ -94,16 +96,16 @@ inputs:
|
||||
required: false
|
||||
default: "."
|
||||
quotepath:
|
||||
description: "Use non-ascii characters to match files and output the filenames completely verbatim by setting this to `false`"
|
||||
description: "Use non-ASCII characters to match files and output the filenames completely verbatim by setting this to `false`"
|
||||
default: "true"
|
||||
required: false
|
||||
diff_relative:
|
||||
description: "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."
|
||||
description: "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."
|
||||
required: false
|
||||
default: "true"
|
||||
dir_names:
|
||||
default: "false"
|
||||
description: "Output unique changed directories instead of filenames. **NOTE:** This returns `.` for changed files located in the current working directory which defaults to `$GITHUB_WORKSPACE`."
|
||||
description: "Output unique changed directories instead of filenames. NOTE: This returns `.` for changed files located in the current working directory which defaults to `$GITHUB_WORKSPACE`."
|
||||
required: false
|
||||
dir_names_max_depth:
|
||||
description: "Limit the directory output to a maximum depth e.g `test/test1/test2` with max depth of `2` returns `test/test1`."
|
||||
@@ -113,7 +115,7 @@ inputs:
|
||||
required: false
|
||||
default: "false"
|
||||
dir_names_include_files:
|
||||
description: "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."
|
||||
description: "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."
|
||||
required: false
|
||||
default: ""
|
||||
dir_names_include_files_separator:
|
||||
@@ -125,7 +127,7 @@ inputs:
|
||||
required: false
|
||||
default: "false"
|
||||
json:
|
||||
description: "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-test.yml)"
|
||||
description: "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-test.yml"
|
||||
required: false
|
||||
default: "false"
|
||||
escape_json:
|
||||
@@ -133,11 +135,13 @@ inputs:
|
||||
required: false
|
||||
default: "true"
|
||||
fetch_depth:
|
||||
description: "Depth of additional branch history fetched. **NOTE**: This can be adjusted to resolve errors with insufficient history."
|
||||
description: "Depth of additional branch history fetched. NOTE: This can be adjusted to resolve errors with insufficient history."
|
||||
required: false
|
||||
default: "50"
|
||||
skip_initial_fetch:
|
||||
description: "Skip the initial fetch to improve performance for shallow repositories. **NOTE**: This could lead to errors with missing history and the intended use is limited to when you've fetched the history necessary to perform the diff."
|
||||
description: |
|
||||
Skip the initial fetch to improve performance for shallow repositories.
|
||||
NOTE: This could lead to errors with missing history and the intended use is limited to when you've fetched the history necessary to perform the diff.
|
||||
required: false
|
||||
default: "false"
|
||||
fetch_additional_submodule_history:
|
||||
@@ -149,7 +153,7 @@ inputs:
|
||||
required: false
|
||||
default: "false"
|
||||
write_output_files:
|
||||
description: "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`."
|
||||
description: "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`."
|
||||
required: false
|
||||
default: "false"
|
||||
output_dir:
|
||||
@@ -169,7 +173,10 @@ inputs:
|
||||
required: false
|
||||
default: ""
|
||||
recover_files:
|
||||
description: "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."
|
||||
description: |
|
||||
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.
|
||||
required: false
|
||||
default: ""
|
||||
recover_files_separator:
|
||||
@@ -185,7 +192,7 @@ inputs:
|
||||
default: "\n"
|
||||
required: false
|
||||
token:
|
||||
description: "Github token used to fetch changed files from Github's API."
|
||||
description: "GitHub token used to fetch changed files from Github's API."
|
||||
required: false
|
||||
default: ${{ github.token }}
|
||||
api_url:
|
||||
@@ -200,6 +207,10 @@ inputs:
|
||||
description: "Fail when the submodule diff fails."
|
||||
required: false
|
||||
default: "false"
|
||||
negation_patterns_first:
|
||||
description: "Apply the negation patterns first. NOTE: This affects how changed files are matched."
|
||||
required: false
|
||||
default: "false"
|
||||
|
||||
outputs:
|
||||
added_files:
|
||||
|
||||
4139
dist/index.js
generated
vendored
4139
dist/index.js
generated
vendored
File diff suppressed because it is too large
Load Diff
2
dist/index.js.map
generated
vendored
2
dist/index.js.map
generated
vendored
File diff suppressed because one or more lines are too long
25
dist/licenses.txt
generated
vendored
25
dist/licenses.txt
generated
vendored
@@ -564,31 +564,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
|
||||
is-plain-object
|
||||
MIT
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014-2017, Jon Schlinkert.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
|
||||
lodash
|
||||
MIT
|
||||
Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@tj-actions/changed-files",
|
||||
"version": "40.0.1",
|
||||
"version": "40.1.1",
|
||||
"description": "Github action to retrieve all (added, copied, modified, deleted, renamed, type changed, unmerged, unknown) files and directories.",
|
||||
"main": "lib/main.js",
|
||||
"publishConfig": {
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
describe('main test', () => {
|
||||
it('adds two numbers', async () => {
|
||||
expect(1 + 1).toEqual(2)
|
||||
})
|
||||
})
|
||||
@@ -5,6 +5,7 @@ import {Env} from './env'
|
||||
import {Inputs} from './inputs'
|
||||
import {
|
||||
canDiffCommits,
|
||||
cleanShaInput,
|
||||
getCurrentBranchName,
|
||||
getHeadSha,
|
||||
getParentSha,
|
||||
@@ -23,7 +24,11 @@ const getCurrentSHA = async ({
|
||||
inputs: Inputs
|
||||
workingDirectory: string
|
||||
}): Promise<string> => {
|
||||
let currentSha = inputs.sha
|
||||
let currentSha = await cleanShaInput({
|
||||
sha: inputs.sha,
|
||||
cwd: workingDirectory,
|
||||
token: inputs.token
|
||||
})
|
||||
core.debug('Getting current SHA...')
|
||||
|
||||
if (inputs.until) {
|
||||
@@ -162,7 +167,11 @@ export const getSHAForNonPullRequestEvent = async (
|
||||
}
|
||||
|
||||
const currentSha = await getCurrentSHA({inputs, workingDirectory})
|
||||
let previousSha = inputs.baseSha
|
||||
let previousSha = await cleanShaInput({
|
||||
sha: inputs.baseSha,
|
||||
cwd: workingDirectory,
|
||||
token: inputs.token
|
||||
})
|
||||
const diff = '..'
|
||||
const currentBranchName = await getCurrentBranchName({cwd: workingDirectory})
|
||||
|
||||
@@ -175,7 +184,7 @@ export const getSHAForNonPullRequestEvent = async (
|
||||
currentBranch = currentBranchName
|
||||
}
|
||||
|
||||
if (previousSha && currentSha && currentBranch && targetBranch) {
|
||||
if (inputs.baseSha && inputs.sha && currentBranch && targetBranch) {
|
||||
if (previousSha === currentSha) {
|
||||
core.error(
|
||||
`Similar commit hashes detected: previous sha: ${previousSha} is equivalent to the current sha: ${currentSha}.`
|
||||
@@ -186,7 +195,6 @@ export const getSHAForNonPullRequestEvent = async (
|
||||
throw new Error('Similar commit hashes detected.')
|
||||
}
|
||||
|
||||
await verifyCommitSha({sha: previousSha, cwd: workingDirectory})
|
||||
core.debug(`Previous SHA: ${previousSha}`)
|
||||
|
||||
return {
|
||||
@@ -198,7 +206,7 @@ export const getSHAForNonPullRequestEvent = async (
|
||||
}
|
||||
}
|
||||
|
||||
if (!previousSha) {
|
||||
if (!previousSha || previousSha === currentSha) {
|
||||
core.debug('Getting previous SHA...')
|
||||
if (inputs.since) {
|
||||
core.debug(`Getting base SHA for '${inputs.since}'...`)
|
||||
@@ -390,10 +398,14 @@ export const getSHAForPullRequestEvent = async (
|
||||
}
|
||||
|
||||
const currentSha = await getCurrentSHA({inputs, workingDirectory})
|
||||
let previousSha = inputs.baseSha
|
||||
let previousSha = await cleanShaInput({
|
||||
sha: inputs.baseSha,
|
||||
cwd: workingDirectory,
|
||||
token: inputs.token
|
||||
})
|
||||
let diff = '...'
|
||||
|
||||
if (previousSha && currentSha && currentBranch && targetBranch) {
|
||||
if (inputs.baseSha && inputs.sha && currentBranch && targetBranch) {
|
||||
if (previousSha === currentSha) {
|
||||
core.error(
|
||||
`Similar commit hashes detected: previous sha: ${previousSha} is equivalent to the current sha: ${currentSha}.`
|
||||
@@ -404,7 +416,6 @@ export const getSHAForPullRequestEvent = async (
|
||||
throw new Error('Similar commit hashes detected.')
|
||||
}
|
||||
|
||||
await verifyCommitSha({sha: previousSha, cwd: workingDirectory})
|
||||
core.debug(`Previous SHA: ${previousSha}`)
|
||||
|
||||
return {
|
||||
@@ -423,7 +434,7 @@ export const getSHAForPullRequestEvent = async (
|
||||
diff = '..'
|
||||
}
|
||||
|
||||
if (!previousSha) {
|
||||
if (!previousSha || previousSha === currentSha) {
|
||||
if (inputs.sinceLastRemoteCommit) {
|
||||
previousSha = github.context.payload.before
|
||||
|
||||
|
||||
@@ -51,6 +51,7 @@ export type Inputs = {
|
||||
skipInitialFetch: boolean
|
||||
failOnInitialDiffError: boolean
|
||||
failOnSubmoduleDiffError: boolean
|
||||
negationPatternsFirst: boolean
|
||||
}
|
||||
|
||||
export const getInputs = (): Inputs => {
|
||||
@@ -218,6 +219,13 @@ export const getInputs = (): Inputs => {
|
||||
}
|
||||
)
|
||||
|
||||
const negationPatternsFirst = core.getBooleanInput(
|
||||
'negation_patterns_first',
|
||||
{
|
||||
required: false
|
||||
}
|
||||
)
|
||||
|
||||
const inputs: Inputs = {
|
||||
files,
|
||||
filesSeparator,
|
||||
@@ -268,7 +276,8 @@ export const getInputs = (): Inputs => {
|
||||
outputDir,
|
||||
outputRenamedFilesAsDeletedAndAdded,
|
||||
token,
|
||||
apiUrl
|
||||
apiUrl,
|
||||
negationPatternsFirst
|
||||
}
|
||||
|
||||
if (fetchDepth) {
|
||||
|
||||
156
src/utils.ts
156
src/utils.ts
@@ -1,6 +1,7 @@
|
||||
/*global AsyncIterableIterator*/
|
||||
import * as core from '@actions/core'
|
||||
import * as exec from '@actions/exec'
|
||||
import * as github from '@actions/github'
|
||||
import {createReadStream, promises as fs} from 'fs'
|
||||
import {readFile} from 'fs/promises'
|
||||
import {flattenDeep} from 'lodash'
|
||||
@@ -771,6 +772,56 @@ export const verifyCommitSha = async ({
|
||||
return exitCode
|
||||
}
|
||||
|
||||
/**
|
||||
* Clean the sha from the input which could be a branch name or a commit sha.
|
||||
*
|
||||
* If the input is a valid commit sha, return it as is.
|
||||
*
|
||||
* If the input is a branch name, get the HEAD sha of that branch and return it.
|
||||
*
|
||||
* @param sha The input string, which could be a branch name or a commit sha.
|
||||
* @param cwd The working directory.
|
||||
* @param token The GitHub token.
|
||||
* @returns The cleaned SHA string.
|
||||
*/
|
||||
export const cleanShaInput = async ({
|
||||
sha,
|
||||
cwd,
|
||||
token
|
||||
}: {
|
||||
sha: string
|
||||
cwd: string
|
||||
token: string
|
||||
}): Promise<string> => {
|
||||
// Check if the input is a valid commit sha
|
||||
if (!sha) {
|
||||
return sha
|
||||
}
|
||||
// Check if the input is a valid commit sha
|
||||
const {stdout, exitCode} = await exec.getExecOutput(
|
||||
'git',
|
||||
['rev-parse', '--verify', `${sha}^{commit}`],
|
||||
{
|
||||
cwd,
|
||||
ignoreReturnCode: true,
|
||||
silent: !core.isDebug()
|
||||
}
|
||||
)
|
||||
|
||||
if (exitCode !== 0) {
|
||||
const octokit = github.getOctokit(token)
|
||||
// If it's not a valid commit sha, assume it's a branch name and get the HEAD sha
|
||||
const {data: refData} = await octokit.rest.git.getRef({
|
||||
owner: github.context.repo.owner,
|
||||
repo: github.context.repo.repo,
|
||||
ref: `heads/${sha}`
|
||||
})
|
||||
|
||||
return refData.object.sha
|
||||
}
|
||||
|
||||
return stdout.trim()
|
||||
}
|
||||
export const getPreviousGitTag = async ({
|
||||
cwd
|
||||
}: {
|
||||
@@ -938,90 +989,99 @@ export const getFilePatterns = async ({
|
||||
inputs: Inputs
|
||||
workingDirectory: string
|
||||
}): Promise<string[]> => {
|
||||
let filePatterns = ''
|
||||
let cleanedFilePatterns: string[] = []
|
||||
|
||||
if (inputs.files) {
|
||||
const filesPatterns = inputs.files
|
||||
.split(inputs.filesSeparator)
|
||||
.filter(Boolean)
|
||||
|
||||
cleanedFilePatterns.push(...filesPatterns)
|
||||
|
||||
core.debug(`files patterns: ${filesPatterns.join('\n')}`)
|
||||
}
|
||||
|
||||
if (inputs.filesFromSourceFile !== '') {
|
||||
const inputFilesFromSourceFile = inputs.filesFromSourceFile
|
||||
.split(inputs.filesFromSourceFileSeparator)
|
||||
.filter(Boolean)
|
||||
.map(p => path.join(workingDirectory, p))
|
||||
|
||||
core.debug(`files from source file: ${inputFilesFromSourceFile}`)
|
||||
|
||||
const filesFromSourceFiles = await getFilesFromSourceFile({
|
||||
filePaths: inputFilesFromSourceFile
|
||||
})
|
||||
|
||||
core.debug(
|
||||
`files from source files patterns: ${filesFromSourceFiles.join('\n')}`
|
||||
)
|
||||
|
||||
cleanedFilePatterns.push(...filesFromSourceFiles)
|
||||
}
|
||||
|
||||
if (inputs.filesIgnore) {
|
||||
const filesIgnorePatterns = inputs.filesIgnore
|
||||
.split(inputs.filesIgnoreSeparator)
|
||||
.filter(p => p !== '')
|
||||
.filter(Boolean)
|
||||
.map(p => {
|
||||
if (!p.startsWith('!')) {
|
||||
p = `!${p}`
|
||||
}
|
||||
return p
|
||||
})
|
||||
.join('\n')
|
||||
|
||||
core.debug(`files ignore patterns: ${filesIgnorePatterns}`)
|
||||
core.debug(`files ignore patterns: ${filesIgnorePatterns.join('\n')}`)
|
||||
|
||||
filePatterns = filePatterns.concat('\n', filesIgnorePatterns)
|
||||
cleanedFilePatterns.push(...filesIgnorePatterns)
|
||||
}
|
||||
|
||||
if (inputs.filesIgnoreFromSourceFile) {
|
||||
const inputFilesIgnoreFromSourceFile = inputs.filesIgnoreFromSourceFile
|
||||
.split(inputs.filesIgnoreFromSourceFileSeparator)
|
||||
.filter(p => p !== '')
|
||||
.filter(Boolean)
|
||||
.map(p => path.join(workingDirectory, p))
|
||||
|
||||
core.debug(
|
||||
`files ignore from source file: ${inputFilesIgnoreFromSourceFile}`
|
||||
)
|
||||
|
||||
const filesIgnoreFromSourceFiles = (
|
||||
await getFilesFromSourceFile({
|
||||
filePaths: inputFilesIgnoreFromSourceFile,
|
||||
excludedFiles: true
|
||||
})
|
||||
).join('\n')
|
||||
const filesIgnoreFromSourceFiles = await getFilesFromSourceFile({
|
||||
filePaths: inputFilesIgnoreFromSourceFile,
|
||||
excludedFiles: true
|
||||
})
|
||||
|
||||
core.debug(
|
||||
`files ignore from source files patterns: ${filesIgnoreFromSourceFiles}`
|
||||
`files ignore from source files patterns: ${filesIgnoreFromSourceFiles.join(
|
||||
'\n'
|
||||
)}`
|
||||
)
|
||||
|
||||
filePatterns = filePatterns.concat('\n', filesIgnoreFromSourceFiles)
|
||||
cleanedFilePatterns.push(...filesIgnoreFromSourceFiles)
|
||||
}
|
||||
|
||||
if (inputs.files) {
|
||||
filePatterns = filePatterns.concat(
|
||||
'\n',
|
||||
inputs.files.split(inputs.filesSeparator).filter(Boolean).join('\n')
|
||||
)
|
||||
if (inputs.negationPatternsFirst) {
|
||||
cleanedFilePatterns.sort((a, b) => {
|
||||
return a.startsWith('!') ? -1 : b.startsWith('!') ? 1 : 0
|
||||
})
|
||||
}
|
||||
|
||||
if (inputs.filesFromSourceFile !== '') {
|
||||
const inputFilesFromSourceFile = inputs.filesFromSourceFile
|
||||
.split(inputs.filesFromSourceFileSeparator)
|
||||
.filter(p => p !== '')
|
||||
.map(p => path.join(workingDirectory, p))
|
||||
|
||||
core.debug(`files from source file: ${inputFilesFromSourceFile}`)
|
||||
|
||||
const filesFromSourceFiles = (
|
||||
await getFilesFromSourceFile({filePaths: inputFilesFromSourceFile})
|
||||
).join('\n')
|
||||
|
||||
core.debug(`files from source files patterns: ${filesFromSourceFiles}`)
|
||||
|
||||
filePatterns = filePatterns.concat('\n', filesFromSourceFiles)
|
||||
}
|
||||
|
||||
if (isWindows()) {
|
||||
filePatterns = filePatterns.replace(/\r\n/g, '\n')
|
||||
filePatterns = filePatterns.replace(/\r/g, '\n')
|
||||
}
|
||||
|
||||
const filePatternsArray = filePatterns.trim().split('\n').filter(Boolean)
|
||||
|
||||
// Reorder file patterns '**' should come before '!**/*.txt' and then the rest 'dir/**/*.txt'
|
||||
if (filePatternsArray.includes('**')) {
|
||||
filePatternsArray.sort((a, b) => {
|
||||
// Reorder file patterns '**' should come first
|
||||
if (cleanedFilePatterns.includes('**')) {
|
||||
cleanedFilePatterns.sort((a, b) => {
|
||||
return a === '**' ? -1 : b === '**' ? 1 : 0
|
||||
})
|
||||
}
|
||||
|
||||
core.debug(`Input file patterns: \n${filePatternsArray.join('\n')}`)
|
||||
if (isWindows()) {
|
||||
cleanedFilePatterns = cleanedFilePatterns.map(pattern =>
|
||||
pattern.replace(/\r\n/g, '\n').replace(/\r/g, '\n')
|
||||
)
|
||||
}
|
||||
|
||||
return filePatternsArray
|
||||
core.debug(`Input file patterns: \n${cleanedFilePatterns.join('\n')}`)
|
||||
|
||||
return cleanedFilePatterns
|
||||
}
|
||||
|
||||
// Example YAML input:
|
||||
|
||||
Reference in New Issue
Block a user