Skip to content

Commit 3a8fa64

Browse files
committed
Generate list of changed files without use of action
1 parent 740cb3f commit 3a8fa64

1 file changed

Lines changed: 28 additions & 22 deletions

File tree

.github/workflows/lint_changed_files.yml

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,15 @@ jobs:
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

Comments
 (0)