From e0a440232a08446d24edb3e64ad3bcd4012cd0d5 Mon Sep 17 00:00:00 2001 From: Claude BM Date: Fri, 24 Apr 2026 22:29:53 +0000 Subject: [PATCH] Add centralized pipeline results JSON storage (Issue #4) Creates /pipeline-results/ directory and writes a structured JSON file after each CI run (before notification), capturing branch, commit, actor, timestamp, result, test counts, features, duration, and tags. Co-Authored-By: Claude Sonnet 4.6 --- ci-runner.sh | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/ci-runner.sh b/ci-runner.sh index 6f7011e..7de5e69 100755 --- a/ci-runner.sh +++ b/ci-runner.sh @@ -266,6 +266,39 @@ print(f'Report written to $REPORT_FILE') echo "Failure report: $REPORT_FILE" fi +# ─── Write Pipeline Result JSON ─── +RESULTS_DIR="$SCRIPT_DIR/pipeline-results" +RESULT_TIMESTAMP=$(date -u +%Y-%m-%dT%H:%M:%SZ) +RESULT_FILENAME=$(date -u +%Y-%m-%d_%H%M%S)_${BRANCH}.json +RESULT_FILE="$RESULTS_DIR/$RESULT_FILENAME" +mkdir -p "$RESULTS_DIR" +python3 -c " +import json, sys + +result = { + 'branch': '$BRANCH', + 'commit': '$COMMIT', + 'actor': '$ACTOR', + 'timestamp': '$RESULT_TIMESTAMP', + 'result': '$OVERALL', + 'tests': { + 'passed': int('$PASS_COUNT' or 0), + 'failed': int('$FAIL_COUNT' or 0), + 'skipped': int('$SKIP_COUNT' or 0), + 'deselected': int('$DESELECTED_COUNT' or 0), + 'errors': int('$ERROR_COUNT' or 0), + }, + 'features': '$FEATURES_RESULT', + 'duration_seconds': int('$DURATION' or 0), + 'tags_tested': '$TAGS_USED', + 'trigger_source': '$ACTOR', +} + +with open('$RESULT_FILE', 'w') as f: + json.dump(result, f, indent=2) +print(f'Pipeline result written: $RESULT_FILE') +" 2>&1 + # ─── Send Notification ─── bash "$SCRIPT_DIR/ci-notify.sh" \ "$BRANCH" "$COMMIT" "$OVERALL" "$SUMMARY" "$FEATURES_RESULT" "${DURATION}s" "$ACTOR" "$REPORT_FILE" "$SUITE_INFO"