@@ -294,8 +294,12 @@ jobs:
294294
295295 # Lint JavaScript files:
296296 - name : ' Lint JavaScript files'
297+ id : lint-javascript
297298 if : ( github.event.inputs.javascript != 'false' ) && ( success() || failure() )
298299 run : |
300+ # If any command in a pipeline fails, the entire pipeline should fail:
301+ set -o pipefail
302+
299303 # Determine root directory:
300304 root=$(git rev-parse --show-toplevel)
301305
@@ -315,45 +319,81 @@ jobs:
315319 FIX=0
316320 fi
317321
322+ # Combined error file:
323+ ERR_FILE="lint_javascript_errors.txt"
324+ > "$ERR_FILE" # Initialize a clean file
325+
318326 # Lint JavaScript source files:
319327 files=$(echo "${{ steps.random-files.outputs.files }}" | tr ',' '\n' | grep '\.js$' | grep -v -e '/examples' -e '/test' -e '/benchmark' -e '^dist/' | tr '\n' ' ')
320328
321329 # Build native addons if present:
322330 packages=$(echo "${files}" | tr ' ' '\n' | sed 's/^lib\/node_modules\///g' | sed 's/\/lib\/.*//g' | sort | uniq)
323331 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
327335 done
328336
329337 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"
331339 fi
332340
333341 # Lint JavaScript command-line interfaces...
334342 file=$(echo "${{ steps.random-files.outputs.files }}" | tr ',' '\n' | grep '\.js$' | grep -E '/bin/cli$' | tr '\n' ' ')
335343 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"
337345 fi
338346
339347 # Lint JavaScript example files:
340348 files=$(echo "${{ steps.random-files.outputs.files }}" | tr ',' '\n' | grep '/examples/.*\.js$' | tr '\n' ' ')
341349 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"
343351 fi
344352
345353 # Lint JavaScript test files:
346354 files=$(echo "${{ steps.random-files.outputs.files }}" | tr ',' '\n' | grep '/test/.*\.js$' | tr '\n' ' ')
347355 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"
349357 fi
350358
351359 # Lint JavaScript benchmark files:
352360 files=$(echo "${{ steps.random-files.outputs.files }}" | tr ',' '\n' | grep '/benchmark/.*\.js$' | tr '\n' ' ')
353361 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"
355363 fi
356364
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+
357397 # Lint Python files:
358398 - name : ' Lint Python files'
359399 if : ( github.event.inputs.python != 'false' ) && ( success() || failure() )
0 commit comments