Compare commits
83 Commits
v47
...
copilot/up
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
08979f08a7 | ||
|
|
c86d03b395 | ||
|
|
9eccd3b31f | ||
|
|
6c02e900a2 | ||
|
|
05f9457d92 | ||
|
|
52ed872dd7 | ||
|
|
1cc5746379 | ||
|
|
de2962f9f4 | ||
|
|
37e96ccbfe | ||
|
|
2180b0f05d | ||
|
|
cf021c158c | ||
|
|
b54ac6f17f | ||
|
|
0f2a510bd7 | ||
|
|
35dace0375 | ||
|
|
9ee99eb5bd | ||
|
|
b7ac303c86 | ||
|
|
7dee1b0c15 | ||
|
|
28b28f6e4e | ||
|
|
875e6e5df8 | ||
|
|
8cba46e29c | ||
|
|
925972f627 | ||
|
|
a98754bb6a | ||
|
|
9c13e73478 | ||
|
|
caee9d94ce | ||
|
|
16d791cc10 | ||
|
|
8e056dec7d | ||
|
|
7d5bbf4e8d | ||
|
|
078e2bcd1e | ||
|
|
8c4da285a3 | ||
|
|
2f2f6cf099 | ||
|
|
8262acc559 | ||
|
|
b3bb1f8753 | ||
|
|
c6a5847dac | ||
|
|
daf9d2d497 | ||
|
|
3c4bc6fa0c | ||
|
|
cd7fbbcebb | ||
|
|
60a1a28396 | ||
|
|
e002140703 | ||
|
|
01ddfae411 | ||
|
|
a364493bbb | ||
|
|
45a2aae7ee | ||
|
|
a4f6de32d5 | ||
|
|
95fbe9b431 | ||
|
|
b3b97244a9 | ||
|
|
503bc3e7d7 | ||
|
|
3e9e5a2aa2 | ||
|
|
2b6c719845 | ||
|
|
043285ef6c | ||
|
|
abdd2f68ea | ||
|
|
1d08ab228c | ||
|
|
085eb10d7e | ||
|
|
72321d1f00 | ||
|
|
8c66df4f78 | ||
|
|
6da3c88b60 | ||
|
|
48b6e9756d | ||
|
|
4206138f17 | ||
|
|
31e663cd71 | ||
|
|
46fd332157 | ||
|
|
2d752abc95 | ||
|
|
70069877f2 | ||
|
|
5df1bad3a5 | ||
|
|
0ff001de08 | ||
|
|
52b808ab08 | ||
|
|
d6388b78bd | ||
|
|
cf5e80aa29 | ||
|
|
cff4543226 | ||
|
|
9dc1b5f80e | ||
|
|
dbf178ceec | ||
|
|
1900262303 | ||
|
|
27e5d78f9b | ||
|
|
d03a93c0db | ||
|
|
df9aabcdef | ||
|
|
d6f020b1d9 | ||
|
|
212f9a7760 | ||
|
|
0dc2215e58 | ||
|
|
28cf3adc4b | ||
|
|
0b7adf7963 | ||
|
|
4563c729c5 | ||
|
|
257f3acedc | ||
|
|
cac596ed08 | ||
|
|
4fb6914af9 | ||
|
|
2371aa7cd2 | ||
|
|
1ac6096503 |
4
.github/workflows/codacy-analysis.yml
vendored
4
.github/workflows/codacy-analysis.yml
vendored
@@ -29,7 +29,7 @@ jobs:
|
||||
steps:
|
||||
# Checkout the repository to the GitHub Actions runner
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
|
||||
# Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis
|
||||
- name: Run Codacy Analysis CLI
|
||||
@@ -51,6 +51,6 @@ jobs:
|
||||
# Upload the SARIF file generated in the previous step
|
||||
- name: Upload SARIF results file
|
||||
continue-on-error: true
|
||||
uses: github/codeql-action/upload-sarif@192325c86100d080feab897ff886c34abd4c83a3 # v3.29.5
|
||||
uses: github/codeql-action/upload-sarif@c793b717bc78562f491db7b0e93a3a178b099162 # v3.29.5
|
||||
with:
|
||||
sarif_file: results.sarif
|
||||
|
||||
8
.github/workflows/codeql.yml
vendored
8
.github/workflows/codeql.yml
vendored
@@ -43,11 +43,11 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@192325c86100d080feab897ff886c34abd4c83a3 # v3.29.5
|
||||
uses: github/codeql-action/init@c793b717bc78562f491db7b0e93a3a178b099162 # v3.29.5
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
@@ -61,7 +61,7 @@ jobs:
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@192325c86100d080feab897ff886c34abd4c83a3 # v3.29.5
|
||||
uses: github/codeql-action/autobuild@c793b717bc78562f491db7b0e93a3a178b099162 # v3.29.5
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||
@@ -74,6 +74,6 @@ jobs:
|
||||
# ./location_of_script_within_repo/buildscript.sh
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@192325c86100d080feab897ff886c34abd4c83a3 # v3.29.5
|
||||
uses: github/codeql-action/analyze@c793b717bc78562f491db7b0e93a3a178b099162 # v3.29.5
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
|
||||
@@ -19,7 +19,7 @@ jobs:
|
||||
NUMBER: ${{ github.event.issue.number }}
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
submodules: true
|
||||
fetch-depth: 0
|
||||
@@ -104,7 +104,7 @@ jobs:
|
||||
NUMBER: ${{ github.event.issue.number }}
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
submodules: true
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -24,7 +24,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
submodules: true
|
||||
fetch-depth: 0
|
||||
|
||||
16
.github/workflows/matrix-example.yml
vendored
16
.github/workflows/matrix-example.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
||||
matrix: ${{ steps.changed-files.outputs.all_changed_files }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Get changed files
|
||||
@@ -39,7 +39,19 @@ jobs:
|
||||
fail-fast: false
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- name: Test
|
||||
run: |
|
||||
echo ${{ matrix.files }}
|
||||
|
||||
conditional-job:
|
||||
name: Run Conditional Job
|
||||
runs-on: ubuntu-latest
|
||||
needs: [changed-files]
|
||||
if: contains(needs.changed-files.outputs.matrix, 'README.md') # Conditional check for README
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- name: Execute Conditional Logic
|
||||
run: |
|
||||
echo "README.md has been changed. Running conditional job."
|
||||
|
||||
4
.github/workflows/multi-job-example.yml
vendored
4
.github/workflows/multi-job-example.yml
vendored
@@ -19,7 +19,7 @@ jobs:
|
||||
all_changed_files: ${{ steps.changed-files.outputs.all_changed_files }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Get changed files
|
||||
@@ -45,7 +45,7 @@ jobs:
|
||||
all_changed_files: ${{ steps.changed-files.outputs.all_changed_files }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Get changed files
|
||||
|
||||
6
.github/workflows/sync-release-version.yml
vendored
6
.github/workflows/sync-release-version.yml
vendored
@@ -13,11 +13,11 @@ jobs:
|
||||
update-version:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Run release-tagger
|
||||
uses: tj-actions/release-tagger@1a9264b0fd99a1ef92c4fd2f077f292900cc79b6 # v4.0.0
|
||||
uses: tj-actions/release-tagger@970a1f5f827a7b90902b0adc904f3bb70c1074e7 # v6.0.6
|
||||
- name: Sync release version.
|
||||
uses: tj-actions/sync-release-version@2a7ef0deb39b3ecce887ee99d2261c6cef989d84 # v13.16
|
||||
id: sync-release-version
|
||||
@@ -38,7 +38,7 @@ jobs:
|
||||
- name: Run git-cliff
|
||||
uses: tj-actions/git-cliff@679041f051a4d2ab452f7e5e7b0eed2abee21131 # v2.2.0
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
|
||||
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8.1.0
|
||||
with:
|
||||
base: "main"
|
||||
labels: "merge when passing"
|
||||
|
||||
191
.github/workflows/test.yml
vendored
191
.github/workflows/test.yml
vendored
@@ -38,14 +38,14 @@ jobs:
|
||||
contents: write
|
||||
pull-requests: read
|
||||
steps:
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
fetch-depth: 0
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||
|
||||
- name: Use Node.js 24.x
|
||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
||||
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||
with:
|
||||
cache: 'yarn'
|
||||
node-version: '24.x'
|
||||
@@ -73,7 +73,7 @@ jobs:
|
||||
GITHUB_EVENT_PULL_REQUEST_HEAD_REPO_FORK: ${{ github.event.pull_request.head.repo.fork }}
|
||||
|
||||
- name: Upload build assets
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
path: dist
|
||||
@@ -109,7 +109,7 @@ jobs:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout into dir1
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||
submodules: true
|
||||
@@ -117,7 +117,7 @@ jobs:
|
||||
path: dir1
|
||||
|
||||
- name: Download build assets
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
path: dir1/dist
|
||||
@@ -143,13 +143,13 @@ jobs:
|
||||
bash
|
||||
|
||||
- name: Download build assets
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
path: dir2/dist
|
||||
|
||||
- name: Checkout into dir2
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||
submodules: true
|
||||
@@ -185,13 +185,13 @@ jobs:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Download build assets
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
|
||||
@@ -245,13 +245,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Download build assets
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
|
||||
@@ -275,6 +275,113 @@ jobs:
|
||||
shell:
|
||||
bash
|
||||
|
||||
test-skip-same-base-and-commit-sha:
|
||||
name: Test changed-files skip same base and commit sha
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
if: needs.build.outputs.files_changed != 'true'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Download build assets
|
||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
|
||||
- name: Get head SHA
|
||||
id: head-sha
|
||||
run: |
|
||||
echo "sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
|
||||
shell:
|
||||
bash
|
||||
|
||||
- name: Run changed-files with same base and commit sha
|
||||
id: changed-files
|
||||
uses: ./
|
||||
with:
|
||||
base_sha: ${{ steps.head-sha.outputs.sha }}
|
||||
sha: ${{ steps.head-sha.outputs.sha }}
|
||||
skip_same_sha: true
|
||||
|
||||
- name: Verify empty outputs
|
||||
if: steps.changed-files.outputs.all_changed_files_count != '0' || steps.changed-files.outputs.any_changed != 'false'
|
||||
run: |
|
||||
echo "Expected empty outputs; got count=${{ steps.changed-files.outputs.all_changed_files_count }} any_changed=${{ steps.changed-files.outputs.any_changed }}"
|
||||
exit 1
|
||||
shell:
|
||||
bash
|
||||
|
||||
- name: Show output
|
||||
run: |
|
||||
echo '${{ toJSON(steps.changed-files.outputs) }}'
|
||||
shell:
|
||||
bash
|
||||
|
||||
test-exclude-symlinks:
|
||||
name: Test changed-files exclude symlinks
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
if: needs.build.outputs.files_changed != 'true'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Download build assets
|
||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
|
||||
- name: Run changed-files without symlink exclusion
|
||||
id: changed-files-symlink-included
|
||||
uses: ./
|
||||
with:
|
||||
base_sha: 2f2f6cf099167fa7d7c6aba8fc0421327e181a5a
|
||||
sha: 8c4da285a3cb8b621b4a5cc251d6282b4b0a67a5
|
||||
|
||||
- name: Verify symlink is present
|
||||
if: "!contains(steps.changed-files-symlink-included.outputs.added_files, 'test/symlink-to-target')"
|
||||
run: |
|
||||
echo "Expected symlink to be present in added_files; got ${{ steps.changed-files-symlink-included.outputs.added_files }}"
|
||||
exit 1
|
||||
shell:
|
||||
bash
|
||||
|
||||
- name: Run changed-files excluding symlinks
|
||||
id: changed-files-symlink-excluded
|
||||
uses: ./
|
||||
with:
|
||||
base_sha: 2f2f6cf099167fa7d7c6aba8fc0421327e181a5a
|
||||
sha: 8c4da285a3cb8b621b4a5cc251d6282b4b0a67a5
|
||||
exclude_symlinks: true
|
||||
|
||||
- name: Verify symlink is excluded
|
||||
if: "contains(steps.changed-files-symlink-excluded.outputs.added_files, 'test/symlink-to-target') || contains(steps.changed-files-symlink-excluded.outputs.all_changed_files, 'test/symlink-to-target')"
|
||||
run: |
|
||||
echo "Expected symlink to be excluded; got added=${{ steps.changed-files-symlink-excluded.outputs.added_files }} all=${{ steps.changed-files-symlink-excluded.outputs.all_changed_files }}"
|
||||
exit 1
|
||||
shell:
|
||||
bash
|
||||
|
||||
- name: Show output
|
||||
run: |
|
||||
echo '${{ toJSON(steps.changed-files-symlink-included.outputs) }}'
|
||||
echo '${{ toJSON(steps.changed-files-symlink-excluded.outputs) }}'
|
||||
shell:
|
||||
bash
|
||||
|
||||
test-using-branch-names-for-base-sha-and-sha-inputs:
|
||||
name: Test using branch names for base_sha and sha inputs
|
||||
runs-on: ubuntu-latest
|
||||
@@ -289,13 +396,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Download build assets
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
|
||||
@@ -328,13 +435,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||
fetch-depth: ${{ matrix.fetch-depth }}
|
||||
|
||||
- name: Download build assets
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
|
||||
@@ -362,12 +469,12 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Download build assets
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
|
||||
@@ -396,14 +503,14 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
fetch-depth: ${{ matrix.fetch-depth }}
|
||||
persist-credentials: false
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||
|
||||
- name: Download build assets
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
|
||||
@@ -426,10 +533,10 @@ jobs:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
|
||||
- name: Download build assets
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
|
||||
@@ -481,10 +588,10 @@ jobs:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
|
||||
- name: Download build assets
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
|
||||
@@ -536,7 +643,7 @@ jobs:
|
||||
pull-requests: read
|
||||
steps:
|
||||
- name: Checkout into dir1
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||
submodules: true
|
||||
@@ -544,7 +651,7 @@ jobs:
|
||||
path: dir1
|
||||
|
||||
- name: Download build assets
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
path: dir1/dist
|
||||
@@ -568,14 +675,14 @@ jobs:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||
submodules: true
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Download build assets
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
path: dist
|
||||
@@ -605,7 +712,7 @@ jobs:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout into dir1
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||
submodules: true
|
||||
@@ -613,7 +720,7 @@ jobs:
|
||||
path: dir1
|
||||
|
||||
- name: Download build assets
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
path: dir1/dist
|
||||
@@ -644,14 +751,14 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||
submodules: recursive
|
||||
fetch-depth: ${{ matrix.fetch-depth }}
|
||||
|
||||
- name: Download build assets
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
|
||||
@@ -710,14 +817,14 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||
submodules: recursive
|
||||
fetch-depth: ${{ matrix.fetch-depth }}
|
||||
|
||||
- name: Download build assets
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
|
||||
@@ -805,14 +912,14 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||
submodules: recursive
|
||||
fetch-depth: ${{ matrix.fetch-depth }}
|
||||
|
||||
- name: Download build assets
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
|
||||
@@ -991,7 +1098,7 @@ jobs:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
ref: a52f8621d26d5d9f54b80f74bda2d9eedff94693
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||
@@ -1029,7 +1136,7 @@ jobs:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||
@@ -1108,7 +1215,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||
@@ -1116,7 +1223,7 @@ jobs:
|
||||
fetch-depth: ${{ matrix.fetch-depth }}
|
||||
|
||||
- name: Download build assets
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
|
||||
@@ -1161,13 +1268,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
submodules: true
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||
fetch-depth: ${{ matrix.fetch-depth }}
|
||||
- name: Download build assets
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
||||
with:
|
||||
name: build-assets
|
||||
- name: Dump GitHub context
|
||||
@@ -2154,7 +2261,7 @@ jobs:
|
||||
id: branch-name
|
||||
uses: tj-actions/branch-names@5250492686b253f06fa55861556d1027b067aeb5 # v9.0.2
|
||||
if: github.event_name == 'pull_request' && matrix.fetch-depth == 0
|
||||
- uses: nrwl/nx-set-shas@826660b82addbef3abff5fa871492ebad618c9e1 # v4.3.3
|
||||
- uses: nrwl/nx-set-shas@3e9ad7370203c1e93d109be57f3b72eb0eb511b1 # v4.4.0
|
||||
id: last_successful_commit
|
||||
if: github.event_name == 'pull_request' && github.event.action != 'closed' && matrix.fetch-depth == 0
|
||||
with:
|
||||
|
||||
5
.github/workflows/update-readme.yml
vendored
5
.github/workflows/update-readme.yml
vendored
@@ -13,7 +13,7 @@ jobs:
|
||||
sync-assets:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -21,7 +21,6 @@ jobs:
|
||||
uses: tj-actions/auto-doc@b10ceedffd794ec29a8fa8700529f40c1b64a951 # v3.6.0
|
||||
with:
|
||||
use_code_blocks: true
|
||||
use_major_version: true
|
||||
use_tag_commit_hash: true
|
||||
|
||||
- name: Run remark
|
||||
@@ -42,7 +41,7 @@ jobs:
|
||||
|
||||
- name: Create Pull Request
|
||||
if: failure()
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
|
||||
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8.1.0
|
||||
with:
|
||||
base: "main"
|
||||
labels: "merge when passing"
|
||||
|
||||
4
.github/workflows/workflow-run-example.yml
vendored
4
.github/workflows/workflow-run-example.yml
vendored
@@ -13,7 +13,7 @@ jobs:
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
@@ -29,7 +29,7 @@ jobs:
|
||||
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
|
||||
1871
HISTORY.md
1871
HISTORY.md
File diff suppressed because it is too large
Load Diff
90
README.md
90
README.md
@@ -3,7 +3,7 @@
|
||||
[](https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on)
|
||||
[](https://github.com/search?o=desc\&q=tj-actions+changed-files+language%3AYAML\&s=\&type=Code)
|
||||
|
||||
[](https://app.codacy.com/gh/tj-actions/changed-files/dashboard?utm_source=gh\&utm_medium=referral\&utm_content=\&utm_campaign=Badge_grade)
|
||||
[](https://app.codacy.com/gh/tj-actions/changed-files/dashboard?utm_source=gh\&utm_medium=referral\&utm_content=\&utm_campaign=Badge_grade)
|
||||
[](https://github.com/tj-actions/changed-files/actions/workflows/test.yml)
|
||||
[](https://github.com/tj-actions/changed-files/actions/workflows/sync-release-version.yml)
|
||||
|
||||
@@ -45,6 +45,7 @@ Effortlessly track all changed files and directories relative to a target branch
|
||||
* [Credits 👏](#credits-)
|
||||
* [Report Bugs 🐛](#report-bugs-)
|
||||
* [Contributors ✨](#contributors-)
|
||||
* [💼 Automate Your Job Search Too](#-automate-your-job-search-too)
|
||||
|
||||
## Features 🚀
|
||||
|
||||
@@ -122,7 +123,7 @@ jobs:
|
||||
# -----------------------------------------------------------------------------------------------------------
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
# To compare changes between the current commit and the last pushed remote commit set `since_last_remote_commit: true`. e.g
|
||||
# with:
|
||||
# since_last_remote_commit: true
|
||||
@@ -140,7 +141,7 @@ jobs:
|
||||
# -----------------------------------------------------------------------------------------------------------
|
||||
- name: Get all changed markdown files
|
||||
id: changed-markdown-files
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
# Avoid using single or double quotes for multiline patterns
|
||||
files: |
|
||||
@@ -161,7 +162,7 @@ jobs:
|
||||
# -----------------------------------------------------------------------------------------------------------
|
||||
- name: Get all test, doc and src files that have changed
|
||||
id: changed-files-yaml
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
files_yaml: |
|
||||
doc:
|
||||
@@ -196,7 +197,7 @@ jobs:
|
||||
# -----------------------------------------------------------------------------------------------------------
|
||||
- name: Get changed files in the docs folder
|
||||
id: changed-files-specific
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
files: docs/*.{js,html} # Alternatively using: `docs/**`
|
||||
files_ignore: docs/static.js
|
||||
@@ -238,7 +239,7 @@ jobs:
|
||||
steps:
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
|
||||
- name: List all changed files
|
||||
env:
|
||||
@@ -281,7 +282,7 @@ jobs:
|
||||
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
# NOTE: `since_last_remote_commit: true` is implied by default and falls back to the previous local commit.
|
||||
|
||||
- name: List all changed files
|
||||
@@ -328,7 +329,7 @@ Support this project with a :star:
|
||||
<!-- AUTO-DOC-INPUT:START - Do not remove or modify this section -->
|
||||
|
||||
```yaml
|
||||
- uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
- uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
id: changed-files
|
||||
with:
|
||||
# Github API URL.
|
||||
@@ -411,6 +412,11 @@ Support this project with a :star:
|
||||
# Default: "false"
|
||||
exclude_submodules: ''
|
||||
|
||||
# Exclude symlinks from changed files.
|
||||
# Type: boolean
|
||||
# Default: "false"
|
||||
exclude_symlinks: ''
|
||||
|
||||
# Fail when the initial diff
|
||||
# fails.
|
||||
# Type: boolean
|
||||
@@ -675,6 +681,12 @@ Support this project with a :star:
|
||||
# Default: "false"
|
||||
skip_initial_fetch: ''
|
||||
|
||||
# Do not fail when base
|
||||
# and head SHAs are identical.
|
||||
# Type: boolean
|
||||
# Default: "false"
|
||||
skip_same_sha: ''
|
||||
|
||||
# Tags pattern to ignore.
|
||||
# Type: string
|
||||
tags_ignore_pattern: ''
|
||||
@@ -814,7 +826,7 @@ The format of the version string is as follows:
|
||||
...
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
...
|
||||
```
|
||||
|
||||
@@ -827,7 +839,7 @@ The format of the version string is as follows:
|
||||
...
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
safe_output: false # set to false because we are using an environment variable to store the output and avoid command injection.
|
||||
|
||||
@@ -850,7 +862,7 @@ The format of the version string is as follows:
|
||||
...
|
||||
- name: Get all changed files and use a comma separator in the output
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
separator: ","
|
||||
...
|
||||
@@ -867,7 +879,7 @@ See [inputs](#inputs) for more information.
|
||||
...
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
|
||||
- name: List all added files
|
||||
env:
|
||||
@@ -890,7 +902,7 @@ See [outputs](#outputs) for a list of all available outputs.
|
||||
...
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
|
||||
- name: Run a step if my-file.txt was modified
|
||||
if: contains(steps.changed-files.outputs.modified_files, 'my-file.txt')
|
||||
@@ -911,7 +923,7 @@ See [outputs](#outputs) for a list of all available outputs.
|
||||
|
||||
- name: Get changed files and write the outputs to a Txt file
|
||||
id: changed-files-write-output-files-txt
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
write_output_files: true
|
||||
|
||||
@@ -930,7 +942,7 @@ See [outputs](#outputs) for a list of all available outputs.
|
||||
...
|
||||
- name: Get changed files and write the outputs to a JSON file
|
||||
id: changed-files-write-output-files-json
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
json: true
|
||||
write_output_files: true
|
||||
@@ -950,7 +962,7 @@ See [outputs](#outputs) for a list of all available outputs.
|
||||
...
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
files: |
|
||||
my-file.txt
|
||||
@@ -973,7 +985,7 @@ See [inputs](#inputs) for more information.
|
||||
...
|
||||
- name: Get changed files
|
||||
id: changed-files-specific
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
files: |
|
||||
my-file.txt
|
||||
@@ -1024,7 +1036,7 @@ See [outputs](#outputs) for a list of all available outputs.
|
||||
...
|
||||
- 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@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
files_from_source_file: test/changed-files-list.txt
|
||||
...
|
||||
@@ -1041,7 +1053,7 @@ See [inputs](#inputs) for more information.
|
||||
...
|
||||
- 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@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
files_from_source_file: |
|
||||
test/changed-files-list.txt
|
||||
@@ -1062,7 +1074,7 @@ See [inputs](#inputs) for more information.
|
||||
...
|
||||
- name: Get changed files using a different SHA
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
sha: ${{ github.event.pull_request.head.sha }}
|
||||
...
|
||||
@@ -1079,7 +1091,7 @@ See [inputs](#inputs) for more information.
|
||||
...
|
||||
- name: Get changed files using a different base SHA
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
base_sha: ${{ github.event.pull_request.base.sha }}
|
||||
...
|
||||
@@ -1111,7 +1123,7 @@ jobs:
|
||||
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
|
||||
- name: List changed files
|
||||
env:
|
||||
@@ -1121,7 +1133,7 @@ jobs:
|
||||
|
||||
- name: Get changed files in the .github folder
|
||||
id: changed-files-specific
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
files: .github/**
|
||||
|
||||
@@ -1152,7 +1164,7 @@ See [inputs](#inputs) for more information.
|
||||
|
||||
- name: Run changed-files with defaults in dir1
|
||||
id: changed-files-for-dir1
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
path: dir1
|
||||
|
||||
@@ -1177,13 +1189,13 @@ See [inputs](#inputs) for more information.
|
||||
...
|
||||
- name: Run changed-files with quotepath disabled
|
||||
id: changed-files-quotepath
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
quotepath: "false"
|
||||
|
||||
- name: Run changed-files with quotepath disabled for a specified list of file(s)
|
||||
id: changed-files-quotepath-specific
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
files: test/test-è.txt
|
||||
quotepath: "false"
|
||||
@@ -1216,7 +1228,7 @@ See [inputs](#inputs) for more information.
|
||||
|
||||
- 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@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
base_sha: ${{ steps.last_successful_commit_push.outputs.base }}
|
||||
...
|
||||
@@ -1243,7 +1255,7 @@ See [inputs](#inputs) for more information.
|
||||
|
||||
- name: Run changed-files with the commit of the last successful test workflow run on the main branch
|
||||
id: changed-files-base-sha-pull-request
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
base_sha: ${{ steps.last_successful_commit_pull_request.outputs.base }}
|
||||
...
|
||||
@@ -1269,7 +1281,7 @@ See [inputs](#inputs) for more information.
|
||||
...
|
||||
- name: Run changed-files with dir_names
|
||||
id: changed-files-dir-names
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
dir_names: "true"
|
||||
...
|
||||
@@ -1286,7 +1298,7 @@ See [inputs](#inputs) for more information.
|
||||
...
|
||||
- name: Run changed-files with JSON output
|
||||
id: changed-files-json
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
json: "true"
|
||||
...
|
||||
@@ -1303,13 +1315,13 @@ See [inputs](#inputs) for more information.
|
||||
...
|
||||
- name: Get changed-files since 2022-08-19
|
||||
id: changed-files-since
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
since: "2022-08-19"
|
||||
|
||||
- name: Get changed-files until 2022-08-20
|
||||
id: changed-files-until
|
||||
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
|
||||
uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4
|
||||
with:
|
||||
until: "2022-08-20"
|
||||
...
|
||||
@@ -1459,3 +1471,17 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
||||
|
||||
***
|
||||
|
||||
## 💼 Automate Your Job Search Too
|
||||
|
||||
You automate your CI/CD. Automate your job applications too.
|
||||
|
||||
**[ApplySmart AI](https://applysmart.ai)** helps you:
|
||||
|
||||
* Generate tailored resumes & cover letters in seconds
|
||||
* Extract job details from any posting automatically
|
||||
* Track applications like you track deployments
|
||||
|
||||
**Free tier available** → [applysmart.ai](https://applysmart.ai)
|
||||
|
||||
@@ -227,6 +227,14 @@ inputs:
|
||||
description: "Exclude changes to submodules."
|
||||
required: false
|
||||
default: "false"
|
||||
exclude_symlinks:
|
||||
description: "Exclude symlinks from changed files."
|
||||
required: false
|
||||
default: "false"
|
||||
skip_same_sha:
|
||||
description: "Do not fail when base and head SHAs are identical."
|
||||
required: false
|
||||
default: "false"
|
||||
fetch_missing_history_max_retries:
|
||||
description: "Maximum number of retries to fetch missing history."
|
||||
required: false
|
||||
|
||||
47129
dist/index.js
generated
vendored
47129
dist/index.js
generated
vendored
File diff suppressed because one or more lines are too long
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
98
dist/licenses.txt
generated
vendored
98
dist/licenses.txt
generated
vendored
@@ -71,28 +71,6 @@ The above copyright notice and this permission notice shall be included in all c
|
||||
|
||||
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.
|
||||
|
||||
@fastify/busboy
|
||||
MIT
|
||||
Copyright Brian White. All rights reserved.
|
||||
|
||||
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.
|
||||
|
||||
@octokit/auth-token
|
||||
MIT
|
||||
The MIT License
|
||||
@@ -5744,24 +5722,32 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
|
||||
deprecation
|
||||
ISC
|
||||
The ISC License
|
||||
fast-content-type-parse
|
||||
MIT
|
||||
MIT License
|
||||
|
||||
Copyright (c) Gregor Martynus and contributors
|
||||
Copyright (c) 2023 The Fastify Team
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
The Fastify team members are listed at https://github.com/fastify/fastify#team
|
||||
and in the README file.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
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.
|
||||
|
||||
fill-range
|
||||
MIT
|
||||
@@ -5889,25 +5875,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
|
||||
once
|
||||
ISC
|
||||
The ISC License
|
||||
|
||||
Copyright (c) Isaac Z. Schlueter and Contributors
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
|
||||
picomatch
|
||||
MIT
|
||||
The MIT License (MIT)
|
||||
@@ -6012,32 +5979,13 @@ universal-user-agent
|
||||
ISC
|
||||
# [ISC License](https://spdx.org/licenses/ISC)
|
||||
|
||||
Copyright (c) 2018, Gregor Martynus (https://github.com/gr2m)
|
||||
Copyright (c) 2018-2021, Gregor Martynus (https://github.com/gr2m)
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
|
||||
wrappy
|
||||
ISC
|
||||
The ISC License
|
||||
|
||||
Copyright (c) Isaac Z. Schlueter and Contributors
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
|
||||
yaml
|
||||
ISC
|
||||
Copyright Eemeli Aro <eemeli@gmail.com>
|
||||
|
||||
3
dist/package.json
generated
vendored
Normal file
3
dist/package.json
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"type": "module"
|
||||
}
|
||||
1
dist/sourcemap-register.cjs
generated
vendored
Normal file
1
dist/sourcemap-register.cjs
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -1,9 +1,13 @@
|
||||
module.exports = {
|
||||
clearMocks: true,
|
||||
extensionsToTreatAsEsm: ['.ts'],
|
||||
moduleFileExtensions: ['js', 'ts'],
|
||||
moduleNameMapper: {
|
||||
'^(\\.{1,2}/.*)\\.js$': '$1'
|
||||
},
|
||||
testMatch: ['**/*.test.ts'],
|
||||
transform: {
|
||||
'^.+\\.ts$': 'ts-jest'
|
||||
'^.+\\.ts$': ['ts-jest', {useESM: true}]
|
||||
},
|
||||
verbose: true,
|
||||
testTimeout: 10000,
|
||||
15
package.json
15
package.json
@@ -2,6 +2,7 @@
|
||||
"name": "@tj-actions/changed-files",
|
||||
"version": "45.0.8",
|
||||
"description": "Github action to retrieve all (added, copied, modified, deleted, renamed, type changed, unmerged, unknown) files and directories.",
|
||||
"type": "module",
|
||||
"main": "lib/main.js",
|
||||
"publishConfig": {
|
||||
"registry": "https://npm.pkg.github.com"
|
||||
@@ -13,8 +14,8 @@
|
||||
"lint": "eslint src/*.ts src/**/*.ts --max-warnings 0",
|
||||
"lint:fix": "eslint --fix src/*.ts src/**/*.ts",
|
||||
"package": "ncc build lib/main.js --source-map --license licenses.txt",
|
||||
"test": "jest --coverage",
|
||||
"update-snapshot": "jest -u",
|
||||
"test": "NODE_OPTIONS='--experimental-vm-modules' jest --coverage",
|
||||
"update-snapshot": "NODE_OPTIONS='--experimental-vm-modules' jest -u",
|
||||
"all": "yarn build && yarn format && yarn lint && yarn package && yarn test"
|
||||
},
|
||||
"repository": {
|
||||
@@ -33,9 +34,9 @@
|
||||
},
|
||||
"homepage": "https://github.com/tj-actions/changed-files#readme",
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.10.0",
|
||||
"@actions/exec": "^1.1.1",
|
||||
"@actions/github": "^6.0.0",
|
||||
"@actions/core": "^3.0.0",
|
||||
"@actions/exec": "^3.0.0",
|
||||
"@actions/github": "^9.0.0",
|
||||
"@octokit/rest": "^22.0.0",
|
||||
"@stdlib/utils-convert-path": "^0.2.1",
|
||||
"lodash": "^4.17.21",
|
||||
@@ -46,8 +47,8 @@
|
||||
"@types/jest": "^30.0.0",
|
||||
"@types/lodash": "^4.14.195",
|
||||
"@types/micromatch": "^4.0.2",
|
||||
"@types/node": "^24.0.1",
|
||||
"@types/uuid": "^10.0.0",
|
||||
"@types/node": "^25.0.0",
|
||||
"@types/uuid": "^11.0.0",
|
||||
"@typescript-eslint/eslint-plugin": "^7.0.0",
|
||||
"@typescript-eslint/parser": "^7.0.0",
|
||||
"@vercel/ncc": "^0.38.0",
|
||||
|
||||
@@ -4,17 +4,18 @@ exports[`getInputs should correctly parse boolean inputs 1`] = `
|
||||
{
|
||||
"apiUrl": "",
|
||||
"baseSha": "",
|
||||
"diffRelative": "false",
|
||||
"dirNames": "false",
|
||||
"dirNamesDeletedFilesIncludeOnlyDeletedDirs": "false",
|
||||
"dirNamesExcludeCurrentDir": "false",
|
||||
"diffRelative": false,
|
||||
"dirNames": false,
|
||||
"dirNamesDeletedFilesIncludeOnlyDeletedDirs": false,
|
||||
"dirNamesExcludeCurrentDir": false,
|
||||
"dirNamesIncludeFiles": "",
|
||||
"dirNamesIncludeFilesSeparator": "",
|
||||
"escapeJson": false,
|
||||
"excludeSubmodules": "false",
|
||||
"failOnInitialDiffError": "false",
|
||||
"failOnSubmoduleDiffError": "false",
|
||||
"fetchAdditionalSubmoduleHistory": "false",
|
||||
"excludeSubmodules": false,
|
||||
"excludeSymlinks": false,
|
||||
"failOnInitialDiffError": false,
|
||||
"failOnSubmoduleDiffError": false,
|
||||
"fetchAdditionalSubmoduleHistory": false,
|
||||
"fetchMissingHistoryMaxRetries": 20,
|
||||
"files": "",
|
||||
"filesFromSourceFile": "",
|
||||
@@ -30,16 +31,16 @@ exports[`getInputs should correctly parse boolean inputs 1`] = `
|
||||
"filesYaml": "",
|
||||
"filesYamlFromSourceFile": "",
|
||||
"filesYamlFromSourceFileSeparator": "",
|
||||
"includeAllOldNewRenamedFiles": "false",
|
||||
"includeAllOldNewRenamedFiles": false,
|
||||
"json": true,
|
||||
"negationPatternsFirst": "false",
|
||||
"negationPatternsFirst": false,
|
||||
"oldNewFilesSeparator": " ",
|
||||
"oldNewSeparator": ",",
|
||||
"outputDir": "",
|
||||
"outputRenamedFilesAsDeletedAndAdded": "false",
|
||||
"outputRenamedFilesAsDeletedAndAdded": false,
|
||||
"path": ".",
|
||||
"quotepath": "false",
|
||||
"recoverDeletedFiles": "false",
|
||||
"quotepath": false,
|
||||
"recoverDeletedFiles": false,
|
||||
"recoverDeletedFilesToDestination": "",
|
||||
"recoverFiles": "",
|
||||
"recoverFilesIgnore": "",
|
||||
@@ -47,19 +48,20 @@ exports[`getInputs should correctly parse boolean inputs 1`] = `
|
||||
",
|
||||
"recoverFilesSeparator": "
|
||||
",
|
||||
"safeOutput": "false",
|
||||
"safeOutput": false,
|
||||
"separator": "",
|
||||
"sha": "",
|
||||
"since": "",
|
||||
"sinceLastRemoteCommit": "false",
|
||||
"skipInitialFetch": "true",
|
||||
"sinceLastRemoteCommit": false,
|
||||
"skipInitialFetch": true,
|
||||
"skipSameSha": false,
|
||||
"tagsIgnorePattern": "",
|
||||
"tagsPattern": "*",
|
||||
"token": "",
|
||||
"until": "",
|
||||
"usePosixPathSeparator": "false",
|
||||
"useRestApi": "false",
|
||||
"writeOutputFiles": "false",
|
||||
"usePosixPathSeparator": false,
|
||||
"useRestApi": false,
|
||||
"writeOutputFiles": false,
|
||||
}
|
||||
`;
|
||||
|
||||
@@ -76,6 +78,7 @@ exports[`getInputs should correctly parse numeric inputs 1`] = `
|
||||
"dirNamesMaxDepth": 2,
|
||||
"escapeJson": false,
|
||||
"excludeSubmodules": false,
|
||||
"excludeSymlinks": false,
|
||||
"failOnInitialDiffError": false,
|
||||
"failOnSubmoduleDiffError": false,
|
||||
"fetchAdditionalSubmoduleHistory": false,
|
||||
@@ -115,6 +118,7 @@ exports[`getInputs should correctly parse numeric inputs 1`] = `
|
||||
"since": "",
|
||||
"sinceLastRemoteCommit": false,
|
||||
"skipInitialFetch": false,
|
||||
"skipSameSha": false,
|
||||
"tagsIgnorePattern": "",
|
||||
"tagsPattern": "",
|
||||
"token": "",
|
||||
@@ -137,6 +141,7 @@ exports[`getInputs should correctly parse string inputs 1`] = `
|
||||
"dirNamesIncludeFilesSeparator": "",
|
||||
"escapeJson": false,
|
||||
"excludeSubmodules": false,
|
||||
"excludeSymlinks": false,
|
||||
"failOnInitialDiffError": false,
|
||||
"failOnSubmoduleDiffError": false,
|
||||
"fetchAdditionalSubmoduleHistory": false,
|
||||
@@ -175,6 +180,7 @@ exports[`getInputs should correctly parse string inputs 1`] = `
|
||||
"since": "",
|
||||
"sinceLastRemoteCommit": false,
|
||||
"skipInitialFetch": false,
|
||||
"skipSameSha": false,
|
||||
"tagsIgnorePattern": "",
|
||||
"tagsPattern": "",
|
||||
"token": "token",
|
||||
@@ -198,6 +204,7 @@ exports[`getInputs should handle invalid numeric inputs correctly 1`] = `
|
||||
"dirNamesMaxDepth": 2,
|
||||
"escapeJson": false,
|
||||
"excludeSubmodules": false,
|
||||
"excludeSymlinks": false,
|
||||
"failOnInitialDiffError": false,
|
||||
"failOnSubmoduleDiffError": false,
|
||||
"fetchAdditionalSubmoduleHistory": false,
|
||||
@@ -237,6 +244,7 @@ exports[`getInputs should handle invalid numeric inputs correctly 1`] = `
|
||||
"since": "",
|
||||
"sinceLastRemoteCommit": false,
|
||||
"skipInitialFetch": false,
|
||||
"skipSameSha": false,
|
||||
"tagsIgnorePattern": "",
|
||||
"tagsPattern": "",
|
||||
"token": "",
|
||||
@@ -260,6 +268,7 @@ exports[`getInputs should handle negative numeric inputs correctly 1`] = `
|
||||
"dirNamesMaxDepth": -2,
|
||||
"escapeJson": false,
|
||||
"excludeSubmodules": false,
|
||||
"excludeSymlinks": false,
|
||||
"failOnInitialDiffError": false,
|
||||
"failOnSubmoduleDiffError": false,
|
||||
"fetchAdditionalSubmoduleHistory": false,
|
||||
@@ -299,6 +308,7 @@ exports[`getInputs should handle negative numeric inputs correctly 1`] = `
|
||||
"since": "",
|
||||
"sinceLastRemoteCommit": false,
|
||||
"skipInitialFetch": false,
|
||||
"skipSameSha": false,
|
||||
"tagsIgnorePattern": "",
|
||||
"tagsPattern": "",
|
||||
"token": "",
|
||||
@@ -321,6 +331,7 @@ exports[`getInputs should return default values when no inputs are provided 1`]
|
||||
"dirNamesIncludeFilesSeparator": "",
|
||||
"escapeJson": false,
|
||||
"excludeSubmodules": false,
|
||||
"excludeSymlinks": false,
|
||||
"failOnInitialDiffError": false,
|
||||
"failOnSubmoduleDiffError": false,
|
||||
"fetchAdditionalSubmoduleHistory": false,
|
||||
@@ -362,6 +373,7 @@ exports[`getInputs should return default values when no inputs are provided 1`]
|
||||
"since": "",
|
||||
"sinceLastRemoteCommit": false,
|
||||
"skipInitialFetch": false,
|
||||
"skipSameSha": false,
|
||||
"tagsIgnorePattern": "",
|
||||
"tagsPattern": "*",
|
||||
"token": "",
|
||||
|
||||
@@ -1,8 +1,14 @@
|
||||
import * as core from '@actions/core'
|
||||
import {getInputs, Inputs} from '../inputs'
|
||||
import {DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS} from '../constant'
|
||||
import {jest} from '@jest/globals'
|
||||
import type {Inputs} from '../inputs.js'
|
||||
import {DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS} from '../constant.js'
|
||||
|
||||
jest.mock('@actions/core')
|
||||
jest.unstable_mockModule('@actions/core', () => ({
|
||||
getInput: jest.fn(),
|
||||
getBooleanInput: jest.fn()
|
||||
}))
|
||||
|
||||
const {getInputs} = await import('../inputs.js')
|
||||
const core = await import('@actions/core')
|
||||
|
||||
describe('getInputs', () => {
|
||||
afterEach(() => {
|
||||
@@ -10,17 +16,17 @@ describe('getInputs', () => {
|
||||
})
|
||||
|
||||
test('should return default values when no inputs are provided', () => {
|
||||
;(core.getInput as jest.Mock).mockImplementation(name => {
|
||||
const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
|
||||
return g[1].toUpperCase()
|
||||
;jest.mocked(core.getInput).mockImplementation((name: string) => {
|
||||
const camelCaseName = name.replace(/_([a-z])/g, (_: string, g: string) => {
|
||||
return g.toUpperCase()
|
||||
}) as keyof Inputs
|
||||
|
||||
return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
|
||||
'') as string
|
||||
})
|
||||
;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
|
||||
const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
|
||||
return g[1].toUpperCase()
|
||||
;jest.mocked(core.getBooleanInput).mockImplementation((name: string) => {
|
||||
const camelCaseName = name.replace(/_([a-z])/g, (_: string, g: string) => {
|
||||
return g.toUpperCase()
|
||||
}) as keyof Inputs
|
||||
|
||||
return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
|
||||
@@ -30,30 +36,30 @@ describe('getInputs', () => {
|
||||
})
|
||||
|
||||
test('should correctly parse boolean inputs', () => {
|
||||
;(core.getInput as jest.Mock).mockImplementation(name => {
|
||||
const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
|
||||
return g[1].toUpperCase()
|
||||
;jest.mocked(core.getInput).mockImplementation((name: string) => {
|
||||
const camelCaseName = name.replace(/_([a-z])/g, (_: string, g: string) => {
|
||||
return g.toUpperCase()
|
||||
}) as keyof Inputs
|
||||
|
||||
return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
|
||||
'') as string
|
||||
})
|
||||
;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
|
||||
;jest.mocked(core.getBooleanInput).mockImplementation((name: string) => {
|
||||
switch (name) {
|
||||
case 'matrix':
|
||||
return 'true'
|
||||
return true
|
||||
case 'skip_initial_fetch':
|
||||
return 'true'
|
||||
return true
|
||||
default:
|
||||
return 'false'
|
||||
return false
|
||||
}
|
||||
})
|
||||
expect(getInputs()).toMatchSnapshot()
|
||||
})
|
||||
|
||||
test('should handle matrix alias correctly', () => {
|
||||
;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
|
||||
return name === 'matrix' ? 'true' : 'false'
|
||||
;jest.mocked(core.getBooleanInput).mockImplementation((name: string) => {
|
||||
return name === 'matrix'
|
||||
})
|
||||
|
||||
const inputs = getInputs()
|
||||
@@ -62,7 +68,7 @@ describe('getInputs', () => {
|
||||
})
|
||||
|
||||
test('should correctly parse string inputs', () => {
|
||||
;(core.getInput as jest.Mock).mockImplementation(name => {
|
||||
;jest.mocked(core.getInput).mockImplementation((name: string) => {
|
||||
switch (name) {
|
||||
case 'token':
|
||||
return 'token'
|
||||
@@ -72,9 +78,9 @@ describe('getInputs', () => {
|
||||
return ''
|
||||
}
|
||||
})
|
||||
;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
|
||||
const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
|
||||
return g[1].toUpperCase()
|
||||
;jest.mocked(core.getBooleanInput).mockImplementation((name: string) => {
|
||||
const camelCaseName = name.replace(/_([a-z])/g, (_: string, g: string) => {
|
||||
return g.toUpperCase()
|
||||
}) as keyof Inputs
|
||||
|
||||
return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
|
||||
@@ -84,7 +90,7 @@ describe('getInputs', () => {
|
||||
})
|
||||
|
||||
test('should correctly parse numeric inputs', () => {
|
||||
;(core.getInput as jest.Mock).mockImplementation(name => {
|
||||
;jest.mocked(core.getInput).mockImplementation((name: string) => {
|
||||
switch (name) {
|
||||
case 'fetch_depth':
|
||||
return '5'
|
||||
@@ -94,9 +100,9 @@ describe('getInputs', () => {
|
||||
return ''
|
||||
}
|
||||
})
|
||||
;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
|
||||
const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
|
||||
return g[1].toUpperCase()
|
||||
;jest.mocked(core.getBooleanInput).mockImplementation((name: string) => {
|
||||
const camelCaseName = name.replace(/_([a-z])/g, (_: string, g: string) => {
|
||||
return g.toUpperCase()
|
||||
}) as keyof Inputs
|
||||
|
||||
return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
|
||||
@@ -106,7 +112,7 @@ describe('getInputs', () => {
|
||||
})
|
||||
|
||||
test('should handle invalid numeric inputs correctly', () => {
|
||||
;(core.getInput as jest.Mock).mockImplementation(name => {
|
||||
;jest.mocked(core.getInput).mockImplementation((name: string) => {
|
||||
// TODO: Add validation for invalid numbers which should result in an error instead of NaN
|
||||
switch (name) {
|
||||
case 'fetch_depth':
|
||||
@@ -117,9 +123,9 @@ describe('getInputs', () => {
|
||||
return ''
|
||||
}
|
||||
})
|
||||
;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
|
||||
const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
|
||||
return g[1].toUpperCase()
|
||||
;jest.mocked(core.getBooleanInput).mockImplementation((name: string) => {
|
||||
const camelCaseName = name.replace(/_([a-z])/g, (_: string, g: string) => {
|
||||
return g.toUpperCase()
|
||||
}) as keyof Inputs
|
||||
|
||||
return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
|
||||
@@ -129,7 +135,7 @@ describe('getInputs', () => {
|
||||
})
|
||||
|
||||
test('should handle negative numeric inputs correctly', () => {
|
||||
;(core.getInput as jest.Mock).mockImplementation(name => {
|
||||
;jest.mocked(core.getInput).mockImplementation((name: string) => {
|
||||
// TODO: Add validation for negative numbers which should result in an error
|
||||
switch (name) {
|
||||
case 'fetch_depth':
|
||||
@@ -140,9 +146,9 @@ describe('getInputs', () => {
|
||||
return ''
|
||||
}
|
||||
})
|
||||
;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
|
||||
const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
|
||||
return g[1].toUpperCase()
|
||||
;jest.mocked(core.getBooleanInput).mockImplementation((name: string) => {
|
||||
const camelCaseName = name.replace(/_([a-z])/g, (_: string, g: string) => {
|
||||
return g.toUpperCase()
|
||||
}) as keyof Inputs
|
||||
|
||||
return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
|
||||
|
||||
@@ -1,15 +1,27 @@
|
||||
import * as core from '@actions/core'
|
||||
import * as exec from '@actions/exec'
|
||||
import {ChangeTypeEnum} from '../changedFiles'
|
||||
import {Inputs} from '../inputs'
|
||||
import {
|
||||
import {jest} from '@jest/globals'
|
||||
import type {Inputs} from '../inputs.js'
|
||||
|
||||
jest.unstable_mockModule('@actions/core', () => ({
|
||||
warning: jest.fn(),
|
||||
isDebug: jest.fn()
|
||||
}))
|
||||
|
||||
jest.unstable_mockModule('@actions/exec', () => ({
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
getExecOutput: (jest.fn() as jest.Mock<any>).mockResolvedValue({stdout: '', stderr: '', exitCode: 0})
|
||||
}))
|
||||
|
||||
const core = await import('@actions/core')
|
||||
const exec = await import('@actions/exec')
|
||||
const {ChangeTypeEnum} = await import('../changedFiles.js')
|
||||
const {
|
||||
getDirname,
|
||||
getDirnameMaxDepth,
|
||||
getFilteredChangedFiles,
|
||||
getPreviousGitTag,
|
||||
normalizeSeparators,
|
||||
warnUnsupportedRESTAPIInputs
|
||||
} from '../utils'
|
||||
} = await import('../utils.js')
|
||||
|
||||
const originalPlatform = process.platform
|
||||
|
||||
@@ -639,13 +651,15 @@ describe('utils test', () => {
|
||||
negationPatternsFirst: false,
|
||||
useRestApi: false,
|
||||
excludeSubmodules: false,
|
||||
excludeSymlinks: false,
|
||||
skipSameSha: false,
|
||||
fetchMissingHistoryMaxRetries: 20,
|
||||
usePosixPathSeparator: false,
|
||||
tagsPattern: '*',
|
||||
tagsIgnorePattern: ''
|
||||
}
|
||||
|
||||
const coreWarningSpy = jest.spyOn(core, 'warning')
|
||||
const coreWarningSpy = jest.mocked(core.warning)
|
||||
|
||||
await warnUnsupportedRESTAPIInputs({
|
||||
inputs
|
||||
@@ -712,7 +726,7 @@ describe('utils test', () => {
|
||||
|
||||
// No tags are available in the repository
|
||||
it('should return empty values when no tags are available in the repository', async () => {
|
||||
jest.spyOn(exec, 'getExecOutput').mockResolvedValueOnce({
|
||||
jest.mocked(exec.getExecOutput).mockResolvedValueOnce({
|
||||
stdout: '',
|
||||
stderr: '',
|
||||
exitCode: 0
|
||||
@@ -728,7 +742,7 @@ describe('utils test', () => {
|
||||
|
||||
// Only one tag is available, making it impossible to find a previous tag
|
||||
it('should return empty values when only one tag is available', async () => {
|
||||
jest.spyOn(exec, 'getExecOutput').mockResolvedValueOnce({
|
||||
jest.mocked(exec.getExecOutput).mockResolvedValueOnce({
|
||||
stdout:
|
||||
'v1.0.1|f0751de6af436d4e79016e2041cf6400e0833653|2021-01-01T00:00:00Z',
|
||||
stderr: '',
|
||||
@@ -746,7 +760,7 @@ describe('utils test', () => {
|
||||
// Git commands fail and throw errors
|
||||
it('should throw an error when git commands fail', async () => {
|
||||
jest
|
||||
.spyOn(exec, 'getExecOutput')
|
||||
.mocked(exec.getExecOutput)
|
||||
.mockRejectedValue(new Error('git command failed'))
|
||||
await expect(
|
||||
getPreviousGitTag({
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
import * as core from '@actions/core'
|
||||
import * as github from '@actions/github'
|
||||
import type {RestEndpointMethodTypes} from '@octokit/rest'
|
||||
import flatten from 'lodash/flatten'
|
||||
import lodash from 'lodash'
|
||||
const {flatten} = lodash
|
||||
import convertPath from '@stdlib/utils-convert-path'
|
||||
import mm from 'micromatch'
|
||||
import * as path from 'path'
|
||||
import {setOutputsAndGetModifiedAndChangedFilesStatus} from './changedFilesOutput'
|
||||
import {DiffResult} from './commitSha'
|
||||
import {Inputs} from './inputs'
|
||||
import {setOutputsAndGetModifiedAndChangedFilesStatus} from './changedFilesOutput.js'
|
||||
import {DiffResult} from './commitSha.js'
|
||||
import {Inputs} from './inputs.js'
|
||||
import {
|
||||
canDiffCommits,
|
||||
getAllChangedFiles,
|
||||
@@ -16,10 +17,12 @@ import {
|
||||
getFilteredChangedFiles,
|
||||
gitRenamedFiles,
|
||||
gitSubmoduleDiffSHA,
|
||||
isSymlinkInGitTree,
|
||||
isSymlinkOnDisk,
|
||||
isWindows,
|
||||
jsonOutput,
|
||||
setArrayOutput
|
||||
} from './utils'
|
||||
} from './utils.js'
|
||||
|
||||
export const processChangedFiles = async ({
|
||||
filePatterns,
|
||||
@@ -220,7 +223,8 @@ export const getAllDiffFiles = async ({
|
||||
outputRenamedFilesAsDeletedAndAdded,
|
||||
fetchAdditionalSubmoduleHistory,
|
||||
failOnInitialDiffError,
|
||||
failOnSubmoduleDiffError
|
||||
failOnSubmoduleDiffError,
|
||||
submoduleShas
|
||||
}: {
|
||||
workingDirectory: string
|
||||
diffSubmodule: boolean
|
||||
@@ -230,6 +234,7 @@ export const getAllDiffFiles = async ({
|
||||
fetchAdditionalSubmoduleHistory: boolean
|
||||
failOnInitialDiffError: boolean
|
||||
failOnSubmoduleDiffError: boolean
|
||||
submoduleShas?: Record<string, {previousSha?: string; currentSha?: string}>
|
||||
}): Promise<ChangedFiles> => {
|
||||
const files = await getAllChangedFiles({
|
||||
cwd: workingDirectory,
|
||||
@@ -256,6 +261,9 @@ export const getAllDiffFiles = async ({
|
||||
)
|
||||
|
||||
if (submoduleShaResult.currentSha && submoduleShaResult.previousSha) {
|
||||
if (submoduleShas) {
|
||||
submoduleShas[submodulePath] = submoduleShaResult
|
||||
}
|
||||
let diff = '...'
|
||||
|
||||
if (
|
||||
@@ -300,6 +308,139 @@ export const getAllDiffFiles = async ({
|
||||
return files
|
||||
}
|
||||
|
||||
export const filterSymlinksFromChangedFiles = async ({
|
||||
changedFiles,
|
||||
workingDirectory,
|
||||
diffResult,
|
||||
submodulePaths,
|
||||
submoduleShas
|
||||
}: {
|
||||
changedFiles: ChangedFiles
|
||||
workingDirectory: string
|
||||
diffResult: DiffResult
|
||||
submodulePaths: string[]
|
||||
submoduleShas?: Record<string, {previousSha?: string; currentSha?: string}>
|
||||
}): Promise<ChangedFiles> => {
|
||||
const filtered: ChangedFiles = {
|
||||
[ChangeTypeEnum.Added]: [],
|
||||
[ChangeTypeEnum.Copied]: [],
|
||||
[ChangeTypeEnum.Deleted]: [],
|
||||
[ChangeTypeEnum.Modified]: [],
|
||||
[ChangeTypeEnum.Renamed]: [],
|
||||
[ChangeTypeEnum.TypeChanged]: [],
|
||||
[ChangeTypeEnum.Unmerged]: [],
|
||||
[ChangeTypeEnum.Unknown]: []
|
||||
}
|
||||
|
||||
const cache = new Map<string, boolean>()
|
||||
const diskCache = new Map<string, boolean>()
|
||||
|
||||
const getSubmoduleContext = (
|
||||
filePath: string
|
||||
): {
|
||||
cwd: string
|
||||
relativePath: string
|
||||
currentSha: string
|
||||
previousSha: string
|
||||
isSubmoduleRoot: boolean
|
||||
} => {
|
||||
const submodulePath = submodulePaths.find(p =>
|
||||
filePath.startsWith(`${p}${path.sep}`)
|
||||
)
|
||||
if (!submodulePath) {
|
||||
return {
|
||||
cwd: workingDirectory,
|
||||
relativePath: filePath,
|
||||
currentSha: diffResult.currentSha,
|
||||
previousSha: diffResult.previousSha,
|
||||
isSubmoduleRoot: false
|
||||
}
|
||||
}
|
||||
|
||||
if (filePath === submodulePath) {
|
||||
return {
|
||||
cwd: workingDirectory,
|
||||
relativePath: filePath,
|
||||
currentSha: diffResult.currentSha,
|
||||
previousSha: diffResult.previousSha,
|
||||
isSubmoduleRoot: true
|
||||
}
|
||||
}
|
||||
|
||||
const submoduleWorkingDirectory = path.join(workingDirectory, submodulePath)
|
||||
const relativePath = filePath.substring(submodulePath.length + 1)
|
||||
const submoduleSha = submoduleShas?.[submodulePath]
|
||||
|
||||
return {
|
||||
cwd: submoduleWorkingDirectory,
|
||||
relativePath,
|
||||
currentSha: submoduleSha?.currentSha || diffResult.currentSha,
|
||||
previousSha: submoduleSha?.previousSha || diffResult.previousSha,
|
||||
isSubmoduleRoot: false
|
||||
}
|
||||
}
|
||||
|
||||
const isSymlinkCached = async ({
|
||||
cwd,
|
||||
filePath,
|
||||
sha,
|
||||
preferDisk
|
||||
}: {
|
||||
cwd: string
|
||||
filePath: string
|
||||
sha: string
|
||||
preferDisk: boolean
|
||||
}): Promise<boolean> => {
|
||||
if (preferDisk) {
|
||||
const diskKey = `${cwd}|disk|${filePath}`
|
||||
const cachedDisk = diskCache.get(diskKey)
|
||||
if (cachedDisk !== undefined) {
|
||||
return cachedDisk
|
||||
}
|
||||
const diskResult = await isSymlinkOnDisk({cwd, filePath})
|
||||
diskCache.set(diskKey, diskResult)
|
||||
if (diskResult) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
const treeKey = `${cwd}|${sha}|${filePath}`
|
||||
const cachedTree = cache.get(treeKey)
|
||||
if (cachedTree !== undefined) {
|
||||
return cachedTree
|
||||
}
|
||||
const treeResult = await isSymlinkInGitTree({cwd, sha, filePath})
|
||||
cache.set(treeKey, treeResult)
|
||||
return treeResult
|
||||
}
|
||||
|
||||
for (const changeType of Object.keys(changedFiles) as ChangeTypeEnum[]) {
|
||||
const files = changedFiles[changeType] || []
|
||||
for (const filePath of files) {
|
||||
const context = getSubmoduleContext(filePath)
|
||||
if (context.isSubmoduleRoot) {
|
||||
filtered[changeType].push(filePath)
|
||||
continue
|
||||
}
|
||||
|
||||
const isDeleted = changeType === ChangeTypeEnum.Deleted
|
||||
const sha = isDeleted ? context.previousSha : context.currentSha
|
||||
const isSymlink = await isSymlinkCached({
|
||||
cwd: context.cwd,
|
||||
filePath: context.relativePath,
|
||||
sha,
|
||||
preferDisk: !isDeleted
|
||||
})
|
||||
|
||||
if (!isSymlink) {
|
||||
filtered[changeType].push(filePath)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return filtered
|
||||
}
|
||||
|
||||
function* getFilePaths({
|
||||
inputs,
|
||||
filePaths,
|
||||
|
||||
@@ -5,9 +5,9 @@ import {
|
||||
ChangeTypeEnum,
|
||||
getAllChangeTypeFiles,
|
||||
getChangeTypeFiles
|
||||
} from './changedFiles'
|
||||
import {Inputs} from './inputs'
|
||||
import {getOutputKey, setArrayOutput, setOutput, exists} from './utils'
|
||||
} from './changedFiles.js'
|
||||
import {Inputs} from './inputs.js'
|
||||
import {getOutputKey, setArrayOutput, setOutput, exists} from './utils.js'
|
||||
|
||||
const getArrayFromPaths = (
|
||||
paths: string | string[],
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import * as core from '@actions/core'
|
||||
import * as github from '@actions/github'
|
||||
|
||||
import {Env} from './env'
|
||||
import {Inputs} from './inputs'
|
||||
import {Env} from './env.js'
|
||||
import {Inputs} from './inputs.js'
|
||||
import {
|
||||
canDiffCommits,
|
||||
cleanShaInput,
|
||||
@@ -15,7 +15,7 @@ import {
|
||||
gitFetchSubmodules,
|
||||
gitLog,
|
||||
verifyCommitSha
|
||||
} from './utils'
|
||||
} from './utils.js'
|
||||
|
||||
const getCurrentSHA = async ({
|
||||
inputs,
|
||||
@@ -84,6 +84,7 @@ export interface DiffResult {
|
||||
targetBranch: string
|
||||
diff: string
|
||||
initialCommit?: boolean
|
||||
sameSha?: boolean
|
||||
}
|
||||
|
||||
interface SHAForNonPullRequestEvent {
|
||||
@@ -198,6 +199,19 @@ export const getSHAForNonPullRequestEvent = async ({
|
||||
|
||||
if (inputs.baseSha && inputs.sha && currentBranch && targetBranch) {
|
||||
if (previousSha === currentSha) {
|
||||
if (inputs.skipSameSha) {
|
||||
core.info(
|
||||
`Skipping diff because previous sha ${previousSha} is equivalent to the current sha ${currentSha}.`
|
||||
)
|
||||
return {
|
||||
previousSha,
|
||||
currentSha,
|
||||
currentBranch,
|
||||
targetBranch,
|
||||
diff,
|
||||
sameSha: true
|
||||
}
|
||||
}
|
||||
core.error(
|
||||
`Similar commit hashes detected: previous sha: ${previousSha} is equivalent to the current sha: ${currentSha}.`
|
||||
)
|
||||
@@ -305,6 +319,19 @@ export const getSHAForNonPullRequestEvent = async ({
|
||||
core.debug(`Current branch: ${currentBranch}`)
|
||||
|
||||
if (!initialCommit && previousSha === currentSha) {
|
||||
if (inputs.skipSameSha) {
|
||||
core.info(
|
||||
`Skipping diff because previous sha ${previousSha} is equivalent to the current sha ${currentSha}.`
|
||||
)
|
||||
return {
|
||||
previousSha,
|
||||
currentSha,
|
||||
currentBranch,
|
||||
targetBranch,
|
||||
diff,
|
||||
sameSha: true
|
||||
}
|
||||
}
|
||||
core.error(
|
||||
`Similar commit hashes detected: previous sha: ${previousSha} is equivalent to the current sha: ${currentSha}.`
|
||||
)
|
||||
@@ -430,6 +457,19 @@ export const getSHAForPullRequestEvent = async ({
|
||||
|
||||
if (inputs.baseSha && inputs.sha && currentBranch && targetBranch) {
|
||||
if (previousSha === currentSha) {
|
||||
if (inputs.skipSameSha) {
|
||||
core.info(
|
||||
`Skipping diff because previous sha ${previousSha} is equivalent to the current sha ${currentSha}.`
|
||||
)
|
||||
return {
|
||||
previousSha,
|
||||
currentSha,
|
||||
currentBranch,
|
||||
targetBranch,
|
||||
diff,
|
||||
sameSha: true
|
||||
}
|
||||
}
|
||||
core.error(
|
||||
`Similar commit hashes detected: previous sha: ${previousSha} is equivalent to the current sha: ${currentSha}.`
|
||||
)
|
||||
@@ -608,6 +648,19 @@ export const getSHAForPullRequestEvent = async ({
|
||||
}
|
||||
|
||||
if (previousSha === currentSha) {
|
||||
if (inputs.skipSameSha) {
|
||||
core.info(
|
||||
`Skipping diff because previous sha ${previousSha} is equivalent to the current sha ${currentSha}.`
|
||||
)
|
||||
return {
|
||||
previousSha,
|
||||
currentSha,
|
||||
currentBranch,
|
||||
targetBranch,
|
||||
diff,
|
||||
sameSha: true
|
||||
}
|
||||
}
|
||||
core.error(
|
||||
`Similar commit hashes detected: previous sha: ${previousSha} is equivalent to the current sha: ${currentSha}.`
|
||||
)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {Inputs} from './inputs'
|
||||
import {Inputs} from './inputs.js'
|
||||
|
||||
export const DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS: Partial<Inputs> = {
|
||||
sha: '',
|
||||
@@ -22,6 +22,8 @@ export const DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS: Partial<Inputs> = {
|
||||
fetchAdditionalSubmoduleHistory: false,
|
||||
dirNamesDeletedFilesIncludeOnlyDeletedDirs: false,
|
||||
excludeSubmodules: false,
|
||||
excludeSymlinks: false,
|
||||
skipSameSha: false,
|
||||
fetchMissingHistoryMaxRetries: 20,
|
||||
usePosixPathSeparator: false,
|
||||
tagsPattern: '*',
|
||||
|
||||
@@ -55,6 +55,8 @@ export type Inputs = {
|
||||
negationPatternsFirst: boolean
|
||||
useRestApi: boolean
|
||||
excludeSubmodules: boolean
|
||||
excludeSymlinks: boolean
|
||||
skipSameSha: boolean
|
||||
fetchMissingHistoryMaxRetries?: number
|
||||
usePosixPathSeparator: boolean
|
||||
tagsPattern: string
|
||||
@@ -249,6 +251,14 @@ export const getInputs = (): Inputs => {
|
||||
required: false
|
||||
})
|
||||
|
||||
const excludeSymlinks = core.getBooleanInput('exclude_symlinks', {
|
||||
required: false
|
||||
})
|
||||
|
||||
const skipSameSha = core.getBooleanInput('skip_same_sha', {
|
||||
required: false
|
||||
})
|
||||
|
||||
const fetchMissingHistoryMaxRetries = core.getInput(
|
||||
'fetch_missing_history_max_retries',
|
||||
{required: false}
|
||||
@@ -310,6 +320,8 @@ export const getInputs = (): Inputs => {
|
||||
fetchAdditionalSubmoduleHistory,
|
||||
dirNamesDeletedFilesIncludeOnlyDeletedDirs,
|
||||
excludeSubmodules,
|
||||
excludeSymlinks,
|
||||
skipSameSha,
|
||||
usePosixPathSeparator,
|
||||
tagsPattern,
|
||||
tagsIgnorePattern,
|
||||
|
||||
76
src/main.ts
76
src/main.ts
@@ -5,16 +5,18 @@ import {
|
||||
processChangedFiles,
|
||||
ChangeTypeEnum,
|
||||
getAllDiffFiles,
|
||||
filterSymlinksFromChangedFiles,
|
||||
getChangedFilesFromGithubAPI,
|
||||
getRenamedFiles
|
||||
} from './changedFiles'
|
||||
getRenamedFiles,
|
||||
ChangedFiles
|
||||
} from './changedFiles.js'
|
||||
import {
|
||||
DiffResult,
|
||||
getSHAForNonPullRequestEvent,
|
||||
getSHAForPullRequestEvent
|
||||
} from './commitSha'
|
||||
import {Env, getEnv} from './env'
|
||||
import {getInputs, Inputs} from './inputs'
|
||||
} from './commitSha.js'
|
||||
import {Env, getEnv} from './env.js'
|
||||
import {getInputs, Inputs} from './inputs.js'
|
||||
import {
|
||||
getFilePatterns,
|
||||
getRecoverFilePatterns,
|
||||
@@ -28,7 +30,7 @@ import {
|
||||
updateGitGlobalConfig,
|
||||
verifyMinimumGitVersion,
|
||||
warnUnsupportedRESTAPIInputs
|
||||
} from './utils'
|
||||
} from './utils.js'
|
||||
|
||||
const getChangedFilesFromLocalGitHistory = async ({
|
||||
inputs,
|
||||
@@ -127,11 +129,57 @@ const getChangedFilesFromLocalGitHistory = async ({
|
||||
return
|
||||
}
|
||||
|
||||
if (diffResult.sameSha) {
|
||||
core.info('Base and head SHAs are identical; no changed files to report.')
|
||||
const emptyChangedFiles: ChangedFiles = {
|
||||
[ChangeTypeEnum.Added]: [],
|
||||
[ChangeTypeEnum.Copied]: [],
|
||||
[ChangeTypeEnum.Deleted]: [],
|
||||
[ChangeTypeEnum.Modified]: [],
|
||||
[ChangeTypeEnum.Renamed]: [],
|
||||
[ChangeTypeEnum.TypeChanged]: [],
|
||||
[ChangeTypeEnum.Unmerged]: [],
|
||||
[ChangeTypeEnum.Unknown]: []
|
||||
}
|
||||
await processChangedFiles({
|
||||
filePatterns,
|
||||
allDiffFiles: emptyChangedFiles,
|
||||
inputs,
|
||||
yamlFilePatterns,
|
||||
workingDirectory
|
||||
})
|
||||
|
||||
if (inputs.includeAllOldNewRenamedFiles) {
|
||||
await setOutput({
|
||||
key: 'all_old_new_renamed_files',
|
||||
value: inputs.json ? [] : '',
|
||||
writeOutputFiles: inputs.writeOutputFiles,
|
||||
outputDir: inputs.outputDir,
|
||||
json: inputs.json,
|
||||
safeOutput: inputs.safeOutput
|
||||
})
|
||||
await setOutput({
|
||||
key: 'all_old_new_renamed_files_count',
|
||||
value: '0',
|
||||
writeOutputFiles: inputs.writeOutputFiles,
|
||||
outputDir: inputs.outputDir,
|
||||
json: inputs.json
|
||||
})
|
||||
}
|
||||
core.info('All Done!')
|
||||
core.endGroup()
|
||||
return
|
||||
}
|
||||
|
||||
core.info(
|
||||
`Retrieving changes between ${diffResult.previousSha} (${diffResult.targetBranch}) → ${diffResult.currentSha} (${diffResult.currentBranch})`
|
||||
)
|
||||
|
||||
const allDiffFiles = await getAllDiffFiles({
|
||||
const submoduleShas: Record<
|
||||
string,
|
||||
{previousSha?: string; currentSha?: string}
|
||||
> = {}
|
||||
let allDiffFiles = await getAllDiffFiles({
|
||||
workingDirectory,
|
||||
diffSubmodule,
|
||||
diffResult,
|
||||
@@ -139,8 +187,20 @@ const getChangedFilesFromLocalGitHistory = async ({
|
||||
outputRenamedFilesAsDeletedAndAdded,
|
||||
fetchAdditionalSubmoduleHistory: inputs.fetchAdditionalSubmoduleHistory,
|
||||
failOnInitialDiffError: inputs.failOnInitialDiffError,
|
||||
failOnSubmoduleDiffError: inputs.failOnSubmoduleDiffError
|
||||
failOnSubmoduleDiffError: inputs.failOnSubmoduleDiffError,
|
||||
submoduleShas
|
||||
})
|
||||
|
||||
if (inputs.excludeSymlinks) {
|
||||
core.info('Excluding symlinks from the diff')
|
||||
allDiffFiles = await filterSymlinksFromChangedFiles({
|
||||
changedFiles: allDiffFiles,
|
||||
workingDirectory,
|
||||
diffResult,
|
||||
submodulePaths,
|
||||
submoduleShas
|
||||
})
|
||||
}
|
||||
core.debug(`All diff files: ${JSON.stringify(allDiffFiles)}`)
|
||||
core.info('All Done!')
|
||||
core.endGroup()
|
||||
|
||||
121
src/utils.ts
121
src/utils.ts
@@ -3,15 +3,16 @@ import * as core from '@actions/core'
|
||||
import * as exec from '@actions/exec'
|
||||
import * as github from '@actions/github'
|
||||
import {createReadStream, promises as fs} from 'fs'
|
||||
import {flattenDeep, snakeCase} from 'lodash'
|
||||
import lodash from 'lodash'
|
||||
const {flattenDeep, snakeCase} = lodash
|
||||
import mm from 'micromatch'
|
||||
import * as path from 'path'
|
||||
import {createInterface} from 'readline'
|
||||
import {parseDocument} from 'yaml'
|
||||
import {ChangedFiles, ChangeTypeEnum} from './changedFiles'
|
||||
import {DiffResult} from './commitSha'
|
||||
import {DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS} from './constant'
|
||||
import {Inputs} from './inputs'
|
||||
import {ChangedFiles, ChangeTypeEnum} from './changedFiles.js'
|
||||
import {DiffResult} from './commitSha.js'
|
||||
import {DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS} from './constant.js'
|
||||
import {Inputs} from './inputs.js'
|
||||
|
||||
const MINIMUM_GIT_VERSION = '2.18.0'
|
||||
|
||||
@@ -152,6 +153,69 @@ export const exists = async (filePath: string): Promise<boolean> => {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a file is a symlink on disk
|
||||
* @param cwd - working directory
|
||||
* @param filePath - path to check
|
||||
* @returns file is a symlink
|
||||
*/
|
||||
export const isSymlinkOnDisk = async ({
|
||||
cwd,
|
||||
filePath
|
||||
}: {
|
||||
cwd: string
|
||||
filePath: string
|
||||
}): Promise<boolean> => {
|
||||
try {
|
||||
const stat = await fs.lstat(path.join(cwd, filePath))
|
||||
return stat.isSymbolicLink()
|
||||
} catch {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a file is a symlink in a git tree
|
||||
* @param cwd - working directory
|
||||
* @param sha - commit sha
|
||||
* @param filePath - path to check
|
||||
* @returns file is a symlink
|
||||
*/
|
||||
export const isSymlinkInGitTree = async ({
|
||||
cwd,
|
||||
sha,
|
||||
filePath
|
||||
}: {
|
||||
cwd: string
|
||||
sha: string
|
||||
filePath: string
|
||||
}): Promise<boolean> => {
|
||||
if (!sha) {
|
||||
return false
|
||||
}
|
||||
const {stdout, exitCode} = await exec.getExecOutput(
|
||||
'git',
|
||||
['ls-tree', '-r', sha, '--', filePath],
|
||||
{
|
||||
cwd,
|
||||
ignoreReturnCode: true,
|
||||
silent: !core.isDebug()
|
||||
}
|
||||
)
|
||||
|
||||
if (exitCode !== 0) {
|
||||
return false
|
||||
}
|
||||
|
||||
const line = stdout.split('\n').find(Boolean)
|
||||
if (!line) {
|
||||
return false
|
||||
}
|
||||
|
||||
const [mode] = line.split(/\s+/)
|
||||
return mode === '120000'
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates lines of a file as an async iterable iterator
|
||||
* @param filePath - path of file to read
|
||||
@@ -819,14 +883,49 @@ export const cleanShaInput = async ({
|
||||
|
||||
if (exitCode !== 0) {
|
||||
const octokit = github.getOctokit(token)
|
||||
// If it's not a valid commit sha, assume it's a branch name and get the HEAD sha
|
||||
const {data: refData} = await octokit.rest.git.getRef({
|
||||
owner: github.context.repo.owner,
|
||||
repo: github.context.repo.repo,
|
||||
ref: `heads/${sha}`
|
||||
const owner = github.context.repo.owner
|
||||
const repo = github.context.repo.repo
|
||||
const isNotFoundError = (error: unknown): boolean =>
|
||||
typeof error === 'object' &&
|
||||
error !== null &&
|
||||
'status' in error &&
|
||||
(error as {status?: number}).status === 404
|
||||
// If it's not a valid commit sha, assume it's a ref name first.
|
||||
try {
|
||||
const {data: refData} = await octokit.rest.git.getRef({
|
||||
owner,
|
||||
repo,
|
||||
ref: `heads/${sha}`
|
||||
})
|
||||
|
||||
return refData.object.sha
|
||||
} catch (error) {
|
||||
if (!isNotFoundError(error)) {
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
const {data: refData} = await octokit.rest.git.getRef({
|
||||
owner,
|
||||
repo,
|
||||
ref: `tags/${sha}`
|
||||
})
|
||||
|
||||
return refData.object.sha
|
||||
} catch (error) {
|
||||
if (!isNotFoundError(error)) {
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
const {data: commitData} = await octokit.rest.git.getCommit({
|
||||
owner,
|
||||
repo,
|
||||
commit_sha: sha
|
||||
})
|
||||
|
||||
return refData.object.sha
|
||||
return commitData.sha
|
||||
}
|
||||
|
||||
return stdout.trim()
|
||||
|
||||
1
test/symlink-target.txt
Normal file
1
test/symlink-target.txt
Normal file
@@ -0,0 +1 @@
|
||||
Symlink target fixture.
|
||||
1
test/symlink-to-target
Symbolic link
1
test/symlink-to-target
Symbolic link
@@ -0,0 +1 @@
|
||||
symlink-target.txt
|
||||
@@ -1,12 +1,14 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2018", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
|
||||
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
|
||||
"target": "ES2022", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
|
||||
"module": "NodeNext", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
|
||||
"moduleResolution": "NodeNext", /* Module resolution strategy */
|
||||
"outDir": "./lib", /* Redirect output structure to the directory. */
|
||||
"rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
|
||||
"strict": true, /* Enable all strict type-checking options. */
|
||||
"noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
|
||||
"isolatedModules": true, /* Ensure each file can be safely transpiled without relying on other imports. */
|
||||
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
|
||||
},
|
||||
"exclude": ["node_modules", "jest/setEnvVars.cjs"]
|
||||
"exclude": ["node_modules", "jest/setEnvVars.cjs", "src/__tests__"]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user