mirror of
https://github.com/DeusData/codebase-memory-mcp.git
synced 2026-11-04 10:48:20 +00:00
ci: upload failing suite logs when a test job fails
The job log of a red test job carries a summary of each failing suite, not its log, and the only artifact was shard-manifest.txt. A failure whose summary was not enough could only be understood by reproducing it. The four jobs in .github/workflows/_test.yml that run the parallel harness (test-unix, test-windows, test-diag, test-lsan-macos) get one more step, "Failing suite logs". It runs only when the job failed and uploads build/c/test-logs/failed/: the logs of the suites that did not end green, plus results.txt, as the harness leaves them there. One red suite is typically a few kilobytes; a whole run's logs are about 25 MB. Retention is 7 days. The artifact names follow the shard-manifest ones (suite-logs-<os>-<compiler or msystem>-<job index>, suite-logs-diag, suite-logs-lsan-macos), and the step uses the upload-artifact reference the file already pins. A job that failed outside the suite waves has no such directory; the step then warns and uploads nothing. The step cannot change a job's result: it is skipped on a green job, and a failed job stays failed whatever the upload does. Triggers, permissions, job dependencies, timeouts, the matrix and the shard-completeness download pattern are unchanged. Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
This commit is contained in:
1 parent
e66043bc2b
commit
7644e8bae1
1 file changed
+50
@@ -256,6 +256,23 @@ jobs:
|
||||
# shard-completeness job still gates the cross-shard union.
|
||||
if-no-files-found: warn
|
||||
|
||||
# The job log carries a red suite's SUMMARY; these are the complete logs
|
||||
# behind it, so a failure can be read instead of re-run. The harness
|
||||
# copies the log of every suite that did not end green, plus results.txt,
|
||||
# into test-logs/failed/ (scripts/suite-failure-report.sh) — typically a
|
||||
# few kilobytes for a red suite, not the ~25 MB of a whole run's logs.
|
||||
# Runs only on a failed job. warn, not error: a job that failed OUTSIDE
|
||||
# the suite wave (contract step, build, prod-binary guards) has no such
|
||||
# directory, and a second error would only bury the first.
|
||||
- name: Failing suite logs
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
||||
with:
|
||||
name: suite-logs-${{ matrix.os }}-${{ matrix.cc }}-${{ strategy.job-index }}
|
||||
path: build/c/test-logs/failed/
|
||||
retention-days: 7
|
||||
if-no-files-found: warn
|
||||
|
||||
- name: Compiler cache (save)
|
||||
if: always() && (matrix.shard == null || startsWith(matrix.shard, '1/'))
|
||||
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
@@ -375,6 +392,17 @@ jobs:
|
||||
scripts/test.sh CC=clang-21 CXX=clang++-21 \
|
||||
SANITIZE="-fsanitize=address,undefined -fno-omit-frame-pointer -fno-optimize-sibling-calls"
|
||||
|
||||
# Same step as in test-unix: the complete logs of the suites that did
|
||||
# not end green, only when the job failed.
|
||||
- name: Failing suite logs
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
||||
with:
|
||||
name: suite-logs-diag
|
||||
path: build/c/test-logs/failed/
|
||||
retention-days: 7
|
||||
if-no-files-found: warn
|
||||
|
||||
- name: Compiler cache (save)
|
||||
if: always()
|
||||
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
@@ -462,6 +490,17 @@ jobs:
|
||||
LLVM_PREFIX="$(brew --prefix llvm@22)"
|
||||
scripts/test.sh CC="$LLVM_PREFIX/bin/clang" CXX="$LLVM_PREFIX/bin/clang++"
|
||||
|
||||
# Same step as in test-unix: the complete logs of the suites that did
|
||||
# not end green, only when the job failed.
|
||||
- name: Failing suite logs
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
||||
with:
|
||||
name: suite-logs-lsan-macos
|
||||
path: build/c/test-logs/failed/
|
||||
retention-days: 7
|
||||
if-no-files-found: warn
|
||||
|
||||
- name: Compiler cache (save)
|
||||
if: always()
|
||||
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
@@ -636,6 +675,17 @@ jobs:
|
||||
# shard-completeness job still gates the cross-shard union.
|
||||
if-no-files-found: warn
|
||||
|
||||
# Same step as in test-unix: the complete logs of the suites that did
|
||||
# not end green, only when the job failed.
|
||||
- name: Failing suite logs
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
||||
with:
|
||||
name: suite-logs-${{ matrix.os }}-${{ matrix.msystem }}-${{ strategy.job-index }}
|
||||
path: build/c/test-logs/failed/
|
||||
retention-days: 7
|
||||
if-no-files-found: warn
|
||||
|
||||
# Shard 1 (or the unsharded job) saves the compiler cache; every shard
|
||||
# builds the identical runner, so one cache carries the full object set.
|
||||
- name: Compiler cache (save)
|
||||
|
||||
Reference in new issue
Block a user