runtime-role-matrix-live-20.../verification/generate-evidence.sh

190 lines
8.2 KiB
Bash

#!/bin/bash
# Evidence Report Generator
# Parses smoke-test-report.json and generates evidence-report.json
set -e
SMOKE_REPORT="verification/smoke-test-report.json"
EVIDENCE_REPORT="verification/evidence-report.json"
echo "=== Generating Evidence Report ==="
# Check if smoke test report exists
if [ ! -f "$SMOKE_REPORT" ]; then
echo "Error: $SMOKE_REPORT not found. Run smoke-test.sh first."
exit 1
fi
# Check if jq is available
if ! command -v jq &>/dev/null; then
echo "Error: jq is required but not installed."
exit 1
fi
# Extract summary counts
TOTAL=$(jq '.summary.total' "$SMOKE_REPORT")
PASSED=$(jq '.summary.passed' "$SMOKE_REPORT")
FAILED=$(jq '.summary.failed' "$SMOKE_REPORT")
WARNED=$(jq '.summary.warned' "$SMOKE_REPORT")
SKIPPED=$(jq '.summary.skipped' "$SMOKE_REPORT")
# Extract test results using proper JSON array parsing
get_test_status() {
local test_name="$1"
jq -r ".results[] | select(.test == \"$test_name\") | .status" "$SMOKE_REPORT" 2>/dev/null || echo "UNKNOWN"
}
get_test_message() {
local test_name="$1"
jq -r ".results[] | select(.test == \"$test_name\") | .message" "$SMOKE_REPORT" 2>/dev/null || echo "No message"
}
# CI Pipeline Checklist (4 items)
CI_BUILD=$(get_test_status "ci_build_stage")
CI_BUILD_MSG=$(get_test_message "ci_build_stage")
CI_TEST=$(get_test_status "ci_test_stage")
CI_TEST_MSG=$(get_test_message "ci_test_stage")
CI_PACKAGE=$(get_test_status "ci_package_stage")
CI_PACKAGE_MSG=$(get_test_message "ci_package_stage")
CI_DEPLOY=$(get_test_status "ci_deploy_stage")
CI_DEPLOY_MSG=$(get_test_message "ci_deploy_stage")
# Operational Risks Checklist (9 items)
RISK_DEPLOY=$(get_test_status "risk_deployment_strategy")
RISK_DEPLOY_MSG=$(get_test_message "risk_deployment_strategy")
RISK_MONITOR=$(get_test_status "risk_monitoring")
RISK_MONITOR_MSG=$(get_test_message "risk_monitoring")
RISK_BACKUP=$(get_test_status "risk_backup")
RISK_BACKUP_MSG=$(get_test_message "risk_backup")
RISK_SECRET=$(get_test_status "risk_secret_management")
RISK_SECRET_MSG=$(get_test_message "risk_secret_management")
RISK_HEALTH=$(get_test_status "risk_health_check")
RISK_HEALTH_MSG=$(get_test_message "risk_health_check")
RISK_LOGGING=$(get_test_status "risk_logging")
RISK_LOGGING_MSG=$(get_test_message "risk_logging")
RISK_ERROR=$(get_test_status "risk_error_handling")
RISK_ERROR_MSG=$(get_test_message "risk_error_handling")
RISK_ROLLBACK=$(get_test_status "risk_rollback")
RISK_ROLLBACK_MSG=$(get_test_message "risk_rollback")
RISK_SHUTDOWN=$(get_test_status "risk_graceful_shutdown")
RISK_SHUTDOWN_MSG=$(get_test_message "risk_graceful_shutdown")
# Core Tests
COMPILATION=$(get_test_status "compilation")
COMPILATION_MSG=$(get_test_message "compilation")
UNIT_TESTS=$(get_test_status "unit_tests")
UNIT_TESTS_MSG=$(get_test_message "unit_tests")
ROLE_MATRIX=$(get_test_status "role_matrix_impl")
ROLE_MATRIX_MSG=$(get_test_message "role_matrix_impl")
RUNTIME=$(get_test_status "runtime_integration")
RUNTIME_MSG=$(get_test_message "runtime_integration")
# Generate evidence report
cat > "$EVIDENCE_REPORT" << 'EOF'
{
"evidence_report_version": "1.0",
"generated_at": "__TIMESTAMP__",
"source_report": "verification/smoke-test-report.json",
"summary": {
"total_checks": 0,
"passed": 0,
"failed": 0,
"warnings": 0,
"skipped": 0
},
"ci_pipeline_checklist": [],
"operational_risks_checklist": [],
"core_tests": []
}
EOF
# Build CI pipeline checklist JSON
CI_CHECKLIST=$(cat << JQEOF
[
{"id": "ci_build", "description": "Build stage configured", "status": "$CI_BUILD", "message": "$CI_BUILD_MSG"},
{"id": "ci_test", "description": "Test stage configured", "status": "$CI_TEST", "message": "$CI_TEST_MSG"},
{"id": "ci_package", "description": "Package stage configured", "status": "$CI_PACKAGE", "message": "$CI_PACKAGE_MSG"},
{"id": "ci_deploy", "description": "Deploy/CI-CD pipeline configured", "status": "$CI_DEPLOY", "message": "$CI_DEPLOY_MSG"}
]
JQEOF
)
# Build operational risks checklist JSON
RISK_CHECKLIST=$(cat << JQEOF
[
{"id": "risk_deployment", "description": "Deployment strategy defined", "status": "$RISK_DEPLOY", "message": "$RISK_DEPLOY_MSG"},
{"id": "risk_monitoring", "description": "Monitoring configured", "status": "$RISK_MONITOR", "message": "$RISK_MONITOR_MSG"},
{"id": "risk_backup", "description": "Backup mechanism in place", "status": "$RISK_BACKUP", "message": "$RISK_BACKUP_MSG"},
{"id": "risk_secret", "description": "Secret management configured", "status": "$RISK_SECRET", "message": "$RISK_SECRET_MSG"},
{"id": "risk_health", "description": "Health check endpoints defined", "status": "$RISK_HEALTH", "message": "$RISK_HEALTH_MSG"},
{"id": "risk_logging", "description": "Logging framework configured", "status": "$RISK_LOGGING", "message": "$RISK_LOGGING_MSG"},
{"id": "risk_error", "description": "Error handling implemented", "status": "$RISK_ERROR", "message": "$RISK_ERROR_MSG"},
{"id": "risk_rollback", "description": "Rollback strategy documented", "status": "$RISK_ROLLBACK", "message": "$RISK_ROLLBACK_MSG"},
{"id": "risk_shutdown", "description": "Graceful shutdown handling", "status": "$RISK_SHUTDOWN", "message": "$RISK_SHUTDOWN_MSG"}
]
JQEOF
)
# Build core tests JSON
CORE_TESTS=$(cat << JQEOF
[
{"id": "compilation", "description": "Code compilation", "status": "$COMPILATION", "message": "$COMPILATION_MSG"},
{"id": "unit_tests", "description": "Unit test execution", "status": "$UNIT_TESTS", "message": "$UNIT_TESTS_MSG"},
{"id": "role_matrix", "description": "Role matrix implementation", "status": "$ROLE_MATRIX", "message": "$ROLE_MATRIX_MSG"},
{"id": "runtime", "description": "Runtime integration", "status": "$RUNTIME", "message": "$RUNTIME_MSG"}
]
JQEOF
)
# Calculate checklist counts
CI_PASSED=$(echo "$CI_CHECKLIST" | jq '[.[] | select(.status == "PASS")] | length')
CI_FAILED=$(echo "$CI_CHECKLIST" | jq '[.[] | select(.status == "FAIL")] | length')
CI_WARNED=$(echo "$CI_CHECKLIST" | jq '[.[] | select(.status == "WARN")] | length')
RISK_PASSED=$(echo "$RISK_CHECKLIST" | jq '[.[] | select(.status == "PASS")] | length')
RISK_FAILED=$(echo "$RISK_CHECKLIST" | jq '[.[] | select(.status == "FAIL")] | length')
RISK_WARNED=$(echo "$RISK_CHECKLIST" | jq '[.[] | select(.status == "WARN")] | length')
CORE_PASSED=$(echo "$CORE_TESTS" | jq '[.[] | select(.status == "PASS")] | length')
CORE_FAILED=$(echo "$CORE_TESTS" | jq '[.[] | select(.status == "FAIL")] | length')
CORE_WARNED=$(echo "$CORE_TESTS" | jq '[.[] | select(.status == "WARN")] | length')
CORE_SKIPPED=$(echo "$CORE_TESTS" | jq '[.[] | select(.status == "SKIP")] | length')
TOTAL_CHECKS=$((4 + 9 + 4))
TOTAL_PASSED=$((CI_PASSED + RISK_PASSED + CORE_PASSED))
TOTAL_FAILED=$((CI_FAILED + RISK_FAILED + CORE_FAILED))
TOTAL_WARNED=$((CI_WARNED + RISK_WARNED + CORE_WARNED))
TOTAL_SKIPPED=$((0 + 0 + CORE_SKIPPED))
# Update evidence report
REPORT_CONTENT=$(cat "$EVIDENCE_REPORT")
REPORT_CONTENT=$(echo "$REPORT_CONTENT" | sed "s/__TIMESTAMP__/$(date -Iseconds)/")
REPORT_CONTENT=$(echo "$REPORT_CONTENT" | jq \
--argjson total "$TOTAL_CHECKS" \
--argjson passed "$TOTAL_PASSED" \
--argjson failed "$TOTAL_FAILED" \
--argjson warned "$TOTAL_WARNED" \
--argjson skipped "$TOTAL_SKIPPED" \
'.summary = {"total_checks": $total, "passed": $passed, "failed": $failed, "warnings": $warned, "skipped": $skipped}')
REPORT_CONTENT=$(echo "$REPORT_CONTENT" | jq --argjson cil "$CI_CHECKLIST" '.ci_pipeline_checklist = $cil')
REPORT_CONTENT=$(echo "$REPORT_CONTENT" | jq --argjson rcl "$RISK_CHECKLIST" '.operational_risks_checklist = $rcl')
REPORT_CONTENT=$(echo "$REPORT_CONTENT" | jq --argjson ct "$CORE_TESTS" '.core_tests = $ct')
echo "$REPORT_CONTENT" > "$EVIDENCE_REPORT"
echo ""
echo "=== Evidence Report Summary ==="
echo "Total Checks: $TOTAL_CHECKS"
echo "Passed: $TOTAL_PASSED"
echo "Failed: $TOTAL_FAILED"
echo "Warnings: $TOTAL_WARNED"
echo "Skipped: $TOTAL_SKIPPED"
echo ""
echo "CI Pipeline (4 items): $CI_PASSED passed, $CI_FAILED failed, $CI_WARNED warnings"
echo "Operational Risks (9 items): $RISK_PASSED passed, $RISK_FAILED failed, $RISK_WARNED warnings"
echo "Core Tests (4 items): $CORE_PASSED passed, $CORE_FAILED failed, $CORE_WARNED warnings, $CORE_SKIPPED skipped"
echo ""
echo "Evidence report saved to: $EVIDENCE_REPORT"
exit 0