8080 # Get list of changed files:
8181 - name : ' Get list of changed files'
8282 id : changed-files
83- uses : tj-actions/changed-files@v35
84- with :
85- separator : ' '
83+ run : |
84+ if [ -n "${{ github.event.pull_request.number }}" ]; then
85+ # Get the list of changed files in pull request via the GitHub API. We use `awk` to get the value of the link header with the URL for the next page of results, and keep requesting next pages until all the files are retrieved:
86+ files=$(curl -s -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/stdlib-js/stdlib/pulls/${{ github.event.pull_request.number }}/files?page=1&per_page=100" -D - | awk '{if (match($0, "Link:")){print}}' | awk '{print $2}' | tr -d '<>' | tr -d ',' | xargs -I {} curl -s -H "Accept: application/vnd.github.v3+json" {} | jq -r '.[] | .filename')
87+ else
88+ # Get changed files by comparing the current commit to the commit before the push event:
89+ files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }})
90+ fi
91+ echo "files=${files}" >> $GITHUB_OUTPUT
8692
8793 # Lint file names
8894 - name : ' Lint file names'
@@ -94,13 +100,13 @@ jobs:
94100 lint_filenames="${root}/lib/node_modules/@stdlib/_tools/lint/filenames/bin/cli"
95101
96102 # Lint filenames:
97- echo "${{ steps.changed-files.outputs.all_changed_files }}" || "${lint_filenames}"
103+ echo "${{ steps.changed-files.outputs.files }}" || "${lint_filenames}"
98104
99105 # Lint Markdown files:
100106 - name : ' Lint Markdown files'
101107 if : success() || failure()
102108 run : |
103- files=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | tr ' ' '\n' | grep -E '\.md$' | tr '\n' ' ' | sed 's/ $//')
109+ files=$(echo "${{ steps.changed-files.outputs.files }}" | tr ' ' '\n' | grep -E '\.md$' | tr '\n' ' ' | sed 's/ $//')
104110 if [ -n "${files}" ]; then
105111 make lint-markdown-files FILES="${files}"
106112 fi
@@ -109,7 +115,7 @@ jobs:
109115 - name : ' Lint shell script files'
110116 if : success() || failure()
111117 run : |
112- files=$(echo "${{ steps.random-files.outputs.all_changed_files }}" | tr ' ' '\n' | grep -vE '\.(js|md|json|ts|c|h)$' | while read -r file; do head -n1 "$file" | grep -q '^\#\!/usr/bin/env bash' && echo "$file"; done | tr '\n' ' ' | sed 's/ $//')
118+ files=$(echo "${{ steps.random-files.outputs.files }}" | tr ' ' '\n' | grep -vE '\.(js|md|json|ts|c|h)$' | while read -r file; do head -n1 "$file" | grep -q '^\#\!/usr/bin/env bash' && echo "$file"; done | tr '\n' ' ' | sed 's/ $//')
113119 if [[ -n "${files}" ]]; then
114120 # Install shellcheck:
115121 make install-deps-shellcheck
@@ -128,7 +134,7 @@ jobs:
128134 # Define the path to a utility for linting package.json files:
129135 lint_package_json="${root}/lib/node_modules/@stdlib/_tools/lint/pkg-json/bin/cli"
130136
131- files=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | tr ' ' '\n' | grep 'package\.json$' | grep -v 'datapackage\.json$' | tr '\n' ' ' | sed 's/ $//')
137+ files=$(echo "${{ steps.changed-files.outputs.files }}" | tr ' ' '\n' | grep 'package\.json$' | grep -v 'datapackage\.json$' | tr '\n' ' ' | sed 's/ $//')
132138 if [ -n "${files}" ]; then
133139 echo "Linting package.json files that have changed..."
134140 printf "${files}" | "${lint_package_json}" --split=" "
@@ -146,7 +152,7 @@ jobs:
146152 # Define the path to a utility for linting REPL help files:
147153 lint_repl_help="${root}/lib/node_modules/@stdlib/_tools/lint/repl-txt/bin/cli"
148154
149- files=$(echo ${{ steps.changed-files.outputs.all_changed_files }} | tr ' ' '\n' | grep 'repl\.txt$' | tr '\n' ' ' | sed 's/ $//')
155+ files=$(echo ${{ steps.changed-files.outputs.files }} | tr ' ' '\n' | grep 'repl\.txt$' | tr '\n' ' ' | sed 's/ $//')
150156 if [ -n "${files}" ]; then
151157 printf "${files}" | "${lint_repl_help}" --split=" "
152158 fi
@@ -168,31 +174,31 @@ jobs:
168174 eslint_benchmarks_conf="${root}/etc/eslint/.eslintrc.benchmarks.js"
169175
170176 # Lint JavaScript source files:
171- files=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | tr ' ' '\n' | grep '\.js$' | grep -v -e '/examples' -e '/test' -e '/benchmark' -e '^dist/' | tr '\n' ' ' | sed 's/ $//')
177+ files=$(echo "${{ steps.changed-files.outputs.files }}" | tr ' ' '\n' | grep '\.js$' | grep -v -e '/examples' -e '/test' -e '/benchmark' -e '^dist/' | tr '\n' ' ' | sed 's/ $//')
172178 if [[ -n "${files}" ]]; then
173179 make lint-javascript-files FILES="${files}"
174180 fi
175181
176182 # Lint JavaScript command-line interfaces...
177- file=$(echo ${{ steps.changed-files.outputs.all_changed_files }} | tr ' ' '\n' | grep '\.js$' | grep -E '/bin/cli$' | tr '\n' ' ' | sed 's/ $//')
183+ file=$(echo ${{ steps.changed-files.outputs.files }} | tr ' ' '\n' | grep '\.js$' | grep -E '/bin/cli$' | tr '\n' ' ' | sed 's/ $//')
178184 if [[ -n "${file}" ]]; then
179185 make lint-javascript-files FILES="${file}"
180186 fi
181187
182188 # Lint JavaScript example files:
183- files=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | tr ' ' '\n' | grep '/examples/.*\.js$' | tr '\n' ' ' | sed 's/ $//')
189+ files=$(echo "${{ steps.changed-files.outputs.files }}" | tr ' ' '\n' | grep '/examples/.*\.js$' | tr '\n' ' ' | sed 's/ $//')
184190 if [[ -n "${files}" ]]; then
185191 make lint-javascript-files FILES="${files}" ESLINT_CONF="${eslint_examples_conf}"
186192 fi
187193
188194 # Lint JavaScript test files:
189- files=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | tr ' ' '\n' | grep '/test/.*\.js$' | tr '\n' ' ' | sed 's/ $//')
195+ files=$(echo "${{ steps.changed-files.outputs.files }}" | tr ' ' '\n' | grep '/test/.*\.js$' | tr '\n' ' ' | sed 's/ $//')
190196 if [[ -n "${files}" ]]; then
191197 make lint-javascript-files FILES="${files}" ESLINT_CONF="${eslint_tests_conf}"
192198 fi
193199
194200 # Lint JavaScript benchmark files:
195- files=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | tr ' ' '\n' | grep '/benchmark/.*\.js$' | tr '\n' ' ' | sed 's/ $//')
201+ files=$(echo "${{ steps.changed-files.outputs.files }}" | tr ' ' '\n' | grep '/benchmark/.*\.js$' | tr '\n' ' ' | sed 's/ $//')
196202 if [[ -n "${files}" ]]; then
197203 make lint-javascript-files FILES="${files}" ESLINT_CONF="${eslint_benchmarks_conf}"
198204 fi
@@ -201,7 +207,7 @@ jobs:
201207 - name : ' Lint Python files'
202208 if : success() || failure()
203209 run : |
204- files=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | tr ' ' '\n' | grep -E '\.py$' | tr '\n' ' ' | sed 's/ $//')
210+ files=$(echo "${{ steps.changed-files.outputs.files }}" | tr ' ' '\n' | grep -E '\.py$' | tr '\n' ' ' | sed 's/ $//')
205211 if [[ -n "${files}" ]]; then
206212 # Install Python dependencies:
207213 make install-deps-python
@@ -215,7 +221,7 @@ jobs:
215221 if : success() || failure()
216222 id : check-r-files
217223 run : |
218- files=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | tr ' ' '\n' | grep -E '\.R$' | tr '\n' ' ' | sed 's/ $//')
224+ files=$(echo "${{ steps.changed-files.outputs.files }}" | tr ' ' '\n' | grep -E '\.R$' | tr '\n' ' ' | sed 's/ $//')
219225 if [[ -n "${files}" ]]; then
220226 # Add space-separated list of R files to output:
221227 echo "files=${files}" >> $GITHUB_OUTPUT
@@ -258,31 +264,31 @@ jobs:
258264 cppcheck_benchmarks_suppressions_list="${root}/etc/cppcheck/suppressions.benchmarks.txt"
259265
260266 # Install cppcheck if C files have changed:
261- files=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | tr ' ' '\n' | grep -E '\.c$|\.h$' | tr '\n' ' ' | sed 's/ $//')
267+ files=$(echo "${{ steps.changed-files.outputs.files }}" | tr ' ' '\n' | grep -E '\.c$|\.h$' | tr '\n' ' ' | sed 's/ $//')
262268 if [[ -n "${files}" ]]; then
263269 make install-deps-cppcheck
264270 fi
265271
266272 # Lint C source files...
267- files=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | tr ' ' '\n' | grep -E '\.c$' | grep -v -e '/examples' -e '/test' -e '/benchmark' | tr '\n' ' ' | sed 's/ $//')
273+ files=$(echo "${{ steps.changed-files.outputs.files }}" | tr ' ' '\n' | grep -E '\.c$' | grep -v -e '/examples' -e '/test' -e '/benchmark' | tr '\n' ' ' | sed 's/ $//')
268274 if [[ -n "${files}" ]]; then
269275 make lint-c-files FILES="${files}"
270276 fi
271277
272278 # Lint C example files...
273- files=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | tr ' ' '\n' | grep '/examples/.*\.c$' | tr '\n' ' ' | sed 's/ $//')
279+ files=$(echo "${{ steps.changed-files.outputs.files }}" | tr ' ' '\n' | grep '/examples/.*\.c$' | tr '\n' ' ' | sed 's/ $//')
274280 if [[ -n "${files}" ]]; then
275281 make lint-c-files FILES="${files}" CPPCHECK_SUPPRESSIONS_LIST="${cppcheck_examples_suppressions_list}"
276282 fi
277283
278284 # Lint C test fixtures files...
279- files=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | tr ' ' '\n' | grep '/test/fixtures/.*\.c$' | tr '\n' ' ' | sed 's/ $//')
285+ files=$(echo "${{ steps.changed-files.outputs.files }}" | tr ' ' '\n' | grep '/test/fixtures/.*\.c$' | tr '\n' ' ' | sed 's/ $//')
280286 if [[ -n "${files}" ]]; then
281287 make lint-c-files FILES="${files}" CPPCHECK_SUPPRESSIONS_LIST="${cppcheck_tests_fixtures_suppressions_list}"
282288 fi
283289
284290 # Lint C benchmark files...
285- files=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | tr ' ' '\n' | grep '/benchmark/.*\.c$' | tr '\n' ' ' | sed 's/ $//')
291+ files=$(echo "${{ steps.changed-files.outputs.files }}" | tr ' ' '\n' | grep '/benchmark/.*\.c$' | tr '\n' ' ' | sed 's/ $//')
286292 if [[ -n "${files}" ]]; then
287293 make lint-c-files FILES="${files}" CPPCHECK_SUPPRESSIONS_LIST="${cppcheck_benchmarks_suppressions_list}"
288294 fi
@@ -291,7 +297,7 @@ jobs:
291297 - name : ' Lint TypeScript declarations files'
292298 if : success() || failure()
293299 run : |
294- files=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | tr ' ' '\n' | grep -E '\.d\.ts$' | tr '\n' ' ' | sed 's/ $//')
300+ files=$(echo "${{ steps.changed-files.outputs.files }}" | tr ' ' '\n' | grep -E '\.d\.ts$' | tr '\n' ' ' | sed 's/ $//')
295301 if [[ -n "${files}" ]]; then
296302 make lint-typescript-declarations-files FILES="${files}"
297303 fi
@@ -300,7 +306,7 @@ jobs:
300306 - name : ' Lint license headers'
301307 if : success() || failure()
302308 run : |
303- files=$(echo "${{ steps.changed-files.outputs.all_changed_files }}")
309+ files=$(echo "${{ steps.changed-files.outputs.files }}")
304310 if [[ -n "${files}" ]]; then
305311 make lint-license-headers-files FILES="${files}"
306312 fi
0 commit comments