Compare commits
28 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
174a2a6360 | ||
|
|
2d0b52f440 | ||
|
|
d0e3a7c3aa | ||
|
|
2c6893c21a | ||
|
|
17ca5bb3e5 | ||
|
|
61845c2b19 | ||
|
|
417f924dea | ||
|
|
c51a48d4f6 | ||
|
|
a625ca325f | ||
|
|
752970edd0 | ||
|
|
7b64c76932 | ||
|
|
6d9ee62035 | ||
|
|
b27dcc252a | ||
|
|
b60e479cea | ||
|
|
ab8493166b | ||
|
|
9333a5cf0c | ||
|
|
8ec721eb3b | ||
|
|
7d1d4d2cce | ||
|
|
fb20f4d248 | ||
|
|
b2a0ba40a4 | ||
|
|
c467712045 | ||
|
|
f41e41fa3f | ||
|
|
f490eeaa59 | ||
|
|
37e5be95e2 | ||
|
|
e208eb429a | ||
|
|
c784b6f1c4 | ||
|
|
6dc4095801 | ||
|
|
a522bdb715 |
@@ -60,6 +60,8 @@
|
|||||||
"@typescript-eslint/promise-function-async": "error",
|
"@typescript-eslint/promise-function-async": "error",
|
||||||
"@typescript-eslint/require-array-sort-compare": "error",
|
"@typescript-eslint/require-array-sort-compare": "error",
|
||||||
"@typescript-eslint/restrict-plus-operands": "error",
|
"@typescript-eslint/restrict-plus-operands": "error",
|
||||||
|
"no-shadow": "off",
|
||||||
|
"@typescript-eslint/no-shadow": "error",
|
||||||
"semi": "off",
|
"semi": "off",
|
||||||
"filenames/match-regex": [
|
"filenames/match-regex": [
|
||||||
"error",
|
"error",
|
||||||
|
|||||||
2
.github/workflows/submodule-sync.yml
vendored
2
.github/workflows/submodule-sync.yml
vendored
@@ -19,7 +19,7 @@ jobs:
|
|||||||
git submodule update --remote --recursive
|
git submodule update --remote --recursive
|
||||||
|
|
||||||
- name: Create Pull Request
|
- name: Create Pull Request
|
||||||
uses: peter-evans/create-pull-request@v5.0.1
|
uses: peter-evans/create-pull-request@v5.0.2
|
||||||
with:
|
with:
|
||||||
title: "Updated submodule"
|
title: "Updated submodule"
|
||||||
labels: "merge when passing"
|
labels: "merge when passing"
|
||||||
|
|||||||
2
.github/workflows/sync-release-version.yml
vendored
2
.github/workflows/sync-release-version.yml
vendored
@@ -24,7 +24,7 @@ jobs:
|
|||||||
- name: Run git-cliff
|
- name: Run git-cliff
|
||||||
uses: tj-actions/git-cliff@v1
|
uses: tj-actions/git-cliff@v1
|
||||||
- name: Create Pull Request
|
- name: Create Pull Request
|
||||||
uses: peter-evans/create-pull-request@v5.0.1
|
uses: peter-evans/create-pull-request@v5.0.2
|
||||||
with:
|
with:
|
||||||
base: "main"
|
base: "main"
|
||||||
labels: "merge when passing"
|
labels: "merge when passing"
|
||||||
|
|||||||
34
.github/workflows/test.yml
vendored
34
.github/workflows/test.yml
vendored
@@ -5,11 +5,31 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- "**"
|
- "**"
|
||||||
pull_request_review:
|
pull_request_review:
|
||||||
|
types: [edited, dismissed, submitted]
|
||||||
pull_request_target:
|
pull_request_target:
|
||||||
pull_request:
|
pull_request:
|
||||||
|
types:
|
||||||
|
- assigned
|
||||||
|
- unassigned
|
||||||
|
- labeled
|
||||||
|
- unlabeled
|
||||||
|
- opened
|
||||||
|
- edited
|
||||||
|
- closed
|
||||||
|
- reopened
|
||||||
|
- synchronize
|
||||||
|
- converted_to_draft
|
||||||
|
- ready_for_review
|
||||||
|
- locked
|
||||||
|
- unlocked
|
||||||
|
- review_requested
|
||||||
|
- review_request_removed
|
||||||
|
- auto_merge_enabled
|
||||||
|
- auto_merge_disabled
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
shellcheck:
|
shellcheck:
|
||||||
name: Run shellcheck
|
name: Run shellcheck
|
||||||
@@ -28,6 +48,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||||
|
|
||||||
- name: Use Node.js 16.x
|
- name: Use Node.js 16.x
|
||||||
uses: actions/setup-node@v3.6.0
|
uses: actions/setup-node@v3.6.0
|
||||||
@@ -57,7 +78,7 @@ jobs:
|
|||||||
yarn all
|
yarn all
|
||||||
|
|
||||||
- name: Verify Changed files
|
- name: Verify Changed files
|
||||||
uses: tj-actions/verify-changed-files@v14
|
uses: tj-actions/verify-changed-files@v15
|
||||||
id: changed_files
|
id: changed_files
|
||||||
if: github.event_name != 'push'
|
if: github.event_name != 'push'
|
||||||
with:
|
with:
|
||||||
@@ -75,6 +96,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Push changes
|
- name: Push changes
|
||||||
if: steps.changed_files.outputs.files_changed == 'true' && github.event_name == 'pull_request'
|
if: steps.changed_files.outputs.files_changed == 'true' && github.event_name == 'pull_request'
|
||||||
|
continue-on-error: true
|
||||||
uses: ad-m/github-push-action@master
|
uses: ad-m/github-push-action@master
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.PAT_TOKEN }}
|
github_token: ${{ secrets.PAT_TOKEN }}
|
||||||
@@ -101,6 +123,7 @@ jobs:
|
|||||||
- name: Checkout into dir1
|
- name: Checkout into dir1
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||||
submodules: true
|
submodules: true
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
path: dir1
|
path: dir1
|
||||||
@@ -133,6 +156,7 @@ jobs:
|
|||||||
- name: Checkout into dir2
|
- name: Checkout into dir2
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||||
submodules: true
|
submodules: true
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
path: dir2
|
path: dir2
|
||||||
@@ -167,6 +191,7 @@ jobs:
|
|||||||
- name: Checkout to branch
|
- name: Checkout to branch
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Download build assets
|
- name: Download build assets
|
||||||
@@ -223,6 +248,7 @@ jobs:
|
|||||||
- name: Checkout to branch
|
- name: Checkout to branch
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Download build assets
|
- name: Download build assets
|
||||||
@@ -259,6 +285,7 @@ jobs:
|
|||||||
- name: Checkout to branch
|
- name: Checkout to branch
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Download build assets
|
- name: Download build assets
|
||||||
@@ -294,6 +321,7 @@ jobs:
|
|||||||
- name: Checkout to branch
|
- name: Checkout to branch
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||||
fetch-depth: ${{ matrix.fetch-depth }}
|
fetch-depth: ${{ matrix.fetch-depth }}
|
||||||
|
|
||||||
- name: Download build assets
|
- name: Download build assets
|
||||||
@@ -357,6 +385,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
fetch-depth: ${{ matrix.fetch-depth }}
|
fetch-depth: ${{ matrix.fetch-depth }}
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||||
|
|
||||||
- name: Download build assets
|
- name: Download build assets
|
||||||
uses: actions/download-artifact@v3
|
uses: actions/download-artifact@v3
|
||||||
@@ -538,6 +567,7 @@ jobs:
|
|||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||||
fetch-depth: ${{ matrix.fetch-depth }}
|
fetch-depth: ${{ matrix.fetch-depth }}
|
||||||
- name: Download build assets
|
- name: Download build assets
|
||||||
uses: actions/download-artifact@v3
|
uses: actions/download-artifact@v3
|
||||||
@@ -1228,7 +1258,7 @@ jobs:
|
|||||||
main-branch-name: ${{ steps.branch-name.outputs.base_ref_branch }}
|
main-branch-name: ${{ steps.branch-name.outputs.base_ref_branch }}
|
||||||
workflow-id: 'test.yml'
|
workflow-id: 'test.yml'
|
||||||
- name: Run changed-files with a custom base sha
|
- name: Run changed-files with a custom base sha
|
||||||
if: github.event_name != 'push' && github.event.action != 'closed' && matrix.fetch-depth == 0
|
if: github.event_name != 'push' && github.event.action != 'closed' && matrix.fetch-depth == 0 && steps.last_successful_commit.outputs.base != steps.last_successful_commit.outputs.head
|
||||||
id: changed-files-custom-base-sha
|
id: changed-files-custom-base-sha
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
|
|||||||
2
.github/workflows/update-readme.yml
vendored
2
.github/workflows/update-readme.yml
vendored
@@ -20,7 +20,7 @@ jobs:
|
|||||||
uses: tj-actions/remark@v3
|
uses: tj-actions/remark@v3
|
||||||
|
|
||||||
- name: Verify Changed files
|
- name: Verify Changed files
|
||||||
uses: tj-actions/verify-changed-files@v14
|
uses: tj-actions/verify-changed-files@v15
|
||||||
id: verify_changed_files
|
id: verify_changed_files
|
||||||
with:
|
with:
|
||||||
files: |
|
files: |
|
||||||
|
|||||||
63
HISTORY.md
63
HISTORY.md
@@ -1,5 +1,68 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
# [36.1.0](https://github.com/tj-actions/changed-files/compare/v36.0.18...v36.1.0) - (2023-06-08)
|
||||||
|
|
||||||
|
## <!-- 0 -->🚀 Features
|
||||||
|
|
||||||
|
- Improve warning message ([#1241](https://github.com/tj-actions/changed-files/issues/1241)) ([f41e41f](https://github.com/tj-actions/changed-files/commit/f41e41fa3fdcbdf47c5f73526be7d81e413f832e)) - (Tonye Jack)
|
||||||
|
|
||||||
|
## <!-- 1 -->🐛 Bug Fixes
|
||||||
|
|
||||||
|
- Bug with errors from fork prs ([#1239](https://github.com/tj-actions/changed-files/issues/1239)) ([e208eb4](https://github.com/tj-actions/changed-files/commit/e208eb429a6a5b3444af0a2099bdbbfcd705fae6)) - (Tonye Jack)
|
||||||
|
- Bug with only_(changed|modified|deleted) outputs ([#1238](https://github.com/tj-actions/changed-files/issues/1238)) ([6dc4095](https://github.com/tj-actions/changed-files/commit/6dc409580193a9e2e52aa4a647684c2ea5a99ddb)) - (Tonye Jack)
|
||||||
|
|
||||||
|
## <!-- 26 -->🔄 Update
|
||||||
|
|
||||||
|
- Update test.yml ([37e5be9](https://github.com/tj-actions/changed-files/commit/37e5be95e281cd60c1d89e92bb25242b37e9db3c)) - (Tonye Jack)
|
||||||
|
|
||||||
|
## <!-- 7 -->⚙️ Miscellaneous Tasks
|
||||||
|
|
||||||
|
- Fix bug with nx set shas ([#1244](https://github.com/tj-actions/changed-files/issues/1244)) ([fb20f4d](https://github.com/tj-actions/changed-files/commit/fb20f4d24890fadc539505b1746d260504b213d0)) - (Tonye Jack)
|
||||||
|
- Update test ([#1243](https://github.com/tj-actions/changed-files/issues/1243)) ([b2a0ba4](https://github.com/tj-actions/changed-files/commit/b2a0ba40a4106c5de8de8ac8b0732f404d084f00)) - (Tonye Jack)
|
||||||
|
- Update event name ([#1242](https://github.com/tj-actions/changed-files/issues/1242)) ([c467712](https://github.com/tj-actions/changed-files/commit/c467712045a1fb370c4f8a2ce40f93c718e7888e)) - (Tonye Jack)
|
||||||
|
- Update test.yml ([f490eea](https://github.com/tj-actions/changed-files/commit/f490eeaa59c0a3957b24214e86c462a2e9a6c7fa)) - (tj-actions[bot])
|
||||||
|
- Improve test coverage ([#1235](https://github.com/tj-actions/changed-files/issues/1235)) ([c784b6f](https://github.com/tj-actions/changed-files/commit/c784b6f1c4775e3db7ddc38d464ae017e41b1576)) - (Tonye Jack)
|
||||||
|
|
||||||
|
## <!-- 9 -->⬆️ Upgrades
|
||||||
|
|
||||||
|
- Upgraded to v36.0.18 ([#1234](https://github.com/tj-actions/changed-files/issues/1234))
|
||||||
|
|
||||||
|
Co-authored-by: jackton1 <jackton1@users.noreply.github.com> ([a522bdb](https://github.com/tj-actions/changed-files/commit/a522bdb715e8ee0e5814bc94f576ebc24cebbfd3)) - (tj-actions[bot])
|
||||||
|
|
||||||
|
# [36.0.18](https://github.com/tj-actions/changed-files/compare/v36.0.17...v36.0.18) - (2023-06-06)
|
||||||
|
|
||||||
|
## <!-- 0 -->🚀 Features
|
||||||
|
|
||||||
|
- Add dir_names_exclude_current_dir input and cleaned up logic to retrieve the current sha ([#1229](https://github.com/tj-actions/changed-files/issues/1229)) ([353ea22](https://github.com/tj-actions/changed-files/commit/353ea22e6fc7b15ce3a30064d8cd19eef2a86b71)) - (Tonye Jack)
|
||||||
|
|
||||||
|
## <!-- 26 -->🔄 Update
|
||||||
|
|
||||||
|
- Updated README.md ([#1233](https://github.com/tj-actions/changed-files/issues/1233))
|
||||||
|
|
||||||
|
Co-authored-by: jackton1 <jackton1@users.noreply.github.com> ([07e0177](https://github.com/tj-actions/changed-files/commit/07e0177b72d3640efced741cae32f9861eee1367)) - (tj-actions[bot])
|
||||||
|
- Updated README.md ([#1232](https://github.com/tj-actions/changed-files/issues/1232))
|
||||||
|
|
||||||
|
Co-authored-by: jackton1 <jackton1@users.noreply.github.com> ([fee9327](https://github.com/tj-actions/changed-files/commit/fee9327009ff80c0a0d442f2204944771f0552b1)) - (tj-actions[bot])
|
||||||
|
- Update action.yml ([f991633](https://github.com/tj-actions/changed-files/commit/f991633730ca94b13263b3db2bfe3bb4406050e8)) - (Tonye Jack)
|
||||||
|
- Updated README.md ([#1231](https://github.com/tj-actions/changed-files/issues/1231))
|
||||||
|
|
||||||
|
Co-authored-by: jackton1 <jackton1@users.noreply.github.com> ([1fc4377](https://github.com/tj-actions/changed-files/commit/1fc4377f0376e9e24eb836467b94dc0dbe92087a)) - (tj-actions[bot])
|
||||||
|
- Updated README.md ([#1228](https://github.com/tj-actions/changed-files/issues/1228))
|
||||||
|
|
||||||
|
Co-authored-by: jackton1 <jackton1@users.noreply.github.com> ([cdf9afc](https://github.com/tj-actions/changed-files/commit/cdf9afcec863cb917421feea4e2d3fef708b2449)) - (tj-actions[bot])
|
||||||
|
- Update README.md ([f58fe58](https://github.com/tj-actions/changed-files/commit/f58fe58af9008ac4c45e7caf949ff95791a9deef)) - (Tonye Jack)
|
||||||
|
- Update action.yml ([9ab4230](https://github.com/tj-actions/changed-files/commit/9ab423063bd7d1ee892ecd5a0ce25f81f604e4f4)) - (Tonye Jack)
|
||||||
|
|
||||||
|
## <!-- 7 -->⚙️ Miscellaneous Tasks
|
||||||
|
|
||||||
|
- **deps:** Update typescript-eslint monorepo to v5.59.9 ([#1227](https://github.com/tj-actions/changed-files/issues/1227)) ([b8dd3a1](https://github.com/tj-actions/changed-files/commit/b8dd3a1a069b5eb261603aa081023c3e9689d6a4)) - (renovate[bot])
|
||||||
|
|
||||||
|
## <!-- 9 -->⬆️ Upgrades
|
||||||
|
|
||||||
|
- Upgraded to v36.0.17 ([#1226](https://github.com/tj-actions/changed-files/issues/1226))
|
||||||
|
|
||||||
|
Co-authored-by: jackton1 <jackton1@users.noreply.github.com> ([6e4b6b7](https://github.com/tj-actions/changed-files/commit/6e4b6b77a3fd4d60bd02608dba69c7eae38a117f)) - (tj-actions[bot])
|
||||||
|
|
||||||
# [36.0.17](https://github.com/tj-actions/changed-files/compare/v36.0.16...v36.0.17) - (2023-06-05)
|
# [36.0.17](https://github.com/tj-actions/changed-files/compare/v36.0.16...v36.0.17) - (2023-06-05)
|
||||||
|
|
||||||
## <!-- 7 -->⚙️ Miscellaneous Tasks
|
## <!-- 7 -->⚙️ Miscellaneous Tasks
|
||||||
|
|||||||
49
README.md
49
README.md
@@ -71,6 +71,7 @@ Retrieve all changed files and directories relative to a target branch, preceedi
|
|||||||
> * For monorepos where pulling all the branch history might not be desired, you can omit [`actions/checkout`](https://github.com/actions/checkout#usage) - `fetch-depth` for `pull_request` events.
|
> * For monorepos where pulling all the branch history might not be desired, you can omit [`actions/checkout`](https://github.com/actions/checkout#usage) - `fetch-depth` for `pull_request` events.
|
||||||
> * All multiline inputs should not use double or single quotes since the value is already a string seperated by a newline character. See [Examples](#examples) for more information.
|
> * All multiline inputs should not use double or single quotes since the value is already a string seperated by a newline character. See [Examples](#examples) for more information.
|
||||||
> * Ensure that `persist-credentials` is set to `true` when configuring [`actions/checkout`](https://github.com/actions/checkout#usage) if `fetch-depth` isn't set to `0`.
|
> * Ensure that `persist-credentials` is set to `true` when configuring [`actions/checkout`](https://github.com/actions/checkout#usage) if `fetch-depth` isn't set to `0`.
|
||||||
|
> * For repositories that have PR's generated from forks when configuring [`actions/checkout`](https://github.com/actions/checkout#usage) set the `repository` to `${{ github.event.pull_request.head.repo.full_name }}`. See: [Example](https://github.com/tj-actions/changed-files/blob/main/.github/workflows/test.yml#L47-L51)
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
name: CI
|
name: CI
|
||||||
@@ -171,29 +172,29 @@ Support this project with a :star:
|
|||||||
|
|
||||||
<!-- AUTO-DOC-OUTPUT:START - Do not remove or modify this section -->
|
<!-- AUTO-DOC-OUTPUT:START - Do not remove or modify this section -->
|
||||||
|
|
||||||
| OUTPUT | TYPE | DESCRIPTION |
|
| OUTPUT | TYPE | DESCRIPTION |
|
||||||
|--------------------------------|--------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|--------------------------------|--------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
| added\_files | string | Returns only files that are <br>Added (A). |
|
| added\_files | string | Returns only files that are <br>Added (A). |
|
||||||
| all\_changed\_and\_modified\_files | string | Returns all changed and modified <br>files i.e. *a combination of (ACMRDTUX)* |
|
| all\_changed\_and\_modified\_files | string | Returns all changed and modified <br>files i.e. *a combination of (ACMRDTUX)* |
|
||||||
| all\_changed\_files | string | Returns all changed files i.e. <br>*a combination of all added, copied, modified and renamed files (ACMR)* |
|
| all\_changed\_files | string | Returns all changed files i.e. <br>*a combination of all added, copied, modified and renamed files (ACMR)* |
|
||||||
| all\_modified\_files | string | Returns all changed files i.e. <br>*a combination of all added, copied, modified, renamed and deleted files (ACMRD)*. |
|
| all\_modified\_files | string | Returns all changed files i.e. <br>*a combination of all added, copied, modified, renamed and deleted files (ACMRD)*. |
|
||||||
| all\_old\_new\_renamed\_files | string | Returns only files that are <br>Renamed and list their old <br>and new names. **NOTE:** This <br>requires setting `include_all_old_new_renamed_files` to `true` <br>(R) |
|
| all\_old\_new\_renamed\_files | string | Returns only files that are <br>Renamed and list their old <br>and new names. **NOTE:** This <br>requires setting `include_all_old_new_renamed_files` to `true` <br>(R) |
|
||||||
| any\_changed | string | Returns `true` when any of <br>the filenames provided using the <br>`files` input has changed. i.e. <br>*using a combination of all added, copied, modified and renamed files (ACMR)*. |
|
| any\_changed | string | Returns `true` when any of <br>the filenames provided using the <br>`files*` or `files_ignore*` inputs has changed. i.e. <br>*using a combination of all added, copied, modified and renamed files (ACMR)*. |
|
||||||
| any\_deleted | string | Returns `true` when any of <br>the filenames provided using the <br>`files` input has been deleted. <br>(D) |
|
| any\_deleted | string | Returns `true` when any of <br>the filenames provided using the <br>`files*` or `files_ignore*` inputs has been deleted. <br>(D) |
|
||||||
| any\_modified | string | Returns `true` when any of <br>the filenames provided using the <br>`files` input has been modified. <br>i.e. *using a combination of all added, copied, modified, renamed, and deleted files (ACMRD)*. |
|
| any\_modified | string | Returns `true` when any of <br>the filenames provided using the <br>`files*` or `files_ignore*` inputs has been modified. <br>i.e. *using a combination of all added, copied, modified, renamed, and deleted files (ACMRD)*. |
|
||||||
| copied\_files | string | Returns only files that are <br>Copied (C). |
|
| copied\_files | string | Returns only files that are <br>Copied (C). |
|
||||||
| deleted\_files | string | Returns only files that are <br>Deleted (D). |
|
| deleted\_files | string | Returns only files that are <br>Deleted (D). |
|
||||||
| modified\_files | string | Returns only files that are <br>Modified (M). |
|
| modified\_files | string | Returns only files that are <br>Modified (M). |
|
||||||
| only\_changed | string | Returns `true` when only files <br>provided using the `files` input <br>has changed. i.e. *using a combination of all added, copied, modified and renamed files (ACMR)*. |
|
| only\_changed | string | Returns `true` when only files <br>provided using the `files*` or `files_ignore*` inputs <br>has changed. i.e. *using a combination of all added, copied, modified and renamed files (ACMR)*. |
|
||||||
| only\_deleted | string | Returns `true` when only files <br>provided using the `files` input <br>has been deleted. (D) |
|
| only\_deleted | string | Returns `true` when only files <br>provided using the `files*` or `files_ignore*` inputs <br>has been deleted. (D) |
|
||||||
| only\_modified | string | Returns `true` when only files <br>provided using the `files` input <br>has been modified. (ACMRD). |
|
| only\_modified | string | Returns `true` when only files <br>provided using the `files*` or `files_ignore*` inputs <br>has been modified. (ACMRD). |
|
||||||
| other\_changed\_files | string | Returns all other changed files <br>not listed in the files <br>input i.e. *using a combination of all added, copied, modified and renamed files (ACMR)*. |
|
| other\_changed\_files | string | Returns all other changed files <br>not listed in the files <br>input i.e. *using a combination of all added, copied, modified and renamed files (ACMR)*. |
|
||||||
| other\_deleted\_files | string | Returns all other deleted files <br>not listed in the files <br>input i.e. *a combination of all deleted files (D)* |
|
| other\_deleted\_files | string | Returns all other deleted files <br>not listed in the files <br>input i.e. *a combination of all deleted files (D)* |
|
||||||
| other\_modified\_files | string | Returns all other modified files <br>not listed in the files <br>input i.e. *a combination of all added, copied, modified, and deleted files (ACMRD)* |
|
| other\_modified\_files | string | Returns all other modified files <br>not listed in the files <br>input i.e. *a combination of all added, copied, modified, and deleted files (ACMRD)* |
|
||||||
| renamed\_files | string | Returns only files that are <br>Renamed (R). |
|
| renamed\_files | string | Returns only files that are <br>Renamed (R). |
|
||||||
| type\_changed\_files | string | Returns only files that have <br>their file type changed (T). |
|
| type\_changed\_files | string | Returns only files that have <br>their file type changed (T). |
|
||||||
| unknown\_files | string | Returns only files that are <br>Unknown (X). |
|
| unknown\_files | string | Returns only files that are <br>Unknown (X). |
|
||||||
| unmerged\_files | string | Returns only files that are <br>Unmerged (U). |
|
| unmerged\_files | string | Returns only files that are <br>Unmerged (U). |
|
||||||
|
|
||||||
<!-- AUTO-DOC-OUTPUT:END -->
|
<!-- AUTO-DOC-OUTPUT:END -->
|
||||||
|
|
||||||
@@ -231,7 +232,7 @@ Support this project with a :star:
|
|||||||
| since | string | false | | Get changed files for commits <br>whose timestamp is older than <br>the given time. |
|
| since | string | false | | Get changed files for commits <br>whose timestamp is older than <br>the given time. |
|
||||||
| 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 <br>target branch for pull request <br>events and the previous remote <br>commit of the current branch <br>for push events. |
|
| 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 <br>target branch for pull request <br>events and the previous remote <br>commit of the current branch <br>for push events. |
|
||||||
| until | string | false | | Get changed files for commits <br>whose timestamp is earlier than <br>the given time. |
|
| until | string | false | | Get changed files for commits <br>whose timestamp is earlier than <br>the given time. |
|
||||||
| write\_output\_files | string | false | `"false"` | Write outputs to files in <br>the `.github/outputs` folder by default. |
|
| 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`. |
|
||||||
|
|
||||||
<!-- AUTO-DOC-INPUT:END -->
|
<!-- AUTO-DOC-INPUT:END -->
|
||||||
|
|
||||||
|
|||||||
14
action.yml
14
action.yml
@@ -110,7 +110,7 @@ inputs:
|
|||||||
required: false
|
required: false
|
||||||
default: "false"
|
default: "false"
|
||||||
write_output_files:
|
write_output_files:
|
||||||
description: "Write outputs to files in the `.github/outputs` folder by default."
|
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
|
required: false
|
||||||
default: "false"
|
default: "false"
|
||||||
output_dir:
|
output_dir:
|
||||||
@@ -142,23 +142,23 @@ outputs:
|
|||||||
all_changed_files:
|
all_changed_files:
|
||||||
description: "Returns all changed files i.e. *a combination of all added, copied, modified and renamed files (ACMR)*"
|
description: "Returns all changed files i.e. *a combination of all added, copied, modified and renamed files (ACMR)*"
|
||||||
any_changed:
|
any_changed:
|
||||||
description: "Returns `true` when any of the filenames provided using the `files` input has changed. i.e. *using a combination of all added, copied, modified and renamed files (ACMR)*."
|
description: "Returns `true` when any of the filenames provided using the `files*` or `files_ignore*` inputs has changed. i.e. *using a combination of all added, copied, modified and renamed files (ACMR)*."
|
||||||
only_changed:
|
only_changed:
|
||||||
description: "Returns `true` when only files provided using the `files` input has changed. i.e. *using a combination of all added, copied, modified and renamed files (ACMR)*."
|
description: "Returns `true` when only files provided using the `files*` or `files_ignore*` inputs has changed. i.e. *using a combination of all added, copied, modified and renamed files (ACMR)*."
|
||||||
other_changed_files:
|
other_changed_files:
|
||||||
description: "Returns all other changed files not listed in the files input i.e. *using a combination of all added, copied, modified and renamed files (ACMR)*."
|
description: "Returns all other changed files not listed in the files input i.e. *using a combination of all added, copied, modified and renamed files (ACMR)*."
|
||||||
all_modified_files:
|
all_modified_files:
|
||||||
description: "Returns all changed files i.e. *a combination of all added, copied, modified, renamed and deleted files (ACMRD)*."
|
description: "Returns all changed files i.e. *a combination of all added, copied, modified, renamed and deleted files (ACMRD)*."
|
||||||
any_modified:
|
any_modified:
|
||||||
description: "Returns `true` when any of the filenames provided using the `files` input has been modified. i.e. *using a combination of all added, copied, modified, renamed, and deleted files (ACMRD)*."
|
description: "Returns `true` when any of the filenames provided using the `files*` or `files_ignore*` inputs has been modified. i.e. *using a combination of all added, copied, modified, renamed, and deleted files (ACMRD)*."
|
||||||
only_modified:
|
only_modified:
|
||||||
description: "Returns `true` when only files provided using the `files` input has been modified. (ACMRD)."
|
description: "Returns `true` when only files provided using the `files*` or `files_ignore*` inputs has been modified. (ACMRD)."
|
||||||
other_modified_files:
|
other_modified_files:
|
||||||
description: "Returns all other modified files not listed in the files input i.e. *a combination of all added, copied, modified, and deleted files (ACMRD)*"
|
description: "Returns all other modified files not listed in the files input i.e. *a combination of all added, copied, modified, and deleted files (ACMRD)*"
|
||||||
any_deleted:
|
any_deleted:
|
||||||
description: "Returns `true` when any of the filenames provided using the `files` input has been deleted. (D)"
|
description: "Returns `true` when any of the filenames provided using the `files*` or `files_ignore*` inputs has been deleted. (D)"
|
||||||
only_deleted:
|
only_deleted:
|
||||||
description: "Returns `true` when only files provided using the `files` input has been deleted. (D)"
|
description: "Returns `true` when only files provided using the `files*` or `files_ignore*` inputs has been deleted. (D)"
|
||||||
other_deleted_files:
|
other_deleted_files:
|
||||||
description: "Returns all other deleted files not listed in the files input i.e. *a combination of all deleted files (D)*"
|
description: "Returns all other deleted files not listed in the files input i.e. *a combination of all deleted files (D)*"
|
||||||
|
|
||||||
|
|||||||
817
dist/index.js
generated
vendored
817
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
51
dist/licenses.txt
generated
vendored
51
dist/licenses.txt
generated
vendored
@@ -134,6 +134,57 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
lodash
|
||||||
|
MIT
|
||||||
|
Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
|
||||||
|
|
||||||
|
Based on Underscore.js, copyright Jeremy Ashkenas,
|
||||||
|
DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
|
||||||
|
|
||||||
|
This software consists of voluntary contributions made by many
|
||||||
|
individuals. For exact contribution history, see the revision history
|
||||||
|
available at https://github.com/lodash/lodash
|
||||||
|
|
||||||
|
The following license applies to all parts of this software except as
|
||||||
|
documented below:
|
||||||
|
|
||||||
|
====
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
====
|
||||||
|
|
||||||
|
Copyright and related rights for sample code are waived via CC0. Sample
|
||||||
|
code is defined as all source code displayed within the prose of the
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
CC0: http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
|
||||||
|
====
|
||||||
|
|
||||||
|
Files located in the node_modules and vendor directories are externally
|
||||||
|
maintained libraries used by this software which have their own
|
||||||
|
licenses; we recommend you read them, as their terms may differ from the
|
||||||
|
terms above.
|
||||||
|
|
||||||
|
|
||||||
micromatch
|
micromatch
|
||||||
MIT
|
MIT
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|||||||
@@ -34,15 +34,17 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "1.10.0",
|
"@actions/core": "1.10.0",
|
||||||
"@actions/exec": "1.1.1",
|
"@actions/exec": "1.1.1",
|
||||||
|
"lodash": "^4.17.15",
|
||||||
"micromatch": "^4.0.5"
|
"micromatch": "^4.0.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "29.5.2",
|
"@types/jest": "29.5.2",
|
||||||
|
"@types/lodash": "^4.14.195",
|
||||||
"@types/micromatch": "^4.0.2",
|
"@types/micromatch": "^4.0.2",
|
||||||
"@types/node": "20.2.1",
|
"@types/node": "20.2.1",
|
||||||
"@types/uuid": "9.0.1",
|
"@types/uuid": "9.0.2",
|
||||||
"@typescript-eslint/eslint-plugin": "5.59.9",
|
"@typescript-eslint/eslint-plugin": "5.59.11",
|
||||||
"@typescript-eslint/parser": "5.59.9",
|
"@typescript-eslint/parser": "5.59.11",
|
||||||
"@vercel/ncc": "0.36.1",
|
"@vercel/ncc": "0.36.1",
|
||||||
"eslint": "8.42.0",
|
"eslint": "8.42.0",
|
||||||
"eslint-plugin-github": "4.8.0",
|
"eslint-plugin-github": "4.8.0",
|
||||||
|
|||||||
@@ -4,11 +4,12 @@ import {DiffResult} from './commitSha'
|
|||||||
import {Inputs} from './inputs'
|
import {Inputs} from './inputs'
|
||||||
import {
|
import {
|
||||||
getDirnameMaxDepth,
|
getDirnameMaxDepth,
|
||||||
gitDiff,
|
|
||||||
gitRenamedFiles,
|
gitRenamedFiles,
|
||||||
gitSubmoduleDiffSHA,
|
gitSubmoduleDiffSHA,
|
||||||
jsonOutput
|
jsonOutput,
|
||||||
|
getAllChangedFiles
|
||||||
} from './utils'
|
} from './utils'
|
||||||
|
import flatten from 'lodash/flatten'
|
||||||
|
|
||||||
export const getRenamedFiles = async ({
|
export const getRenamedFiles = async ({
|
||||||
inputs,
|
inputs,
|
||||||
@@ -68,30 +69,37 @@ export const getRenamedFiles = async ({
|
|||||||
return renamedFiles.join(inputs.oldNewFilesSeparator)
|
return renamedFiles.join(inputs.oldNewFilesSeparator)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getDiffFiles = async ({
|
export enum ChangeTypeEnum {
|
||||||
inputs,
|
Added = 'A',
|
||||||
|
Copied = 'C',
|
||||||
|
Deleted = 'D',
|
||||||
|
Modified = 'M',
|
||||||
|
Renamed = 'R',
|
||||||
|
TypeChanged = 'T',
|
||||||
|
Unmerged = 'U',
|
||||||
|
Unknown = 'X'
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ChangedFiles = {
|
||||||
|
[key in ChangeTypeEnum]: string[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getAllDiffFiles = async ({
|
||||||
workingDirectory,
|
workingDirectory,
|
||||||
hasSubmodule,
|
hasSubmodule,
|
||||||
diffResult,
|
diffResult,
|
||||||
diffFilter,
|
|
||||||
filePatterns = [],
|
|
||||||
submodulePaths
|
submodulePaths
|
||||||
}: {
|
}: {
|
||||||
inputs: Inputs
|
|
||||||
workingDirectory: string
|
workingDirectory: string
|
||||||
hasSubmodule: boolean
|
hasSubmodule: boolean
|
||||||
diffResult: DiffResult
|
diffResult: DiffResult
|
||||||
diffFilter: string
|
|
||||||
filePatterns?: string[]
|
|
||||||
submodulePaths: string[]
|
submodulePaths: string[]
|
||||||
}): Promise<string> => {
|
}): Promise<ChangedFiles> => {
|
||||||
let files = await gitDiff({
|
const files = await getAllChangedFiles({
|
||||||
cwd: workingDirectory,
|
cwd: workingDirectory,
|
||||||
sha1: diffResult.previousSha,
|
sha1: diffResult.previousSha,
|
||||||
sha2: diffResult.currentSha,
|
sha2: diffResult.currentSha,
|
||||||
diff: diffResult.diff,
|
diff: diffResult.diff
|
||||||
diffFilter,
|
|
||||||
filePatterns
|
|
||||||
})
|
})
|
||||||
|
|
||||||
if (hasSubmodule) {
|
if (hasSubmodule) {
|
||||||
@@ -110,32 +118,107 @@ export const getDiffFiles = async ({
|
|||||||
)
|
)
|
||||||
|
|
||||||
if (submoduleShaResult.currentSha && submoduleShaResult.previousSha) {
|
if (submoduleShaResult.currentSha && submoduleShaResult.previousSha) {
|
||||||
const submoduleFiles = await gitDiff({
|
const submoduleFiles = await getAllChangedFiles({
|
||||||
cwd: submoduleWorkingDirectory,
|
cwd: submoduleWorkingDirectory,
|
||||||
sha1: submoduleShaResult.previousSha,
|
sha1: submoduleShaResult.previousSha,
|
||||||
sha2: submoduleShaResult.currentSha,
|
sha2: submoduleShaResult.currentSha,
|
||||||
diff: diffResult.diff,
|
diff: diffResult.diff,
|
||||||
diffFilter,
|
|
||||||
isSubmodule: true,
|
isSubmodule: true,
|
||||||
filePatterns,
|
|
||||||
parentDir: submodulePath
|
parentDir: submodulePath
|
||||||
})
|
})
|
||||||
files.push(...submoduleFiles)
|
|
||||||
|
for (const changeType of Object.keys(
|
||||||
|
submoduleFiles
|
||||||
|
) as ChangeTypeEnum[]) {
|
||||||
|
if (!files[changeType]) {
|
||||||
|
files[changeType] = []
|
||||||
|
}
|
||||||
|
files[changeType].push(...submoduleFiles[changeType])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inputs.dirNames) {
|
return files
|
||||||
files = files.map(file =>
|
}
|
||||||
getDirnameMaxDepth({
|
|
||||||
pathStr: file,
|
function* getChangeTypeFilesGenerator({
|
||||||
dirNamesMaxDepth: inputs.dirNamesMaxDepth,
|
inputs,
|
||||||
excludeCurrentDir:
|
changedFiles,
|
||||||
inputs.dirNamesExcludeRoot || inputs.dirNamesExcludeCurrentDir
|
changeTypes
|
||||||
})
|
}: {
|
||||||
)
|
inputs: Inputs
|
||||||
files = [...new Set(files)]
|
changedFiles: ChangedFiles
|
||||||
|
changeTypes: ChangeTypeEnum[]
|
||||||
|
}): Generator<string> {
|
||||||
|
for (const changeType of changeTypes) {
|
||||||
|
const files = changedFiles[changeType] || []
|
||||||
|
for (const file of files) {
|
||||||
|
if (inputs.dirNames) {
|
||||||
|
yield getDirnameMaxDepth({
|
||||||
|
pathStr: file,
|
||||||
|
dirNamesMaxDepth: inputs.dirNamesMaxDepth,
|
||||||
|
excludeCurrentDir:
|
||||||
|
inputs.dirNamesExcludeRoot || inputs.dirNamesExcludeCurrentDir
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
yield file
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getChangeTypeFiles = async ({
|
||||||
|
inputs,
|
||||||
|
changedFiles,
|
||||||
|
changeTypes
|
||||||
|
}: {
|
||||||
|
inputs: Inputs
|
||||||
|
changedFiles: ChangedFiles
|
||||||
|
changeTypes: ChangeTypeEnum[]
|
||||||
|
}): Promise<string> => {
|
||||||
|
const files = [
|
||||||
|
...new Set(getChangeTypeFilesGenerator({inputs, changedFiles, changeTypes}))
|
||||||
|
]
|
||||||
|
|
||||||
|
if (inputs.json) {
|
||||||
|
return jsonOutput({value: files, shouldEscape: inputs.escapeJson})
|
||||||
|
}
|
||||||
|
|
||||||
|
return files.join(inputs.separator)
|
||||||
|
}
|
||||||
|
|
||||||
|
function* getAllChangeTypeFilesGenerator({
|
||||||
|
inputs,
|
||||||
|
changedFiles
|
||||||
|
}: {
|
||||||
|
inputs: Inputs
|
||||||
|
changedFiles: ChangedFiles
|
||||||
|
}): Generator<string> {
|
||||||
|
for (const file of flatten(Object.values(changedFiles))) {
|
||||||
|
if (inputs.dirNames) {
|
||||||
|
yield getDirnameMaxDepth({
|
||||||
|
pathStr: file,
|
||||||
|
dirNamesMaxDepth: inputs.dirNamesMaxDepth,
|
||||||
|
excludeCurrentDir:
|
||||||
|
inputs.dirNamesExcludeRoot || inputs.dirNamesExcludeCurrentDir
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
yield file
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getAllChangeTypeFiles = async ({
|
||||||
|
inputs,
|
||||||
|
changedFiles
|
||||||
|
}: {
|
||||||
|
inputs: Inputs
|
||||||
|
changedFiles: ChangedFiles
|
||||||
|
}): Promise<string> => {
|
||||||
|
const files = [
|
||||||
|
...new Set(getAllChangeTypeFilesGenerator({inputs, changedFiles}))
|
||||||
|
]
|
||||||
|
|
||||||
if (inputs.json) {
|
if (inputs.json) {
|
||||||
return jsonOutput({value: files, shouldEscape: inputs.escapeJson})
|
return jsonOutput({value: files, shouldEscape: inputs.escapeJson})
|
||||||
|
|||||||
@@ -370,11 +370,22 @@ export const getSHAForPullRequestEvent = async (
|
|||||||
|
|
||||||
if (!previousSha) {
|
if (!previousSha) {
|
||||||
if (inputs.sinceLastRemoteCommit) {
|
if (inputs.sinceLastRemoteCommit) {
|
||||||
previousSha = env.GITHUB_EVENT_BEFORE
|
previousSha =
|
||||||
|
env.GITHUB_EVENT_BEFORE ||
|
||||||
|
(await getRemoteBranchHeadSha({
|
||||||
|
cwd: workingDirectory,
|
||||||
|
branch: currentBranch
|
||||||
|
}))
|
||||||
|
|
||||||
if (
|
if (
|
||||||
(await verifyCommitSha({sha: previousSha, cwd: workingDirectory})) !== 0
|
!previousSha ||
|
||||||
|
(previousSha &&
|
||||||
|
(await verifyCommitSha({sha: previousSha, cwd: workingDirectory})) !==
|
||||||
|
0)
|
||||||
) {
|
) {
|
||||||
|
core.warning(
|
||||||
|
'Unable to locate the remote branch head sha. Falling back to the pull request base sha.'
|
||||||
|
)
|
||||||
previousSha = env.GITHUB_EVENT_PULL_REQUEST_BASE_SHA
|
previousSha = env.GITHUB_EVENT_PULL_REQUEST_BASE_SHA
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -469,9 +480,28 @@ export const getSHAForPullRequestEvent = async (
|
|||||||
core.error(
|
core.error(
|
||||||
`Similar commit hashes detected: previous sha: ${previousSha} is equivalent to the current sha: ${currentSha}.`
|
`Similar commit hashes detected: previous sha: ${previousSha} is equivalent to the current sha: ${currentSha}.`
|
||||||
)
|
)
|
||||||
core.error(
|
// This occurs if a PR is created from a forked repository and the event is pull_request_target.
|
||||||
`Please verify that both commits are valid, and increase the fetch_depth to a number higher than ${inputs.fetchDepth}.`
|
// - name: Checkout to branch
|
||||||
)
|
// uses: actions/checkout@v3
|
||||||
|
// Without setting the repository to use the same repository as the pull request will cause the previousSha
|
||||||
|
// to be the same as the currentSha since the currentSha cannot be found in the local history.
|
||||||
|
// The solution is to use:
|
||||||
|
// - name: Checkout to branch
|
||||||
|
// uses: actions/checkout@v3
|
||||||
|
// with:
|
||||||
|
// repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||||
|
if (env.GITHUB_EVENT_NAME === 'pull_request_target') {
|
||||||
|
core.warning(
|
||||||
|
'If this pull request is from a forked repository, please set the checkout action `repository` input to the same repository as the pull request.'
|
||||||
|
)
|
||||||
|
core.warning(
|
||||||
|
'This can be done by setting actions/checkout `repository` to ${{ github.event.pull_request.head.repo.full_name }}'
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
core.error(
|
||||||
|
`Please verify that both commits are valid, and increase the fetch_depth to a number higher than ${inputs.fetchDepth}.`
|
||||||
|
)
|
||||||
|
}
|
||||||
throw new Error('Similar commit hashes detected.')
|
throw new Error('Similar commit hashes detected.')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
12
src/env.ts
12
src/env.ts
@@ -15,6 +15,7 @@ export type Env = {
|
|||||||
GITHUB_EVENT_PULL_REQUEST_NUMBER: string
|
GITHUB_EVENT_PULL_REQUEST_NUMBER: string
|
||||||
GITHUB_EVENT_PULL_REQUEST_BASE_SHA: string
|
GITHUB_EVENT_PULL_REQUEST_BASE_SHA: string
|
||||||
GITHUB_EVENT_PULL_REQUEST_HEAD_SHA: string
|
GITHUB_EVENT_PULL_REQUEST_HEAD_SHA: string
|
||||||
|
GITHUB_EVENT_NAME: string
|
||||||
}
|
}
|
||||||
|
|
||||||
type GithubEvent = {
|
type GithubEvent = {
|
||||||
@@ -35,8 +36,10 @@ type GithubEvent = {
|
|||||||
}
|
}
|
||||||
before?: string
|
before?: string
|
||||||
base_ref?: string
|
base_ref?: string
|
||||||
head_repo?: {
|
head?: {
|
||||||
fork: string
|
repo?: {
|
||||||
|
fork: string
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,13 +60,14 @@ export const getEnv = async (): Promise<Env> => {
|
|||||||
GITHUB_EVENT_BASE_REF: eventJson.base_ref || '',
|
GITHUB_EVENT_BASE_REF: eventJson.base_ref || '',
|
||||||
GITHUB_EVENT_RELEASE_TARGET_COMMITISH:
|
GITHUB_EVENT_RELEASE_TARGET_COMMITISH:
|
||||||
eventJson.release?.target_commitish || '',
|
eventJson.release?.target_commitish || '',
|
||||||
GITHUB_EVENT_HEAD_REPO_FORK: eventJson.head_repo?.fork || '',
|
GITHUB_EVENT_HEAD_REPO_FORK: eventJson.head?.repo?.fork || '',
|
||||||
GITHUB_EVENT_PULL_REQUEST_NUMBER: eventJson.pull_request?.number || '',
|
GITHUB_EVENT_PULL_REQUEST_NUMBER: eventJson.pull_request?.number || '',
|
||||||
GITHUB_EVENT_PULL_REQUEST_BASE_SHA: eventJson.pull_request?.base?.sha || '',
|
GITHUB_EVENT_PULL_REQUEST_BASE_SHA: eventJson.pull_request?.base?.sha || '',
|
||||||
GITHUB_EVENT_PULL_REQUEST_HEAD_SHA: eventJson.pull_request?.head?.sha || '',
|
GITHUB_EVENT_PULL_REQUEST_HEAD_SHA: eventJson.pull_request?.head?.sha || '',
|
||||||
GITHUB_EVENT_FORCED: eventJson.forced || '',
|
GITHUB_EVENT_FORCED: eventJson.forced || '',
|
||||||
GITHUB_REF_NAME: process.env.GITHUB_REF_NAME || '',
|
GITHUB_REF_NAME: process.env.GITHUB_REF_NAME || '',
|
||||||
GITHUB_REF: process.env.GITHUB_REF || '',
|
GITHUB_REF: process.env.GITHUB_REF || '',
|
||||||
GITHUB_WORKSPACE: process.env.GITHUB_WORKSPACE || ''
|
GITHUB_WORKSPACE: process.env.GITHUB_WORKSPACE || '',
|
||||||
|
GITHUB_EVENT_NAME: process.env.GITHUB_EVENT_NAME || ''
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
199
src/main.ts
199
src/main.ts
@@ -1,15 +1,22 @@
|
|||||||
import * as core from '@actions/core'
|
import * as core from '@actions/core'
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
import {getDiffFiles, getRenamedFiles} from './changedFiles'
|
|
||||||
import {
|
import {
|
||||||
|
getAllChangeTypeFiles,
|
||||||
|
getAllDiffFiles,
|
||||||
|
getChangeTypeFiles,
|
||||||
|
getRenamedFiles,
|
||||||
|
ChangeTypeEnum
|
||||||
|
} from './changedFiles'
|
||||||
|
import {
|
||||||
|
DiffResult,
|
||||||
getSHAForPullRequestEvent,
|
getSHAForPullRequestEvent,
|
||||||
getSHAForPushEvent,
|
getSHAForPushEvent
|
||||||
DiffResult
|
|
||||||
} from './commitSha'
|
} from './commitSha'
|
||||||
import {getEnv} from './env'
|
import {getEnv} from './env'
|
||||||
import {getInputs} from './inputs'
|
import {getInputs} from './inputs'
|
||||||
import {
|
import {
|
||||||
getFilePatterns,
|
getFilePatterns,
|
||||||
|
getFilteredChangedFiles,
|
||||||
getSubmodulePath,
|
getSubmodulePath,
|
||||||
isRepoShallow,
|
isRepoShallow,
|
||||||
setOutput,
|
setOutput,
|
||||||
@@ -67,7 +74,7 @@ export async function run(): Promise<void> {
|
|||||||
let diffResult: DiffResult
|
let diffResult: DiffResult
|
||||||
|
|
||||||
if (!env.GITHUB_EVENT_PULL_REQUEST_BASE_REF) {
|
if (!env.GITHUB_EVENT_PULL_REQUEST_BASE_REF) {
|
||||||
core.info('Running on a push event...')
|
core.info(`Running on a ${env.GITHUB_EVENT_NAME || 'push'} event...`)
|
||||||
diffResult = await getSHAForPushEvent(
|
diffResult = await getSHAForPushEvent(
|
||||||
inputs,
|
inputs,
|
||||||
env,
|
env,
|
||||||
@@ -78,7 +85,9 @@ export async function run(): Promise<void> {
|
|||||||
isTag
|
isTag
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
core.info('Running on a pull request event...')
|
core.info(
|
||||||
|
`Running on a ${env.GITHUB_EVENT_NAME || 'pull_request'} event...`
|
||||||
|
)
|
||||||
diffResult = await getSHAForPullRequestEvent(
|
diffResult = await getSHAForPullRequestEvent(
|
||||||
inputs,
|
inputs,
|
||||||
env,
|
env,
|
||||||
@@ -103,16 +112,27 @@ export async function run(): Promise<void> {
|
|||||||
inputs,
|
inputs,
|
||||||
workingDirectory
|
workingDirectory
|
||||||
})
|
})
|
||||||
|
core.debug(`File patterns: ${filePatterns}`)
|
||||||
|
|
||||||
const addedFiles = await getDiffFiles({
|
const allDiffFiles = await getAllDiffFiles({
|
||||||
inputs,
|
|
||||||
workingDirectory,
|
workingDirectory,
|
||||||
hasSubmodule,
|
hasSubmodule,
|
||||||
diffResult,
|
diffResult,
|
||||||
diffFilter: 'A',
|
|
||||||
filePatterns,
|
|
||||||
submodulePaths
|
submodulePaths
|
||||||
})
|
})
|
||||||
|
core.debug(`All diff files: ${JSON.stringify(allDiffFiles)}`)
|
||||||
|
|
||||||
|
const allFilteredDiffFiles = await getFilteredChangedFiles({
|
||||||
|
allDiffFiles,
|
||||||
|
filePatterns
|
||||||
|
})
|
||||||
|
core.debug(`All filtered diff files: ${JSON.stringify(allFilteredDiffFiles)}`)
|
||||||
|
|
||||||
|
const addedFiles = await getChangeTypeFiles({
|
||||||
|
inputs,
|
||||||
|
changedFiles: allFilteredDiffFiles,
|
||||||
|
changeTypes: [ChangeTypeEnum.Added]
|
||||||
|
})
|
||||||
core.debug(`Added files: ${addedFiles}`)
|
core.debug(`Added files: ${addedFiles}`)
|
||||||
await setOutput({
|
await setOutput({
|
||||||
key: 'added_files',
|
key: 'added_files',
|
||||||
@@ -120,14 +140,10 @@ export async function run(): Promise<void> {
|
|||||||
inputs
|
inputs
|
||||||
})
|
})
|
||||||
|
|
||||||
const copiedFiles = await getDiffFiles({
|
const copiedFiles = await getChangeTypeFiles({
|
||||||
inputs,
|
inputs,
|
||||||
workingDirectory,
|
changedFiles: allFilteredDiffFiles,
|
||||||
hasSubmodule,
|
changeTypes: [ChangeTypeEnum.Copied]
|
||||||
diffResult,
|
|
||||||
diffFilter: 'C',
|
|
||||||
filePatterns,
|
|
||||||
submodulePaths
|
|
||||||
})
|
})
|
||||||
core.debug(`Copied files: ${copiedFiles}`)
|
core.debug(`Copied files: ${copiedFiles}`)
|
||||||
await setOutput({
|
await setOutput({
|
||||||
@@ -136,14 +152,10 @@ export async function run(): Promise<void> {
|
|||||||
inputs
|
inputs
|
||||||
})
|
})
|
||||||
|
|
||||||
const modifiedFiles = await getDiffFiles({
|
const modifiedFiles = await getChangeTypeFiles({
|
||||||
inputs,
|
inputs,
|
||||||
workingDirectory,
|
changedFiles: allFilteredDiffFiles,
|
||||||
hasSubmodule,
|
changeTypes: [ChangeTypeEnum.Modified]
|
||||||
diffResult,
|
|
||||||
diffFilter: 'M',
|
|
||||||
filePatterns,
|
|
||||||
submodulePaths
|
|
||||||
})
|
})
|
||||||
core.debug(`Modified files: ${modifiedFiles}`)
|
core.debug(`Modified files: ${modifiedFiles}`)
|
||||||
await setOutput({
|
await setOutput({
|
||||||
@@ -152,14 +164,10 @@ export async function run(): Promise<void> {
|
|||||||
inputs
|
inputs
|
||||||
})
|
})
|
||||||
|
|
||||||
const renamedFiles = await getDiffFiles({
|
const renamedFiles = await getChangeTypeFiles({
|
||||||
inputs,
|
inputs,
|
||||||
workingDirectory,
|
changedFiles: allFilteredDiffFiles,
|
||||||
hasSubmodule,
|
changeTypes: [ChangeTypeEnum.Renamed]
|
||||||
diffResult,
|
|
||||||
diffFilter: 'R',
|
|
||||||
filePatterns,
|
|
||||||
submodulePaths
|
|
||||||
})
|
})
|
||||||
core.debug(`Renamed files: ${renamedFiles}`)
|
core.debug(`Renamed files: ${renamedFiles}`)
|
||||||
await setOutput({
|
await setOutput({
|
||||||
@@ -168,14 +176,10 @@ export async function run(): Promise<void> {
|
|||||||
inputs
|
inputs
|
||||||
})
|
})
|
||||||
|
|
||||||
const typeChangedFiles = await getDiffFiles({
|
const typeChangedFiles = await getChangeTypeFiles({
|
||||||
inputs,
|
inputs,
|
||||||
workingDirectory,
|
changedFiles: allFilteredDiffFiles,
|
||||||
hasSubmodule,
|
changeTypes: [ChangeTypeEnum.TypeChanged]
|
||||||
diffResult,
|
|
||||||
diffFilter: 'T',
|
|
||||||
filePatterns,
|
|
||||||
submodulePaths
|
|
||||||
})
|
})
|
||||||
core.debug(`Type changed files: ${typeChangedFiles}`)
|
core.debug(`Type changed files: ${typeChangedFiles}`)
|
||||||
await setOutput({
|
await setOutput({
|
||||||
@@ -184,14 +188,10 @@ export async function run(): Promise<void> {
|
|||||||
inputs
|
inputs
|
||||||
})
|
})
|
||||||
|
|
||||||
const unmergedFiles = await getDiffFiles({
|
const unmergedFiles = await getChangeTypeFiles({
|
||||||
inputs,
|
inputs,
|
||||||
workingDirectory,
|
changedFiles: allFilteredDiffFiles,
|
||||||
hasSubmodule,
|
changeTypes: [ChangeTypeEnum.Unmerged]
|
||||||
diffResult,
|
|
||||||
diffFilter: 'U',
|
|
||||||
filePatterns,
|
|
||||||
submodulePaths
|
|
||||||
})
|
})
|
||||||
core.debug(`Unmerged files: ${unmergedFiles}`)
|
core.debug(`Unmerged files: ${unmergedFiles}`)
|
||||||
await setOutput({
|
await setOutput({
|
||||||
@@ -200,14 +200,10 @@ export async function run(): Promise<void> {
|
|||||||
inputs
|
inputs
|
||||||
})
|
})
|
||||||
|
|
||||||
const unknownFiles = await getDiffFiles({
|
const unknownFiles = await getChangeTypeFiles({
|
||||||
inputs,
|
inputs,
|
||||||
workingDirectory,
|
changedFiles: allFilteredDiffFiles,
|
||||||
hasSubmodule,
|
changeTypes: [ChangeTypeEnum.Unknown]
|
||||||
diffResult,
|
|
||||||
diffFilter: 'X',
|
|
||||||
filePatterns,
|
|
||||||
submodulePaths
|
|
||||||
})
|
})
|
||||||
core.debug(`Unknown files: ${unknownFiles}`)
|
core.debug(`Unknown files: ${unknownFiles}`)
|
||||||
await setOutput({
|
await setOutput({
|
||||||
@@ -216,14 +212,9 @@ export async function run(): Promise<void> {
|
|||||||
inputs
|
inputs
|
||||||
})
|
})
|
||||||
|
|
||||||
const allChangedAndModifiedFiles = await getDiffFiles({
|
const allChangedAndModifiedFiles = await getAllChangeTypeFiles({
|
||||||
inputs,
|
inputs,
|
||||||
workingDirectory,
|
changedFiles: allFilteredDiffFiles
|
||||||
hasSubmodule,
|
|
||||||
diffResult,
|
|
||||||
diffFilter: 'ACDMRTUX',
|
|
||||||
filePatterns,
|
|
||||||
submodulePaths
|
|
||||||
})
|
})
|
||||||
core.debug(`All changed and modified files: ${allChangedAndModifiedFiles}`)
|
core.debug(`All changed and modified files: ${allChangedAndModifiedFiles}`)
|
||||||
await setOutput({
|
await setOutput({
|
||||||
@@ -232,14 +223,15 @@ export async function run(): Promise<void> {
|
|||||||
inputs
|
inputs
|
||||||
})
|
})
|
||||||
|
|
||||||
const allChangedFiles = await getDiffFiles({
|
const allChangedFiles = await getChangeTypeFiles({
|
||||||
inputs,
|
inputs,
|
||||||
workingDirectory,
|
changedFiles: allFilteredDiffFiles,
|
||||||
hasSubmodule,
|
changeTypes: [
|
||||||
diffResult,
|
ChangeTypeEnum.Added,
|
||||||
diffFilter: 'ACMR',
|
ChangeTypeEnum.Copied,
|
||||||
filePatterns,
|
ChangeTypeEnum.Modified,
|
||||||
submodulePaths
|
ChangeTypeEnum.Renamed
|
||||||
|
]
|
||||||
})
|
})
|
||||||
core.debug(`All changed files: ${allChangedFiles}`)
|
core.debug(`All changed files: ${allChangedFiles}`)
|
||||||
await setOutput({
|
await setOutput({
|
||||||
@@ -254,13 +246,15 @@ export async function run(): Promise<void> {
|
|||||||
inputs
|
inputs
|
||||||
})
|
})
|
||||||
|
|
||||||
const allOtherChangedFiles = await getDiffFiles({
|
const allOtherChangedFiles = await getChangeTypeFiles({
|
||||||
inputs,
|
inputs,
|
||||||
workingDirectory,
|
changedFiles: allDiffFiles,
|
||||||
hasSubmodule,
|
changeTypes: [
|
||||||
diffResult,
|
ChangeTypeEnum.Added,
|
||||||
diffFilter: 'ACMR',
|
ChangeTypeEnum.Copied,
|
||||||
submodulePaths
|
ChangeTypeEnum.Modified,
|
||||||
|
ChangeTypeEnum.Renamed
|
||||||
|
]
|
||||||
})
|
})
|
||||||
core.debug(`All other changed files: ${allOtherChangedFiles}`)
|
core.debug(`All other changed files: ${allOtherChangedFiles}`)
|
||||||
|
|
||||||
@@ -271,7 +265,9 @@ export async function run(): Promise<void> {
|
|||||||
)
|
)
|
||||||
|
|
||||||
const onlyChanged =
|
const onlyChanged =
|
||||||
otherChangedFiles.length === 0 && allChangedFiles.length > 0
|
otherChangedFiles.length === 0 &&
|
||||||
|
allChangedFiles.length > 0 &&
|
||||||
|
filePatterns.length > 0
|
||||||
|
|
||||||
await setOutput({
|
await setOutput({
|
||||||
key: 'only_changed',
|
key: 'only_changed',
|
||||||
@@ -285,14 +281,16 @@ export async function run(): Promise<void> {
|
|||||||
inputs
|
inputs
|
||||||
})
|
})
|
||||||
|
|
||||||
const allModifiedFiles = await getDiffFiles({
|
const allModifiedFiles = await getChangeTypeFiles({
|
||||||
inputs,
|
inputs,
|
||||||
workingDirectory,
|
changedFiles: allFilteredDiffFiles,
|
||||||
hasSubmodule,
|
changeTypes: [
|
||||||
diffResult,
|
ChangeTypeEnum.Added,
|
||||||
diffFilter: 'ACMRD',
|
ChangeTypeEnum.Copied,
|
||||||
filePatterns,
|
ChangeTypeEnum.Modified,
|
||||||
submodulePaths
|
ChangeTypeEnum.Renamed,
|
||||||
|
ChangeTypeEnum.Deleted
|
||||||
|
]
|
||||||
})
|
})
|
||||||
core.debug(`All modified files: ${allModifiedFiles}`)
|
core.debug(`All modified files: ${allModifiedFiles}`)
|
||||||
await setOutput({
|
await setOutput({
|
||||||
@@ -307,13 +305,16 @@ export async function run(): Promise<void> {
|
|||||||
inputs
|
inputs
|
||||||
})
|
})
|
||||||
|
|
||||||
const allOtherModifiedFiles = await getDiffFiles({
|
const allOtherModifiedFiles = await getChangeTypeFiles({
|
||||||
inputs,
|
inputs,
|
||||||
workingDirectory,
|
changedFiles: allDiffFiles,
|
||||||
hasSubmodule,
|
changeTypes: [
|
||||||
diffResult,
|
ChangeTypeEnum.Added,
|
||||||
diffFilter: 'ACMRD',
|
ChangeTypeEnum.Copied,
|
||||||
submodulePaths
|
ChangeTypeEnum.Modified,
|
||||||
|
ChangeTypeEnum.Renamed,
|
||||||
|
ChangeTypeEnum.Deleted
|
||||||
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
const otherModifiedFiles = allOtherModifiedFiles
|
const otherModifiedFiles = allOtherModifiedFiles
|
||||||
@@ -323,7 +324,9 @@ export async function run(): Promise<void> {
|
|||||||
)
|
)
|
||||||
|
|
||||||
const onlyModified =
|
const onlyModified =
|
||||||
otherModifiedFiles.length === 0 && allModifiedFiles.length > 0
|
otherModifiedFiles.length === 0 &&
|
||||||
|
allModifiedFiles.length > 0 &&
|
||||||
|
filePatterns.length > 0
|
||||||
|
|
||||||
await setOutput({
|
await setOutput({
|
||||||
key: 'only_modified',
|
key: 'only_modified',
|
||||||
@@ -337,14 +340,10 @@ export async function run(): Promise<void> {
|
|||||||
inputs
|
inputs
|
||||||
})
|
})
|
||||||
|
|
||||||
const deletedFiles = await getDiffFiles({
|
const deletedFiles = await getChangeTypeFiles({
|
||||||
inputs,
|
inputs,
|
||||||
workingDirectory,
|
changedFiles: allFilteredDiffFiles,
|
||||||
hasSubmodule,
|
changeTypes: [ChangeTypeEnum.Deleted]
|
||||||
diffResult,
|
|
||||||
diffFilter: 'D',
|
|
||||||
filePatterns,
|
|
||||||
submodulePaths
|
|
||||||
})
|
})
|
||||||
core.debug(`Deleted files: ${deletedFiles}`)
|
core.debug(`Deleted files: ${deletedFiles}`)
|
||||||
await setOutput({
|
await setOutput({
|
||||||
@@ -359,13 +358,10 @@ export async function run(): Promise<void> {
|
|||||||
inputs
|
inputs
|
||||||
})
|
})
|
||||||
|
|
||||||
const allOtherDeletedFiles = await getDiffFiles({
|
const allOtherDeletedFiles = await getChangeTypeFiles({
|
||||||
inputs,
|
inputs,
|
||||||
workingDirectory,
|
changedFiles: allDiffFiles,
|
||||||
hasSubmodule,
|
changeTypes: [ChangeTypeEnum.Deleted]
|
||||||
diffResult,
|
|
||||||
diffFilter: 'D',
|
|
||||||
submodulePaths
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const otherDeletedFiles = allOtherDeletedFiles
|
const otherDeletedFiles = allOtherDeletedFiles
|
||||||
@@ -374,7 +370,10 @@ export async function run(): Promise<void> {
|
|||||||
filePath => !deletedFiles.split(inputs.separator).includes(filePath)
|
filePath => !deletedFiles.split(inputs.separator).includes(filePath)
|
||||||
)
|
)
|
||||||
|
|
||||||
const onlyDeleted = otherDeletedFiles.length === 0 && deletedFiles.length > 0
|
const onlyDeleted =
|
||||||
|
otherDeletedFiles.length === 0 &&
|
||||||
|
deletedFiles.length > 0 &&
|
||||||
|
filePatterns.length > 0
|
||||||
|
|
||||||
await setOutput({
|
await setOutput({
|
||||||
key: 'only_deleted',
|
key: 'only_deleted',
|
||||||
|
|||||||
89
src/utils.ts
89
src/utils.ts
@@ -5,6 +5,7 @@ import {createReadStream, promises as fs} from 'fs'
|
|||||||
import mm from 'micromatch'
|
import mm from 'micromatch'
|
||||||
import * as path from 'path'
|
import * as path from 'path'
|
||||||
import {createInterface} from 'readline'
|
import {createInterface} from 'readline'
|
||||||
|
import {ChangedFiles, ChangeTypeEnum} from './changedFiles'
|
||||||
|
|
||||||
import {Inputs} from './inputs'
|
import {Inputs} from './inputs'
|
||||||
|
|
||||||
@@ -403,32 +404,28 @@ export const gitRenamedFiles = async ({
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const gitDiff = async ({
|
export const getAllChangedFiles = async ({
|
||||||
cwd,
|
cwd,
|
||||||
sha1,
|
sha1,
|
||||||
sha2,
|
sha2,
|
||||||
diff,
|
diff,
|
||||||
diffFilter,
|
|
||||||
filePatterns = [],
|
|
||||||
isSubmodule = false,
|
isSubmodule = false,
|
||||||
parentDir = ''
|
parentDir = ''
|
||||||
}: {
|
}: {
|
||||||
cwd: string
|
cwd: string
|
||||||
sha1: string
|
sha1: string
|
||||||
sha2: string
|
sha2: string
|
||||||
diffFilter: string
|
|
||||||
diff: string
|
diff: string
|
||||||
filePatterns?: string[]
|
|
||||||
isSubmodule?: boolean
|
isSubmodule?: boolean
|
||||||
parentDir?: string
|
parentDir?: string
|
||||||
}): Promise<string[]> => {
|
}): Promise<ChangedFiles> => {
|
||||||
const {exitCode, stdout, stderr} = await exec.getExecOutput(
|
const {exitCode, stdout, stderr} = await exec.getExecOutput(
|
||||||
'git',
|
'git',
|
||||||
[
|
[
|
||||||
'diff',
|
'diff',
|
||||||
'--name-only',
|
'--name-status',
|
||||||
'--ignore-submodules=all',
|
'--ignore-submodules=all',
|
||||||
`--diff-filter=${diffFilter}`,
|
`--diff-filter=ACDMRTUX`,
|
||||||
`${sha1}${diff}${sha2}`
|
`${sha1}${diff}${sha2}`
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -437,6 +434,16 @@ export const gitDiff = async ({
|
|||||||
silent: process.env.RUNNER_DEBUG !== '1'
|
silent: process.env.RUNNER_DEBUG !== '1'
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
const changedFiles: ChangedFiles = {
|
||||||
|
[ChangeTypeEnum.Added]: [],
|
||||||
|
[ChangeTypeEnum.Copied]: [],
|
||||||
|
[ChangeTypeEnum.Deleted]: [],
|
||||||
|
[ChangeTypeEnum.Modified]: [],
|
||||||
|
[ChangeTypeEnum.Renamed]: [],
|
||||||
|
[ChangeTypeEnum.TypeChanged]: [],
|
||||||
|
[ChangeTypeEnum.Unmerged]: [],
|
||||||
|
[ChangeTypeEnum.Unknown]: []
|
||||||
|
}
|
||||||
|
|
||||||
if (exitCode !== 0) {
|
if (exitCode !== 0) {
|
||||||
if (isSubmodule) {
|
if (isSubmodule) {
|
||||||
@@ -453,28 +460,60 @@ export const gitDiff = async ({
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return []
|
return changedFiles
|
||||||
}
|
}
|
||||||
|
|
||||||
const files = stdout
|
const lines = stdout.split('\n').filter(Boolean)
|
||||||
.split('\n')
|
|
||||||
.filter(Boolean)
|
|
||||||
.map((p: string) => {
|
|
||||||
if (isSubmodule) {
|
|
||||||
return normalizePath(path.join(parentDir, p))
|
|
||||||
}
|
|
||||||
return normalizePath(p)
|
|
||||||
})
|
|
||||||
|
|
||||||
if (filePatterns.length === 0) {
|
for (const line of lines) {
|
||||||
return files
|
const [changeType, filePath] = line.split('\t')
|
||||||
|
const normalizedFilePath = isSubmodule
|
||||||
|
? normalizePath(path.join(parentDir, filePath))
|
||||||
|
: normalizePath(filePath)
|
||||||
|
|
||||||
|
if (changeType.startsWith('R')) {
|
||||||
|
changedFiles[ChangeTypeEnum.Renamed].push(normalizedFilePath)
|
||||||
|
} else {
|
||||||
|
changedFiles[changeType as ChangeTypeEnum].push(normalizedFilePath)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return changedFiles
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getFilteredChangedFiles = async ({
|
||||||
|
allDiffFiles,
|
||||||
|
filePatterns
|
||||||
|
}: {
|
||||||
|
allDiffFiles: ChangedFiles
|
||||||
|
filePatterns: string[]
|
||||||
|
}): Promise<ChangedFiles> => {
|
||||||
|
const changedFiles: ChangedFiles = {
|
||||||
|
[ChangeTypeEnum.Added]: [],
|
||||||
|
[ChangeTypeEnum.Copied]: [],
|
||||||
|
[ChangeTypeEnum.Deleted]: [],
|
||||||
|
[ChangeTypeEnum.Modified]: [],
|
||||||
|
[ChangeTypeEnum.Renamed]: [],
|
||||||
|
[ChangeTypeEnum.TypeChanged]: [],
|
||||||
|
[ChangeTypeEnum.Unmerged]: [],
|
||||||
|
[ChangeTypeEnum.Unknown]: []
|
||||||
}
|
}
|
||||||
|
|
||||||
return mm(files, filePatterns, {
|
for (const changeType of Object.keys(allDiffFiles)) {
|
||||||
dot: true,
|
const files = allDiffFiles[changeType as ChangeTypeEnum]
|
||||||
windows: IS_WINDOWS,
|
const hasFilePatterns = filePatterns.length > 0
|
||||||
noext: true
|
|
||||||
})
|
if (hasFilePatterns) {
|
||||||
|
changedFiles[changeType as ChangeTypeEnum] = mm(files, filePatterns, {
|
||||||
|
dot: true,
|
||||||
|
windows: IS_WINDOWS,
|
||||||
|
noext: true
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
changedFiles[changeType as ChangeTypeEnum] = files
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return changedFiles
|
||||||
}
|
}
|
||||||
|
|
||||||
export const gitLog = async ({
|
export const gitLog = async ({
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
This is a test file with non ascii character in the filename.
|
This is a test file with non ASCII character in the filename.
|
||||||
|
|||||||
Reference in New Issue
Block a user