Compare commits
38 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c4d29bf5b2 | ||
|
|
995ead5584 | ||
|
|
af3b754ee2 | ||
|
|
5c9ad7fce6 | ||
|
|
4b455d3d83 | ||
|
|
941c21b681 | ||
|
|
cfc8494f3b | ||
|
|
fe56d428c0 | ||
|
|
f10717dc73 | ||
|
|
e4decfd4bd | ||
|
|
aa52cfcd81 | ||
|
|
d1fb3092ba | ||
|
|
b4938889d4 | ||
|
|
9403c911ce | ||
|
|
50142ba7af | ||
|
|
711eaef9ea | ||
|
|
b670630c81 | ||
|
|
3b998fdc54 | ||
|
|
dd5ec50e4b | ||
|
|
627dfaf069 | ||
|
|
ca3088a08d | ||
|
|
63725ea32d | ||
|
|
8e3e2f13a8 | ||
|
|
262238adca | ||
|
|
4e8b111da1 | ||
|
|
27c18b1c64 | ||
|
|
2d0a396d46 | ||
|
|
cdbd6e5e85 | ||
|
|
f6fb7cb101 | ||
|
|
4b2a818159 | ||
|
|
0b2cecdaae | ||
|
|
a6a95f098b | ||
|
|
17a9fac9ca | ||
|
|
413d837155 | ||
|
|
ad363667e1 | ||
|
|
eb136c70d4 | ||
|
|
1ce0241964 | ||
|
|
a2673955a0 |
2
.github/workflows/auto-merge.yml
vendored
2
.github/workflows/auto-merge.yml
vendored
@@ -16,7 +16,7 @@ jobs:
|
||||
github.actor == 'renovate'
|
||||
steps:
|
||||
- name: automerge
|
||||
uses: pascalgn/automerge-action@v0.15.3
|
||||
uses: pascalgn/automerge-action@v0.15.5
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }}
|
||||
MERGE_METHOD: "rebase"
|
||||
|
||||
5
.github/workflows/codacy-analysis.yml
vendored
5
.github/workflows/codacy-analysis.yml
vendored
@@ -19,11 +19,6 @@ on:
|
||||
|
||||
jobs:
|
||||
codacy-security-scan:
|
||||
# Cancel other workflows that are running for the same branch
|
||||
# https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#concurrency
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
name: Codacy Security Scan
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
2
.github/workflows/submodule-sync.yml
vendored
2
.github/workflows/submodule-sync.yml
vendored
@@ -19,7 +19,7 @@ jobs:
|
||||
git submodule update --remote --recursive
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v4.1.3
|
||||
uses: peter-evans/create-pull-request@v4.2.0
|
||||
with:
|
||||
title: "Updated submodule"
|
||||
branch: "chore/update-submodule"
|
||||
|
||||
2
.github/workflows/sync-release-version.yml
vendored
2
.github/workflows/sync-release-version.yml
vendored
@@ -26,7 +26,7 @@ jobs:
|
||||
with:
|
||||
output: 'HISTORY.md'
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v4.1.3
|
||||
uses: peter-evans/create-pull-request@v4.2.0
|
||||
with:
|
||||
base: "main"
|
||||
title: "Upgraded to ${{ steps.sync-release-version.outputs.new_version }}"
|
||||
|
||||
18
.github/workflows/test.yml
vendored
18
.github/workflows/test.yml
vendored
@@ -99,7 +99,7 @@ jobs:
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
||||
- name: Run changed-files since 2022-08-19
|
||||
id: changed-files-since
|
||||
uses: ./
|
||||
@@ -113,13 +113,13 @@ jobs:
|
||||
exit 1
|
||||
shell:
|
||||
bash
|
||||
|
||||
|
||||
- name: Show output
|
||||
run: |
|
||||
echo '${{ toJSON(steps.changed-files-since.outputs) }}'
|
||||
shell:
|
||||
bash
|
||||
|
||||
|
||||
- name: Run changed-files until 2022-08-20
|
||||
id: changed-files-until
|
||||
uses: ./
|
||||
@@ -203,8 +203,8 @@ jobs:
|
||||
shell:
|
||||
bash
|
||||
|
||||
test-single-commit-history:
|
||||
name: Test changed-files single commit history
|
||||
test-limited-commit-history:
|
||||
name: Test changed-files with limited commit history
|
||||
runs-on: ${{ matrix.platform }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -216,11 +216,10 @@ jobs:
|
||||
- name: Checkout to branch
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 1
|
||||
fetch-depth: 2
|
||||
|
||||
- name: Run changed-files with a single commit history
|
||||
id: changed-files
|
||||
continue-on-error: true
|
||||
uses: ./
|
||||
|
||||
- name: Show output
|
||||
@@ -872,11 +871,6 @@ jobs:
|
||||
echo '${{ toJSON(steps.changed-files-custom-sha.outputs) }}'
|
||||
shell:
|
||||
bash
|
||||
- name: Show output
|
||||
run: |
|
||||
echo '${{ toJSON(steps.changed-files-since-last-remote-commit.outputs) }}'
|
||||
shell:
|
||||
bash
|
||||
- name: Get branch name
|
||||
id: branch-name
|
||||
uses: tj-actions/branch-names@v6
|
||||
|
||||
4
.github/workflows/update-readme.yml
vendored
4
.github/workflows/update-readme.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
||||
uses: tj-actions/remark@v3
|
||||
|
||||
- name: Verify Changed files
|
||||
uses: tj-actions/verify-changed-files@v11
|
||||
uses: tj-actions/verify-changed-files@v12
|
||||
id: verify_changed_files
|
||||
with:
|
||||
files: |
|
||||
@@ -31,7 +31,7 @@ jobs:
|
||||
|
||||
- name: Create Pull Request
|
||||
if: failure()
|
||||
uses: peter-evans/create-pull-request@v4.1.3
|
||||
uses: peter-evans/create-pull-request@v4.2.0
|
||||
with:
|
||||
base: "main"
|
||||
title: "Updated README.md"
|
||||
|
||||
78
HISTORY.md
78
HISTORY.md
@@ -1,20 +1,56 @@
|
||||
# Changelog
|
||||
|
||||
## [Unreleased](https://github.com/tj-actions/changed-files/tree/HEAD)
|
||||
## [v33.0.0](https://github.com/tj-actions/changed-files/tree/v33.0.0) (2022-10-21)
|
||||
|
||||
[Full Changelog](https://github.com/tj-actions/changed-files/compare/v32.1.1...HEAD)
|
||||
[Full Changelog](https://github.com/tj-actions/changed-files/compare/v33...v33.0.0)
|
||||
|
||||
## [v33](https://github.com/tj-actions/changed-files/tree/v33) (2022-10-21)
|
||||
|
||||
[Full Changelog](https://github.com/tj-actions/changed-files/compare/v32.1.2...v33)
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- \[BUG\] `GITHUB_EVENT_PULL_REQUEST_BASE_SHA` isn't actually the head of the base branch, and `fetch-depth: 2` fails [\#704](https://github.com/tj-actions/changed-files/issues/704)
|
||||
|
||||
**Closed issues:**
|
||||
|
||||
- Ability to do a three dots diff [\#702](https://github.com/tj-actions/changed-files/issues/702)
|
||||
- Dependency Dashboard [\#27](https://github.com/tj-actions/changed-files/issues/27)
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- chore: update readme [\#706](https://github.com/tj-actions/changed-files/pull/706) ([jackton1](https://github.com/jackton1))
|
||||
- chore: clean up test [\#705](https://github.com/tj-actions/changed-files/pull/705) ([jackton1](https://github.com/jackton1))
|
||||
- feat: switch to three dot diff [\#703](https://github.com/tj-actions/changed-files/pull/703) ([jackton1](https://github.com/jackton1))
|
||||
- Updated README.md [\#701](https://github.com/tj-actions/changed-files/pull/701) ([jackton1](https://github.com/jackton1))
|
||||
- chore: update readme [\#700](https://github.com/tj-actions/changed-files/pull/700) ([jackton1](https://github.com/jackton1))
|
||||
- chore\(deps\): update peter-evans/create-pull-request action to v4.2.0 [\#699](https://github.com/tj-actions/changed-files/pull/699) ([renovate[bot]](https://github.com/apps/renovate))
|
||||
- chore\(deps\): update pascalgn/automerge-action action to v0.15.5 [\#698](https://github.com/tj-actions/changed-files/pull/698) ([renovate[bot]](https://github.com/apps/renovate))
|
||||
- chore\(deps\): update peter-evans/create-pull-request action to v4.1.4 [\#697](https://github.com/tj-actions/changed-files/pull/697) ([renovate[bot]](https://github.com/apps/renovate))
|
||||
- chore\(deps\): update tj-actions/verify-changed-files action to v12 [\#696](https://github.com/tj-actions/changed-files/pull/696) ([renovate[bot]](https://github.com/apps/renovate))
|
||||
- Upgraded to v32.1.2 [\#695](https://github.com/tj-actions/changed-files/pull/695) ([jackton1](https://github.com/jackton1))
|
||||
|
||||
## [v32.1.2](https://github.com/tj-actions/changed-files/tree/v32.1.2) (2022-10-16)
|
||||
|
||||
[Full Changelog](https://github.com/tj-actions/changed-files/compare/v32...v32.1.2)
|
||||
|
||||
## [v32](https://github.com/tj-actions/changed-files/tree/v32) (2022-10-16)
|
||||
|
||||
[Full Changelog](https://github.com/tj-actions/changed-files/compare/v32.1.1...v32)
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- \[BUG\] Random GITHUB\_OUTPUT: unbound variable in get-sha.sh [\#690](https://github.com/tj-actions/changed-files/issues/690)
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- chore: clean up test [\#694](https://github.com/tj-actions/changed-files/pull/694) ([jackton1](https://github.com/jackton1))
|
||||
- fix: bug setting until and since inputs. [\#693](https://github.com/tj-actions/changed-files/pull/693) ([jackton1](https://github.com/jackton1))
|
||||
- Upgraded to v32.1.1 [\#692](https://github.com/tj-actions/changed-files/pull/692) ([jackton1](https://github.com/jackton1))
|
||||
|
||||
## [v32.1.1](https://github.com/tj-actions/changed-files/tree/v32.1.1) (2022-10-14)
|
||||
|
||||
[Full Changelog](https://github.com/tj-actions/changed-files/compare/v32...v32.1.1)
|
||||
|
||||
## [v32](https://github.com/tj-actions/changed-files/tree/v32) (2022-10-14)
|
||||
|
||||
[Full Changelog](https://github.com/tj-actions/changed-files/compare/v32.1.0...v32)
|
||||
[Full Changelog](https://github.com/tj-actions/changed-files/compare/v32.1.0...v32.1.1)
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
@@ -31,10 +67,6 @@
|
||||
- \[BUG\] runner is reporting old Node.js version. [\#678](https://github.com/tj-actions/changed-files/issues/678)
|
||||
- \[BUG\] New commits pushed to the base branch results in errors when shallow history is used. [\#668](https://github.com/tj-actions/changed-files/issues/668)
|
||||
|
||||
**Closed issues:**
|
||||
|
||||
- Dependency Dashboard [\#27](https://github.com/tj-actions/changed-files/issues/27)
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- docs: add lpulley as a contributor for code [\#685](https://github.com/tj-actions/changed-files/pull/685) ([allcontributors[bot]](https://github.com/apps/allcontributors))
|
||||
@@ -117,7 +149,7 @@
|
||||
|
||||
## [v31.0.0](https://github.com/tj-actions/changed-files/tree/v31.0.0) (2022-09-25)
|
||||
|
||||
[Full Changelog](https://github.com/tj-actions/changed-files/compare/v30...v31.0.0)
|
||||
[Full Changelog](https://github.com/tj-actions/changed-files/compare/v30.0.0...v31.0.0)
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
@@ -130,13 +162,13 @@
|
||||
- chore: update broken link [\#642](https://github.com/tj-actions/changed-files/pull/642) ([jackton1](https://github.com/jackton1))
|
||||
- Upgraded to v30.0.0 [\#641](https://github.com/tj-actions/changed-files/pull/641) ([jackton1](https://github.com/jackton1))
|
||||
|
||||
## [v30](https://github.com/tj-actions/changed-files/tree/v30) (2022-09-24)
|
||||
|
||||
[Full Changelog](https://github.com/tj-actions/changed-files/compare/v30.0.0...v30)
|
||||
|
||||
## [v30.0.0](https://github.com/tj-actions/changed-files/tree/v30.0.0) (2022-09-24)
|
||||
|
||||
[Full Changelog](https://github.com/tj-actions/changed-files/compare/v29.0.9...v30.0.0)
|
||||
[Full Changelog](https://github.com/tj-actions/changed-files/compare/v30...v30.0.0)
|
||||
|
||||
## [v30](https://github.com/tj-actions/changed-files/tree/v30) (2022-09-24)
|
||||
|
||||
[Full Changelog](https://github.com/tj-actions/changed-files/compare/v29.0.9...v30)
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
@@ -1017,7 +1049,7 @@
|
||||
|
||||
## [v13](https://github.com/tj-actions/changed-files/tree/v13) (2022-02-17)
|
||||
|
||||
[Full Changelog](https://github.com/tj-actions/changed-files/compare/v12.2...v13)
|
||||
[Full Changelog](https://github.com/tj-actions/changed-files/compare/v2.0.1...v13)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
@@ -1036,13 +1068,13 @@
|
||||
- \[BUG\] wrong result of any\_change output [\#314](https://github.com/tj-actions/changed-files/issues/314)
|
||||
- \[BUG\] Investigate possible bug using since\_last\_remote\_commit when force pushing changes. [\#303](https://github.com/tj-actions/changed-files/issues/303)
|
||||
|
||||
## [v12.2](https://github.com/tj-actions/changed-files/tree/v12.2) (2021-12-30)
|
||||
|
||||
[Full Changelog](https://github.com/tj-actions/changed-files/compare/v2.0.1...v12.2)
|
||||
|
||||
## [v2.0.1](https://github.com/tj-actions/changed-files/tree/v2.0.1) (2021-12-30)
|
||||
|
||||
[Full Changelog](https://github.com/tj-actions/changed-files/compare/v12.1...v2.0.1)
|
||||
[Full Changelog](https://github.com/tj-actions/changed-files/compare/v12.2...v2.0.1)
|
||||
|
||||
## [v12.2](https://github.com/tj-actions/changed-files/tree/v12.2) (2021-12-30)
|
||||
|
||||
[Full Changelog](https://github.com/tj-actions/changed-files/compare/v12.1...v12.2)
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
|
||||
492
README.md
492
README.md
@@ -65,22 +65,22 @@ jobs:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0 # OR "2" -> To retrieve the preceding commit.
|
||||
|
||||
|
||||
# Example 1
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@v32
|
||||
uses: tj-actions/changed-files@v33
|
||||
|
||||
- name: List all changed files
|
||||
run: |
|
||||
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
|
||||
echo "$file was changed"
|
||||
done
|
||||
|
||||
|
||||
# Example 2
|
||||
- name: Get changed files in the docs folder
|
||||
id: changed-files-specific
|
||||
uses: tj-actions/changed-files@v32
|
||||
uses: tj-actions/changed-files@v33
|
||||
with:
|
||||
files: |
|
||||
docs/**
|
||||
@@ -162,142 +162,287 @@ Support this project with a :star:
|
||||
| json | `boolean` | `false` | `false` | Output changed files in JSON format which can be used for [matrix jobs](https://github.com/tj-actions/changed-files/blob/main/.github/workflows/manual-matrix-test.yml). |
|
||||
| since | `string` | `false` | | Get changed files for commits whose timestamp is older than the given time. |
|
||||
| until | `string` | `false` | | Get changed files for commits whose timestamp is earlier than the given time. |
|
||||
| target\_branch\_fetch\_depth | `string` | `false` | `20` | Limit fetching commits from the target branch to a specified number. **NOTE**: This can be adjusted to resolve errors with insufficient history. See: [#668](https://github.com/tj-actions/changed-files/issues/668). |
|
||||
| max\_fetch\_depth | `string` | `false` | `120` | Max limit for fetching branch history. **NOTE**: This can be adjusted to resolve errors with insufficient history. |
|
||||
|
||||
## Examples
|
||||
|
||||
<details>
|
||||
<summary>Get all changed files in the current branch</summary>
|
||||
|
||||
```yaml
|
||||
...
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0 # OR "2" -> To retrieve the preceding commit.
|
||||
# submodules: true # OR "recursive" -> To include all changed submodule files.
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@v33
|
||||
...
|
||||
```
|
||||
|
||||
- name: Get changed files using defaults
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@v32
|
||||
</details>
|
||||
|
||||
- name: Get changed files using a comma separator
|
||||
id: changed-files-comma
|
||||
uses: tj-actions/changed-files@v32
|
||||
with:
|
||||
separator: ","
|
||||
<details>
|
||||
<summary>Get all changed files and using a comma separator</summary>
|
||||
|
||||
- name: List all added files
|
||||
run: |
|
||||
for file in ${{ steps.changed-files.outputs.added_files }}; do
|
||||
echo "$file was added"
|
||||
done
|
||||
```yaml
|
||||
...
|
||||
- name: Get all changed files and use a comma separator in the output
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@v33
|
||||
with:
|
||||
separator: ","
|
||||
...
|
||||
```
|
||||
|
||||
- name: Run step when a file changes
|
||||
if: contains(steps.changed-files.outputs.modified_files, 'my-file.txt')
|
||||
run: |
|
||||
echo "Your my-file.txt file has been modified."
|
||||
See [inputs](#inputs) for more information.
|
||||
|
||||
- name: Run step when a file has been deleted
|
||||
if: contains(steps.changed-files.outputs.deleted_files, 'test.txt')
|
||||
run: |
|
||||
echo "Your test.txt file has been deleted."
|
||||
</details>
|
||||
|
||||
- name: Get specific changed files
|
||||
id: changed-files-specific
|
||||
uses: tj-actions/changed-files@v32
|
||||
with:
|
||||
files: |
|
||||
my-file.txt
|
||||
test.txt
|
||||
new.txt
|
||||
test_directory
|
||||
*.sh
|
||||
*.png
|
||||
!*.md
|
||||
*.jpeg
|
||||
**/migrate-*.sql
|
||||
files_ignore: |
|
||||
*.yml
|
||||
<details>
|
||||
<summary> Get all changed files and list all added files</summary>
|
||||
|
||||
- name: Run step if any of the listed files above change
|
||||
if: steps.changed-files-specific.outputs.any_changed == 'true'
|
||||
run: |
|
||||
echo "One or more files listed above has changed."
|
||||
```yaml
|
||||
...
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@v33
|
||||
|
||||
- name: List all added files
|
||||
run: |
|
||||
for file in ${{ steps.changed-files.outputs.added_files }}; do
|
||||
echo "$file was added"
|
||||
done
|
||||
...
|
||||
```
|
||||
|
||||
- name: Run step if only the files listed above change
|
||||
if: steps.changed-files-specific.outputs.only_changed == 'true'
|
||||
run: |
|
||||
echo "Only files listed above have changed."
|
||||
See [outputs](#outputs) for a list of all available outputs.
|
||||
|
||||
- name: Run step if any of the listed files above is deleted
|
||||
if: steps.changed-files.outputs.any_deleted == 'true'
|
||||
run: |
|
||||
for file in ${{ steps.changed-files.outputs.deleted_files }}; do
|
||||
echo "$file was deleted"
|
||||
done
|
||||
</details>
|
||||
|
||||
- name: Run step if all listed files above have been deleted
|
||||
if: steps.changed-files.outputs.only_deleted == 'true'
|
||||
run: |
|
||||
for file in ${{ steps.changed-files.outputs.deleted_files }}; do
|
||||
echo "$file was deleted"
|
||||
done
|
||||
<details>
|
||||
<summary>Get all changed files and optionally run a step if a file was modified</summary>
|
||||
|
||||
- name: Use a source file or list of file(s) to populate to files input.
|
||||
id: changed-files-specific-source-file
|
||||
uses: tj-actions/changed-files@v32
|
||||
with:
|
||||
files_from_source_file: |
|
||||
test/changed-files-list.txt
|
||||
```yaml
|
||||
...
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@v33
|
||||
|
||||
- name: Run a step if my-file.txt was modified
|
||||
if: contains(steps.changed-files.outputs.modified_files, 'my-file.txt')
|
||||
run: |
|
||||
echo "my-file.txt file has been modified."
|
||||
...
|
||||
```
|
||||
|
||||
- name: Use a source file or list of file(s) to populate to files input and optionally specify more files.
|
||||
id: changed-files-specific-source-file-and-specify-files
|
||||
uses: tj-actions/changed-files@v32
|
||||
with:
|
||||
files_from_source_file: |
|
||||
test/changed-files-list.txt
|
||||
files: |
|
||||
test.txt
|
||||
See [outputs](#outputs) for a list of all available outputs.
|
||||
|
||||
- name: Use a different commit SHA
|
||||
id: changed-files-custom-sha
|
||||
uses: tj-actions/changed-files@v32
|
||||
with:
|
||||
sha: ${{ github.event.pull_request.head.sha }}
|
||||
</details>
|
||||
|
||||
- name: Use a different base SHA
|
||||
id: changed-files-custom-base-sha
|
||||
uses: tj-actions/changed-files@v32
|
||||
with:
|
||||
base_sha: ${{ github.event.pull_request.base.sha }}
|
||||
|
||||
- name: Checkout into dir1
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
path: dir1
|
||||
<details>
|
||||
<summary>Get all changed files using a list of files</summary>
|
||||
|
||||
- name: Run changed-files with defaults on the dir1
|
||||
id: changed-files-for-dir1
|
||||
uses: tj-actions/changed-files@v32
|
||||
with:
|
||||
path: dir1
|
||||
```yaml
|
||||
...
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@v33
|
||||
with:
|
||||
files: |
|
||||
my-file.txt
|
||||
*.sh
|
||||
*.png
|
||||
!*.md
|
||||
test_directory
|
||||
**/*.sql
|
||||
...
|
||||
```
|
||||
|
||||
- name: List all added files in dir1
|
||||
run: |
|
||||
for file in ${{ steps.changed-files-for-dir1.outputs.added_files }}; do
|
||||
echo "$file was added"
|
||||
done
|
||||
See [inputs](#inputs) for more information.
|
||||
|
||||
- name: Run changed-files with quotepath disabled
|
||||
id: changed-files-quotepath
|
||||
uses: tj-actions/changed-files@v32
|
||||
with:
|
||||
quotepath: "false"
|
||||
</details>
|
||||
|
||||
# Run changed-files action using the last successful commit as the base_sha
|
||||
# NOTE: This setting overrides the commit sha used by setting since_last_remote_commit to true.
|
||||
# It is recommended to use either solution that works for your use case.
|
||||
<details>
|
||||
<summary>Get all changed files using a list of files and take action base on the changes</summary>
|
||||
|
||||
# Push event based workflows
|
||||
```yaml
|
||||
...
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@v33
|
||||
with:
|
||||
files: |
|
||||
my-file.txt
|
||||
*.sh
|
||||
*.png
|
||||
!*.md
|
||||
test_directory
|
||||
**/*.sql
|
||||
|
||||
- name: Run step if any of the listed files above change
|
||||
if: steps.changed-files-specific.outputs.any_changed == 'true'
|
||||
run: |
|
||||
echo "One or more files listed above has changed."
|
||||
|
||||
- name: Run step if only the files listed above change
|
||||
if: steps.changed-files-specific.outputs.only_changed == 'true'
|
||||
run: |
|
||||
echo "Only files listed above have changed."
|
||||
|
||||
- name: Run step if any of the listed files above is deleted
|
||||
if: steps.changed-files.outputs.any_deleted == 'true'
|
||||
run: |
|
||||
for file in ${{ steps.changed-files.outputs.deleted_files }}; do
|
||||
echo "$file was deleted"
|
||||
done
|
||||
|
||||
- name: Run step if all listed files above have been deleted
|
||||
if: steps.changed-files.outputs.only_deleted == 'true'
|
||||
run: |
|
||||
for file in ${{ steps.changed-files.outputs.deleted_files }}; do
|
||||
echo "$file was deleted"
|
||||
done
|
||||
...
|
||||
```
|
||||
|
||||
See [outputs](#outputs) for a list of all available outputs.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Get all changed files using a source file or list of file(s) to populate to files input</summary>
|
||||
|
||||
```yaml
|
||||
...
|
||||
- name: Get changed files using a source file or list of file(s) to populate to files input.
|
||||
id: changed-files-specific-source-file
|
||||
uses: tj-actions/changed-files@v33
|
||||
with:
|
||||
files_from_source_file: |
|
||||
test/changed-files-list.txt
|
||||
...
|
||||
```
|
||||
|
||||
See [inputs](#inputs) for more information.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Get changed files using a source file or list of file(s) to populate to files input and optionally specify more files</summary>
|
||||
|
||||
```yaml
|
||||
...
|
||||
- name: Get changed files using a source file or list of file(s) to populate to files input and optionally specify more files.
|
||||
id: changed-files-specific-source-file-and-specify-files
|
||||
uses: tj-actions/changed-files@v33
|
||||
with:
|
||||
files_from_source_file: |
|
||||
test/changed-files-list.txt
|
||||
files: |
|
||||
test.txt
|
||||
...
|
||||
```
|
||||
|
||||
See [inputs](#inputs) for more information.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Get all changed files using a different SHA</summary>
|
||||
|
||||
```yaml
|
||||
...
|
||||
- name: Get changed files using a different SHA
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@v33
|
||||
with:
|
||||
sha: ${{ github.event.pull_request.head.sha }}
|
||||
...
|
||||
```
|
||||
|
||||
See [inputs](#inputs) for more information.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Get all changed files using a different base SHA</summary>
|
||||
|
||||
```yaml
|
||||
...
|
||||
- name: Get changed files using a different base SHA
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@v33
|
||||
with:
|
||||
base_sha: ${{ github.event.pull_request.base.sha }}
|
||||
...
|
||||
```
|
||||
|
||||
See [inputs](#inputs) for more information.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Get all changed files for a repository located in a different path</summary>
|
||||
|
||||
```yaml
|
||||
...
|
||||
- name: Checkout into dir1
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
path: dir1
|
||||
|
||||
- name: Run changed-files with defaults in dir1
|
||||
id: changed-files-for-dir1
|
||||
uses: tj-actions/changed-files@v33
|
||||
with:
|
||||
path: dir1
|
||||
|
||||
- name: List all added files in dir1
|
||||
run: |
|
||||
for file in ${{ steps.changed-files-for-dir1.outputs.added_files }}; do
|
||||
echo "$file was added"
|
||||
done
|
||||
...
|
||||
```
|
||||
|
||||
See [inputs](#inputs) for more information.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Get all changed files with non äšćįí characters i.e (Filename in other languages)</summary>
|
||||
|
||||
```yaml
|
||||
...
|
||||
- name: Run changed-files with quotepath disabled
|
||||
id: changed-files-quotepath
|
||||
uses: tj-actions/changed-files@v33
|
||||
with:
|
||||
quotepath: "false"
|
||||
|
||||
- name: Run changed-files with quotepath disabled for a specified list of file(s)
|
||||
id: changed-files-quotepath-specific
|
||||
uses: ./
|
||||
with:
|
||||
files: test/test-è.txt
|
||||
quotepath: "false"
|
||||
...
|
||||
```
|
||||
|
||||
See [inputs](#inputs) for more information.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Get all changed files using the last successful commit of the base branch</summary>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<details>
|
||||
<summary>Push event</summary>
|
||||
|
||||
```yaml
|
||||
...
|
||||
- name: Get branch name
|
||||
id: branch-name
|
||||
uses: tj-actions/branch-names@v6
|
||||
@@ -311,57 +456,110 @@ Support this project with a :star:
|
||||
|
||||
- name: Run changed-files with the commit of the last successful test workflow run
|
||||
id: changed-files-base-sha-push
|
||||
uses: tj-actions/changed-files@v32
|
||||
uses: tj-actions/changed-files@v33
|
||||
with:
|
||||
base_sha: ${{ steps.last_successful_commit_push.outputs.commit_hash }}
|
||||
...
|
||||
```
|
||||
|
||||
# Pull request based workflows.
|
||||
</details>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<details>
|
||||
<summary>Pull request events </summary>
|
||||
|
||||
```yaml
|
||||
...
|
||||
- name: Get branch name
|
||||
id: branch-name
|
||||
uses: tj-actions/branch-names@v5
|
||||
if: github.event_name == 'pull_request'
|
||||
|
||||
- uses: nrwl/last-successful-commit-action@v1
|
||||
id: last_successful_commit_pull_request
|
||||
if: github.event_name == 'pull_request'
|
||||
with:
|
||||
branch: ${{ steps.branch-name.outputs.base_ref_branch }} # Get the last successful commit on master or main branch
|
||||
workflow_id: 'test.yml'
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Run changed-files with the commit of the last successful test workflow run on main
|
||||
if: github.event_name == 'pull_request'
|
||||
id: changed-files-base-sha-pull-request
|
||||
uses: tj-actions/changed-files@v32
|
||||
uses: tj-actions/changed-files@v33
|
||||
with:
|
||||
base_sha: ${{ steps.last_successful_commit_pull_request.outputs.commit_hash }}
|
||||
|
||||
- name: Run changed-files with dir_names
|
||||
id: changed-files-dir-names
|
||||
uses: tj-actions/changed-files@v32
|
||||
with:
|
||||
dir_names: "true"
|
||||
|
||||
# All outputs are JSON formatted arrays and can be used in other actions and matrix compatible jobs.
|
||||
- name: Run changed-files with json output
|
||||
id: changed-files-json
|
||||
uses: tj-actions/changed-files@v32
|
||||
with:
|
||||
json: "true"
|
||||
|
||||
- name: Run changed-files since 2022-08-19
|
||||
id: changed-files-since
|
||||
uses: tj-actions/changed-files@v32
|
||||
with:
|
||||
since: "2022-08-19"
|
||||
|
||||
- name: Run changed-files until 2022-08-20
|
||||
id: changed-files-until
|
||||
uses: tj-actions/changed-files@v32
|
||||
with:
|
||||
until: "2022-08-20"
|
||||
...
|
||||
```
|
||||
|
||||
</details>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
> NOTE: This setting overrides the commit sha used by setting `since_last_remote_commit` to true.
|
||||
> It is recommended to use either solution that works for your use case.
|
||||
|
||||
See [inputs](#inputs) for more information.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Get all changed files but only return the directory names</summary>
|
||||
|
||||
```yaml
|
||||
...
|
||||
- name: Run changed-files with dir_names
|
||||
id: changed-files-dir-names
|
||||
uses: tj-actions/changed-files@v33
|
||||
with:
|
||||
dir_names: "true"
|
||||
...
|
||||
```
|
||||
|
||||
See [inputs](#inputs) for more information.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Get all changed files and return JSON formatted outputs</summary>
|
||||
|
||||
```yaml
|
||||
...
|
||||
- name: Run changed-files with json output
|
||||
id: changed-files-json
|
||||
uses: tj-actions/changed-files@v33
|
||||
with:
|
||||
json: "true"
|
||||
...
|
||||
```
|
||||
|
||||
See [inputs](#inputs) for more information.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Get all changed files by commits pushed in the past</summary>
|
||||
|
||||
```yaml
|
||||
...
|
||||
- name: Get changed-files since 2022-08-19
|
||||
id: changed-files-since
|
||||
uses: tj-actions/changed-files@v33
|
||||
with:
|
||||
since: "2022-08-19"
|
||||
|
||||
- name: Get changed-files until 2022-08-20
|
||||
id: changed-files-until
|
||||
uses: tj-actions/changed-files@v33
|
||||
with:
|
||||
until: "2022-08-20"
|
||||
...
|
||||
```
|
||||
|
||||
See [inputs](#inputs) for more information.
|
||||
|
||||
</details>
|
||||
|
||||
### Real world example
|
||||
|
||||
<img width="1147" alt="Screen Shot 2021-11-19 at 4 59 21 PM" src="https://user-images.githubusercontent.com/17484350/142696936-8b7ca955-7ef9-4d53-9bdf-3e0008e90c3f.png">
|
||||
|
||||
* Free software: [MIT license](LICENSE)
|
||||
|
||||
@@ -77,10 +77,10 @@ inputs:
|
||||
description: "Output changed files in JSON format which can be used for matrix jobs"
|
||||
required: false
|
||||
default: "false"
|
||||
target_branch_fetch_depth:
|
||||
description: "Limit fetching commits from the target branch to a specified number. **NOTE**: This can be adjusted to resolve errors with insufficient history. See: [#668](https://github.com/tj-actions/changed-files/issues/668)."
|
||||
max_fetch_depth:
|
||||
description: "Max limit for fetching branch history. **NOTE**: This can be adjusted to resolve errors with insufficient history."
|
||||
required: false
|
||||
default: "20"
|
||||
default: "120"
|
||||
|
||||
outputs:
|
||||
added_files:
|
||||
@@ -171,7 +171,7 @@ runs:
|
||||
INPUT_SINCE: ${{ inputs.since }}
|
||||
INPUT_UNTIL: ${{ inputs.until }}
|
||||
INPUT_PATH: ${{ inputs.path }}
|
||||
INPUT_TARGET_BRANCH_FETCH_DEPTH: ${{ inputs.target_branch_fetch_depth }}
|
||||
INPUT_MAX_FETCH_DEPTH: ${{ inputs.max_fetch_depth }}
|
||||
- name: Glob match
|
||||
uses: tj-actions/glob@v15
|
||||
id: glob
|
||||
@@ -194,6 +194,7 @@ runs:
|
||||
shell: bash
|
||||
env:
|
||||
GITHUB_WORKSPACE: ${{ github.workspace }}
|
||||
GITHUB_BASE_REF: ${{ github.base_ref }}
|
||||
# INPUT_<VARIABLE_NAME> is not available in Composite run steps
|
||||
# https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#example-specifying-inputs
|
||||
INPUT_FILES_PATTERN_FILE: ${{ steps.glob.outputs.paths-output-file }}
|
||||
|
||||
31
diff-sha.sh
31
diff-sha.sh
@@ -67,6 +67,26 @@ else
|
||||
echo "::debug::Current SHA: $CURRENT_SHA"
|
||||
fi
|
||||
|
||||
function deepenShallowCloneToFindCommit() {
|
||||
local ref="$1"
|
||||
local target_branch="$2"
|
||||
local depth=20
|
||||
local max_depth=$INPUT_MAX_FETCH_DEPTH
|
||||
|
||||
while ! git rev-parse --quiet --verify "$ref^{commit}" &>/dev/null; do # !0 = true = not found
|
||||
echo "::debug::Unable to find commit '$ref' in shallow clone. Increasing depth to $((depth * 2))..."
|
||||
|
||||
depth=$((depth * 2))
|
||||
|
||||
if [[ $depth -gt $max_depth ]]; then
|
||||
echo "::error::Unable to find commit '$ref' in shallow clone. Maximum depth of $max_depth reached."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
git fetch --no-tags -u --progress --deepen="$depth" origin "$target_branch":"$target_branch"
|
||||
done
|
||||
}
|
||||
|
||||
if [[ -z $GITHUB_BASE_REF ]]; then
|
||||
echo "Running on a push event..."
|
||||
TARGET_BRANCH=${GITHUB_REF/refs\/heads\//} && exit_status=$? || exit_status=$?
|
||||
@@ -82,8 +102,6 @@ if [[ -z $GITHUB_BASE_REF ]]; then
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
git fetch --no-tags -u --progress origin --depth="$INPUT_TARGET_BRANCH_FETCH_DEPTH" "${TARGET_BRANCH}":"${TARGET_BRANCH}" && exit_status=$? || exit_status=$?
|
||||
|
||||
PREVIOUS_SHA=""
|
||||
|
||||
if [[ "$GITHUB_EVENT_FORCED" == "false" ]]; then
|
||||
@@ -117,6 +135,9 @@ if [[ -z $GITHUB_BASE_REF ]]; then
|
||||
echo "::debug::Target branch $TARGET_BRANCH..."
|
||||
echo "::debug::Current branch $CURRENT_BRANCH..."
|
||||
|
||||
echo "::debug::Fetching previous commit SHA: $PREVIOUS_SHA"
|
||||
deepenShallowCloneToFindCommit "$PREVIOUS_SHA" "$TARGET_BRANCH"
|
||||
|
||||
echo "::debug::Verifying the previous commit SHA: $PREVIOUS_SHA"
|
||||
git rev-parse --quiet --verify "$PREVIOUS_SHA^{commit}" 1>/dev/null 2>&1 && exit_status=$? || exit_status=$?
|
||||
|
||||
@@ -130,9 +151,6 @@ else
|
||||
TARGET_BRANCH=$GITHUB_BASE_REF
|
||||
CURRENT_BRANCH=$GITHUB_HEAD_REF
|
||||
|
||||
git fetch --no-tags -u --progress origin --depth="$INPUT_TARGET_BRANCH_FETCH_DEPTH" "${TARGET_BRANCH}":"${TARGET_BRANCH}" &&
|
||||
exit_status=$? || exit_status=$?
|
||||
|
||||
if [[ -z $INPUT_BASE_SHA ]]; then
|
||||
PREVIOUS_SHA=$GITHUB_EVENT_PULL_REQUEST_BASE_SHA && exit_status=$? || exit_status=$?
|
||||
echo "::debug::Previous SHA: $PREVIOUS_SHA"
|
||||
@@ -143,6 +161,9 @@ else
|
||||
echo "::debug::Target branch: $TARGET_BRANCH"
|
||||
echo "::debug::Current branch: $CURRENT_BRANCH"
|
||||
|
||||
echo "::debug::Fetching previous commit SHA: $PREVIOUS_SHA"
|
||||
deepenShallowCloneToFindCommit "$PREVIOUS_SHA" "$TARGET_BRANCH"
|
||||
|
||||
echo "::debug::Verifying the previous commit SHA: $PREVIOUS_SHA"
|
||||
git rev-parse --quiet --verify "$PREVIOUS_SHA^{commit}" 1>/dev/null 2>&1 && exit_status=$? || exit_status=$?
|
||||
|
||||
|
||||
@@ -8,6 +8,11 @@ INPUT_SEPARATOR="${INPUT_SEPARATOR//$'\n'/'%0A'}"
|
||||
INPUT_SEPARATOR="${INPUT_SEPARATOR//$'\r'/'%0D'}"
|
||||
|
||||
GITHUB_OUTPUT=${GITHUB_OUTPUT:-""}
|
||||
DIFF="..."
|
||||
|
||||
if [[ -z $GITHUB_BASE_REF ]]; then
|
||||
DIFF=".."
|
||||
fi
|
||||
|
||||
if [[ $INPUT_QUOTEPATH == "false" ]]; then
|
||||
git config --global core.quotepath off
|
||||
@@ -20,12 +25,23 @@ if [[ -n $INPUT_DIFF_RELATIVE ]]; then
|
||||
fi
|
||||
|
||||
function get_diff() {
|
||||
base="$1"
|
||||
sha="$2"
|
||||
filter="$3"
|
||||
local base="$1"
|
||||
local sha="$2"
|
||||
local filter="$3"
|
||||
|
||||
while IFS='' read -r sub; do
|
||||
sub_commit_pre="$(git diff "$base" "$sha" -- "$sub" | grep '^[-]Subproject commit' | awk '{print $3}')"
|
||||
sub_commit_cur="$(git diff "$base" "$sha" -- "$sub" | grep '^[+]Subproject commit' | awk '{print $3}')"
|
||||
sub_commit_pre="$(git diff "$base$DIFF$sha" -- "$sub" | grep '^[-]Subproject commit' | awk '{print $3}')" && exit_status=$? || exit_status=$?
|
||||
if [[ $exit_status -ne 0 ]]; then
|
||||
echo "::error::Failed to get previous commit for submodule ($sub) between: $base$DIFF$sha"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sub_commit_cur="$(git diff "$base$DIFF$sha" -- "$sub" | grep '^[+]Subproject commit' | awk '{print $3}')" && exit_status=$? || exit_status=$?
|
||||
if [[ $exit_status -ne 0 ]]; then
|
||||
echo "::error::Failed to get current commit for submodule ($sub) between: $base$DIFF$sha"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -n "$sub_commit_cur" ]; then
|
||||
(
|
||||
cd "$sub" && (
|
||||
@@ -37,18 +53,39 @@ function get_diff() {
|
||||
done < <(git submodule | awk '{print $2}')
|
||||
|
||||
if [[ "$INPUT_DIR_NAMES" == "true" ]]; then
|
||||
git diff --diff-filter="$filter" --name-only --ignore-submodules=all "$base" "$sha" | xargs -I {} dirname {} | uniq
|
||||
git diff --diff-filter="$filter" --name-only --ignore-submodules=all "$base$DIFF$sha" | xargs -I {} dirname {} | uniq && exit_status=$? || exit_status=$?
|
||||
|
||||
if [[ $exit_status -ne 0 ]]; then
|
||||
echo "::error::Failed to get changed directories between: $base$DIFF$sha"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
git diff --diff-filter="$filter" --name-only --ignore-submodules=all "$base" "$sha"
|
||||
git diff --diff-filter="$filter" --name-only --ignore-submodules=all "$base$DIFF$sha" && exit_status=$? || exit_status=$?
|
||||
|
||||
if [[ $exit_status -ne 0 ]]; then
|
||||
echo "::error::Failed to get changed files between: $base$DIFF$sha"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function get_renames() {
|
||||
base="$1"
|
||||
sha="$2"
|
||||
local base="$1"
|
||||
local sha="$2"
|
||||
|
||||
while IFS='' read -r sub; do
|
||||
sub_commit_pre="$(git diff "$base" "$sha" -- "$sub" | grep '^[-]Subproject commit' | awk '{print $3}')"
|
||||
sub_commit_cur="$(git diff "$base" "$sha" -- "$sub" | grep '^[+]Subproject commit' | awk '{print $3}')"
|
||||
sub_commit_pre="$(git diff "$base$DIFF$sha" -- "$sub" | grep '^[-]Subproject commit' | awk '{print $3}')" && exit_status=$? || exit_status=$?
|
||||
if [[ $exit_status -ne 0 ]]; then
|
||||
echo "::error::Failed to get previous commit for submodule ($sub) between: $base$DIFF$sha"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sub_commit_cur="$(git diff "$base$DIFF$sha" -- "$sub" | grep '^[+]Subproject commit' | awk '{print $3}')" && exit_status=$? || exit_status=$?
|
||||
if [[ $exit_status -ne 0 ]]; then
|
||||
echo "::error::Failed to get current commit for submodule ($sub) between: $base$DIFF$sha"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -n "$sub_commit_cur" ]; then
|
||||
(
|
||||
cd "$sub" && (
|
||||
@@ -60,9 +97,19 @@ function get_renames() {
|
||||
done < <(git submodule | awk '{print $2}')
|
||||
|
||||
if [[ "$INPUT_DIR_NAMES" == "true" ]]; then
|
||||
git log --name-status --ignore-submodules=all "$base".."$sha" | grep -E "^R" | awk -F '\t' -v d="$INPUT_OLD_NEW_SEPARATOR" '{print $2d$3}' | xargs -I {} dirname {} | uniq
|
||||
git log --name-status --ignore-submodules=all "$base" "$sha" | grep -E "^R" | awk -F '\t' -v d="$INPUT_OLD_NEW_SEPARATOR" '{print $2d$3}' | xargs -I {} dirname {} | uniq && exit_status=$? || exit_status=$?
|
||||
|
||||
if [[ $exit_status -ne 0 ]]; then
|
||||
echo "::error::Failed to get renamed directories between: $base → $sha"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
git log --name-status --ignore-submodules=all "$base".."$sha" | grep -E "^R" | awk -F '\t' -v d="$INPUT_OLD_NEW_SEPARATOR" '{print $2d$3}'
|
||||
git log --name-status --ignore-submodules=all "$base" "$sha" | grep -E "^R" | awk -F '\t' -v d="$INPUT_OLD_NEW_SEPARATOR" '{print $2d$3}' && exit_status=$? || exit_status=$?
|
||||
|
||||
if [[ $exit_status -ne 0 ]]; then
|
||||
echo "::error::Failed to get renamed files between: $base → $sha"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user