@@ -58,18 +58,83 @@ jobs:
5858
5959 - name : Run Spark big data matrix tests
6060 run : |
61- ./gradlew --no-configuration-cache :example:spark:sparkBigDataMatrixTest --stacktrace --info
61+ ./gradlew --no-configuration-cache :example:spark:sparkBigDataMatrixTest --stacktrace --debug
6262
63- - name : Upload test reports
63+ - name : Collect and print Spark diagnostics on failure
64+ if : failure()
65+ run : |
66+ set +e
67+ diagnostics_dir="build/github-diagnostics"
68+ mkdir -p "${diagnostics_dir}/docker" "${diagnostics_dir}/spark"
69+
70+ echo "::group::Docker containers"
71+ docker ps -a | tee "${diagnostics_dir}/docker/containers.txt"
72+ echo "::endgroup::"
73+
74+ echo "::group::Docker images"
75+ docker images | tee "${diagnostics_dir}/docker/images.txt"
76+ echo "::endgroup::"
77+
78+ mapfile -t container_ids < <(docker ps -aq)
79+ for container_id in "${container_ids[@]}"; do
80+ container_name="$(docker inspect --format '{{.Name}}' "${container_id}" 2>/dev/null | sed 's#^/##')"
81+ if [ -z "${container_name}" ]; then
82+ container_name="${container_id}"
83+ fi
84+ safe_name="$(printf '%s' "${container_name}" | tr -c 'A-Za-z0-9_.-' '_')"
85+ docker inspect "${container_id}" > "${diagnostics_dir}/docker/${safe_name}.inspect.json" 2>&1
86+ docker logs "${container_id}" > "${diagnostics_dir}/docker/${safe_name}.stdout-stderr.log" 2>&1
87+ done
88+
89+ echo "::group::Spark container log files"
90+ if [ -d example/spark/build/bigdata-test-container-logs ]; then
91+ find example/spark/build/bigdata-test-container-logs -type f -print | sort
92+ else
93+ echo "No Spark container log directory found."
94+ fi
95+ echo "::endgroup::"
96+
97+ if [ -d example/spark/build/bigdata-test-container-logs ]; then
98+ while IFS= read -r log_file; do
99+ echo "::group::${log_file}"
100+ sed -n '1,400p' "${log_file}"
101+ line_count="$(wc -l < "${log_file}")"
102+ if [ "${line_count}" -gt 400 ]; then
103+ echo "... truncated first 400 lines from ${line_count} total lines ..."
104+ echo "--- tail ---"
105+ tail -n 400 "${log_file}"
106+ fi
107+ echo "::endgroup::"
108+ done < <(find example/spark/build/bigdata-test-container-logs -type f -print | sort)
109+ cp -a example/spark/build/bigdata-test-container-logs "${diagnostics_dir}/spark/container-logs"
110+ fi
111+
112+ echo "::group::Spark test XML results"
113+ if [ -d example/spark/build/test-results ]; then
114+ while IFS= read -r result_file; do
115+ echo "--- ${result_file} ---"
116+ sed -n '1,240p' "${result_file}"
117+ done < <(find example/spark/build/test-results -type f -name '*.xml' -print | sort)
118+ else
119+ echo "No Spark test result directory found."
120+ fi
121+ echo "::endgroup::"
122+ cp -a example/spark/build/test-results "${diagnostics_dir}/spark/test-results" 2>/dev/null || true
123+ cp -a example/spark/build/reports/tests "${diagnostics_dir}/spark/test-reports" 2>/dev/null || true
124+
125+ - name : Upload test reports and container logs
64126 if : failure()
65127 uses : actions/upload-artifact@v4
66128 with :
67- name : test-reports
129+ name : test-diagnostics-${{ github.run_id }}-${{ github.run_attempt }}
68130 path : |
69131 **/build/reports/tests/
70132 **/build/test-results/
71133 **/build/reports/problems/
134+ **/build/bigdata-test-container-logs/
135+ build/github-diagnostics/
72136 if-no-files-found : ignore
137+ retention-days : 14
73138
74139 - name : Write signing key
75140 env :
0 commit comments