@@ -294,8 +294,12 @@ jobs:
294
294
295
295
# Lint JavaScript files:
296
296
- name : ' Lint JavaScript files'
297
+ id : lint-javascript
297
298
if : ( github.event.inputs.javascript != 'false' ) && ( success() || failure() )
298
299
run : |
300
+ # If any command in a pipeline fails, the entire pipeline should fail:
301
+ set -o pipefail
302
+
299
303
# Determine root directory:
300
304
root=$(git rev-parse --show-toplevel)
301
305
@@ -315,45 +319,81 @@ jobs:
315
319
FIX=0
316
320
fi
317
321
322
+ # Combined error file:
323
+ ERR_FILE="lint_javascript_errors.txt"
324
+ > "$ERR_FILE" # Initialize a clean file
325
+
318
326
# Lint JavaScript source files:
319
327
files=$(echo "${{ steps.random-files.outputs.files }}" | tr ',' '\n' | grep '\.js$' | grep -v -e '/examples' -e '/test' -e '/benchmark' -e '^dist/' | tr '\n' ' ')
320
328
321
329
# Build native addons if present:
322
330
packages=$(echo "${files}" | tr ' ' '\n' | sed 's/^lib\/node_modules\///g' | sed 's/\/lib\/.*//g' | sort | uniq)
323
331
for pkg in ${packages}; do
324
- if [ -f "lib/node_modules/${pkg}/binding.gyp" ]; then
325
- NODE_ADDONS_PATTERN="${pkg}" make install-node-addons
326
- fi
332
+ if [ -f "lib/node_modules/${pkg}/binding.gyp" ]; then
333
+ NODE_ADDONS_PATTERN="${pkg}" make install-node-addons
334
+ fi
327
335
done
328
336
329
337
if [[ -n "${files}" ]]; then
330
- make lint-javascript-files FIX="${FIX}" FAST_FAIL=0 FILES="${files}"
338
+ make lint-javascript-files FIX="${FIX}" FAST_FAIL=0 FILES="${files}" 2>&1 | tee -a "$ERR_FILE"
331
339
fi
332
340
333
341
# Lint JavaScript command-line interfaces...
334
342
file=$(echo "${{ steps.random-files.outputs.files }}" | tr ',' '\n' | grep '\.js$' | grep -E '/bin/cli$' | tr '\n' ' ')
335
343
if [[ -n "${file}" ]]; then
336
- make lint-javascript-files FIX="${FIX}" FAST_FAIL=0 FILES="${file}"
344
+ make lint-javascript-files FIX="${FIX}" FAST_FAIL=0 FILES="${file}" 2>&1 | tee -a "$ERR_FILE"
337
345
fi
338
346
339
347
# Lint JavaScript example files:
340
348
files=$(echo "${{ steps.random-files.outputs.files }}" | tr ',' '\n' | grep '/examples/.*\.js$' | tr '\n' ' ')
341
349
if [[ -n "${files}" ]]; then
342
- make lint-javascript-files FIX="${FIX}" FAST_FAIL=0 FILES="${files}" ESLINT_CONF="${eslint_examples_conf}"
350
+ make lint-javascript-files FIX="${FIX}" FAST_FAIL=0 FILES="${files}" ESLINT_CONF="${eslint_examples_conf}" 2>&1 | tee -a "$ERR_FILE"
343
351
fi
344
352
345
353
# Lint JavaScript test files:
346
354
files=$(echo "${{ steps.random-files.outputs.files }}" | tr ',' '\n' | grep '/test/.*\.js$' | tr '\n' ' ')
347
355
if [[ -n "${files}" ]]; then
348
- make lint-javascript-files FIX="${FIX}" FAST_FAIL=0 FILES="${files}" ESLINT_CONF="${eslint_tests_conf}"
356
+ make lint-javascript-files FIX="${FIX}" FAST_FAIL=0 FILES="${files}" ESLINT_CONF="${eslint_tests_conf}" 2>&1 | tee -a "$ERR_FILE"
349
357
fi
350
358
351
359
# Lint JavaScript benchmark files:
352
360
files=$(echo "${{ steps.random-files.outputs.files }}" | tr ',' '\n' | grep '/benchmark/.*\.js$' | tr '\n' ' ')
353
361
if [[ -n "${files}" ]]; then
354
- make lint-javascript-files FIX="${FIX}" FAST_FAIL=0 FILES="${files}" ESLINT_CONF="${eslint_benchmarks_conf}"
362
+ make lint-javascript-files FIX="${FIX}" FAST_FAIL=0 FILES="${files}" ESLINT_CONF="${eslint_benchmarks_conf}" 2>&1 | tee -a "$ERR_FILE"
355
363
fi
356
364
365
+ # Create sub-issue for JavaScript lint failures:
366
+ - name : ' Create sub-issue for JavaScript lint failures'
367
+ if : failure() && contains(steps.lint-javascript.outcome, 'failure')
368
+ env :
369
+ GITHUB_TOKEN : ${{ secrets.STDLIB_BOT_PAT_REPO_WRITE }}
370
+ run : |
371
+ BODY_FILE="$GITHUB_WORKSPACE/lint_issue_body.md"
372
+ cat << EOF > "$BODY_FILE"
373
+ ## JavaScript Linting Failures
374
+
375
+ Linting failures were detected in the automated JavaScript lint workflow run.
376
+
377
+ ### Workflow Details
378
+
379
+ - Run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
380
+ - Type: JavaScript Linting
381
+ - Date: $(date -u +"%Y-%m-%d %H:%M:%S UTC")
382
+
383
+ ### Error Details
384
+ \`\`\`
385
+ $(cat lint_javascript_errors.txt)
386
+ \`\`\`
387
+ EOF
388
+
389
+ . "$GITHUB_WORKSPACE/.github/workflows/scripts/create_sub_issue" \
390
+ 'Fix JavaScript lint errors' \
391
+ "$BODY_FILE" \
392
+ "5377" \
393
+ "Good First Issue"
394
+
395
+ rm "$BODY_FILE"
396
+
357
397
# Lint Python files:
358
398
- name : ' Lint Python files'
359
399
if : ( github.event.inputs.python != 'false' ) && ( success() || failure() )
0 commit comments