diff --git a/.forge/role-reviewer-live-1522-001-attempt-2-run-71d436e6354c.md b/.forge/role-reviewer-live-1522-001-attempt-2-run-71d436e6354c.md deleted file mode 100644 index 5ea9d9c..0000000 --- a/.forge/role-reviewer-live-1522-001-attempt-2-run-71d436e6354c.md +++ /dev/null @@ -1,3 +0,0 @@ -# role-reviewer-live-1522-001-attempt-2-run-71d436e6354c - -Forge 이슈 작업 브랜치 `forge/role-reviewer-live-1522-001-attempt-2-run-71d436e6354c`. diff --git a/verification/evidence-report.json b/verification/evidence-report.json deleted file mode 100644 index a5a5a41..0000000 --- a/verification/evidence-report.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "evidence_report_version": "1.0", - "generated_at": "2026-07-14T15:22:00Z", - "source_report": "verification/smoke-test-report.json", - "summary": { - "total_checks": 17, - "passed": 0, - "failed": 0, - "warnings": 0, - "skipped": 0 - }, - "ci_pipeline_checklist": [ - { - "id": "ci_build", - "description": "Build stage configured", - "status": "PENDING", - "message": "Run smoke-test.sh to populate" - }, - { - "id": "ci_test", - "description": "Test stage configured", - "status": "PENDING", - "message": "Run smoke-test.sh to populate" - }, - { - "id": "ci_package", - "description": "Package stage configured", - "status": "PENDING", - "message": "Run smoke-test.sh to populate" - }, - { - "id": "ci_deploy", - "description": "Deploy/CI-CD pipeline configured", - "status": "PENDING", - "message": "Run smoke-test.sh to populate" - } - ], - "operational_risks_checklist": [ - { - "id": "risk_deployment", - "description": "Deployment strategy defined", - "status": "PENDING", - "message": "Run smoke-test.sh to populate" - }, - { - "id": "risk_monitoring", - "description": "Monitoring configured", - "status": "PENDING", - "message": "Run smoke-test.sh to populate" - }, - { - "id": "risk_backup", - "description": "Backup mechanism in place", - "status": "PENDING", - "message": "Run smoke-test.sh to populate" - }, - { - "id": "risk_secret", - "description": "Secret management configured", - "status": "PENDING", - "message": "Run smoke-test.sh to populate" - }, - { - "id": "risk_health", - "description": "Health check endpoints defined", - "status": "PENDING", - "message": "Run smoke-test.sh to populate" - }, - { - "id": "risk_logging", - "description": "Logging framework configured", - "status": "PENDING", - "message": "Run smoke-test.sh to populate" - }, - { - "id": "risk_error", - "description": "Error handling implemented", - "status": "PENDING", - "message": "Run smoke-test.sh to populate" - }, - { - "id": "risk_rollback", - "description": "Rollback strategy documented", - "status": "PENDING", - "message": "Run smoke-test.sh to populate" - }, - { - "id": "risk_shutdown", - "description": "Graceful shutdown handling", - "status": "PENDING", - "message": "Run smoke-test.sh to populate" - } - ], - "core_tests": [ - { - "id": "compilation", - "description": "Code compilation", - "status": "PENDING", - "message": "Run smoke-test.sh to populate" - }, - { - "id": "unit_tests", - "description": "Unit test execution", - "status": "PENDING", - "message": "Run smoke-test.sh to populate" - }, - { - "id": "role_matrix", - "description": "Role matrix implementation", - "status": "PENDING", - "message": "Run smoke-test.sh to populate" - }, - { - "id": "runtime", - "description": "Runtime integration", - "status": "PENDING", - "message": "Run smoke-test.sh to populate" - } - ] -} diff --git a/verification/generate-evidence.sh b/verification/generate-evidence.sh deleted file mode 100644 index 7bf4563..0000000 --- a/verification/generate-evidence.sh +++ /dev/null @@ -1,190 +0,0 @@ -#!/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 diff --git a/verification/run-verification.sh b/verification/run-verification.sh deleted file mode 100644 index e5b8bb2..0000000 --- a/verification/run-verification.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash -# Complete Verification Runner -# Runs smoke-test.sh then generate-evidence.sh - -set -e - -echo "==========================================" -echo "Runtime Role Matrix - Verification Suite" -echo "==========================================" -echo "" - -# Step 1: Run smoke tests -echo ">>> Step 1: Running Smoke Tests..." -echo "" -bash verification/smoke-test.sh -SMOKE_EXIT=$? -echo "" - -# Step 2: Generate evidence report -echo ">>> Step 2: Generating Evidence Report..." -echo "" -bash verification/generate-evidence.sh -EVIDENCE_EXIT=$? -echo "" - -# Step 3: Display results -echo "==========================================" -echo "Verification Complete" -echo "==========================================" -echo "" -echo "Output files:" -echo " - verification/smoke-test-report.json" -echo " - verification/evidence-report.json" -echo "" - -# Show evidence report summary if jq available -if command -v jq &>/dev/null; then - echo "Evidence Report Summary:" - jq '.summary' verification/evidence-report.json 2>/dev/null || true - echo "" - echo "CI Pipeline Checklist:" - jq -r '.ci_pipeline_checklist[] | " [\(.status)] \(.description)"' verification/evidence-report.json 2>/dev/null || true - echo "" - echo "Operational Risks Checklist:" - jq -r '.operational_risks_checklist[] | " [\(.status)] \(.description)"' verification/evidence-report.json 2>/dev/null || true -fi - -echo "" - -# Exit with appropriate code -exit $((SMOKE_EXIT || EVIDENCE_EXIT)) diff --git a/verification/smoke-test.sh b/verification/smoke-test.sh deleted file mode 100644 index 799bd4e..0000000 --- a/verification/smoke-test.sh +++ /dev/null @@ -1,259 +0,0 @@ -#!/bin/bash -# Smoke Test Script for Runtime Role Matrix -# Validates: Compilation, Unit Tests, CI Pipeline, Operational Risks - -REPORT_FILE="verification/smoke-test-report.json" - -echo "=== Runtime Role Matrix Smoke Test ===" -echo "Timestamp: $(date -Iseconds)" -echo "" - -# Initialize results array -declare -a RESULTS=() - -# Test result helper -add_result() { - local test_name="$1" - local status="$2" - local message="$3" - RESULTS+=("{\"test\": \"$test_name\", \"status\": \"$status\", \"message\": \"$message\"}") -} - -# CI Pipeline Stage Verification (4 items) -test_ci_pipeline() { - echo "--- CI Pipeline Stage Verification ---" - - # 1. Build stage - if [ -f "pom.xml" ] || [ -f "build.gradle" ]; then - add_result "ci_build_stage" "PASS" "Build configuration exists" - else - add_result "ci_build_stage" "FAIL" "No build configuration found" - fi - - # 2. Test stage - if [ -f "pom.xml" ] && grep -q "maven-surefire-plugin" pom.xml 2>/dev/null; then - add_result "ci_test_stage" "PASS" "Test stage configured" - elif [ -f "build.gradle" ] && grep -q "test" build.gradle 2>/dev/null; then - add_result "ci_test_stage" "PASS" "Test stage configured" - else - add_result "ci_test_stage" "WARN" "Test stage configuration unclear" - fi - - # 3. Package stage - if [ -f "pom.xml" ] && grep -q "jar" pom.xml 2>/dev/null; then - add_result "ci_package_stage" "PASS" "Package stage configured" - else - add_result "ci_package_stage" "WARN" "Package stage configuration unclear" - fi - - # 4. Deploy stage - if [ -f ".github/workflows" ] || [ -f ".gitlab-ci.yml" ] || [ -f "Jenkinsfile" ]; then - add_result "ci_deploy_stage" "PASS" "CI/CD pipeline detected" - else - add_result "ci_deploy_stage" "WARN" "No CI/CD pipeline configuration found" - fi -} - -# Operational Risk Checks (9 items) -test_operational_risks() { - echo "--- Operational Risk Verification ---" - - # 1. Deployment Strategy - if [ -f "deployment.yaml" ] || [ -f "docker-compose.yml" ] || [ -f "helm/" ]; then - add_result "risk_deployment_strategy" "PASS" "Deployment configuration exists" - else - add_result "risk_deployment_strategy" "WARN" "No explicit deployment strategy found" - fi - - # 2. Monitoring - if [ -f "monitoring/prometheus.yml" ] || [ -f "monitoring/grafana.json" ] || grep -rq "prometheus\|grafana\|metrics" . 2>/dev/null; then - add_result "risk_monitoring" "PASS" "Monitoring configuration detected" - else - add_result "risk_monitoring" "WARN" "No monitoring configuration found" - fi - - # 3. Backup - if grep -rq "backup\|restore" . 2>/dev/null; then - add_result "risk_backup" "PASS" "Backup mechanism referenced" - else - add_result "risk_backup" "WARN" "No backup mechanism documented" - fi - - # 4. Secret Management - if [ -f ".env.example" ] || [ -f "secrets.yaml" ] || grep -rq "vault\|secretsmanager\|k8s-secret" . 2>/dev/null; then - add_result "risk_secret_management" "PASS" "Secret management approach detected" - else - add_result "risk_secret_management" "WARN" "No secret management configuration found" - fi - - # 5. Health Check - if grep -rq "health\|liveness\|readiness" . 2>/dev/null; then - add_result "risk_health_check" "PASS" "Health check endpoints defined" - else - add_result "risk_health_check" "WARN" "No health check configuration found" - fi - - # 6. Logging - if grep -rq "logging\|logback\|log4j\|slf4j" . 2>/dev/null; then - add_result "risk_logging" "PASS" "Logging framework configured" - else - add_result "risk_logging" "WARN" "No logging configuration found" - fi - - # 7. Error Handling - if grep -rq "exception\|error\|try-catch" . 2>/dev/null; then - add_result "risk_error_handling" "PASS" "Error handling patterns detected" - else - add_result "risk_error_handling" "WARN" "No explicit error handling found" - fi - - # 8. Rollback Strategy - if grep -rq "rollback\|revert\|undo" . 2>/dev/null; then - add_result "risk_rollback" "PASS" "Rollback strategy documented" - else - add_result "risk_rollback" "WARN" "No rollback strategy found" - fi - - # 9. Graceful Shutdown - if grep -rq "shutdown\|terminate\|destroy\|@PreDestroy" . 2>/dev/null; then - add_result "risk_graceful_shutdown" "PASS" "Graceful shutdown handling detected" - else - add_result "risk_graceful_shutdown" "WARN" "No graceful shutdown handling found" - fi -} - -# Core Functionality Tests -test_compilation() { - echo "--- Test: Compilation ---" - if [ -f "pom.xml" ]; then - if command -v mvn &>/dev/null; then - mvn compile -q 2>/dev/null && add_result "compilation" "PASS" "Maven compilation successful" || add_result "compilation" "FAIL" "Maven compilation failed" - else - add_result "compilation" "SKIP" "Maven not installed" - fi - elif [ -f "build.gradle" ]; then - if command -v gradle &>/dev/null; then - gradle compileJava -q 2>/dev/null && add_result "compilation" "PASS" "Gradle compilation successful" || add_result "compilation" "FAIL" "Gradle compilation failed" - else - add_result "compilation" "SKIP" "Gradle not installed" - fi - else - add_result "compilation" "WARN" "No build configuration found" - fi -} - -test_unit_tests() { - echo "--- Test: Unit Tests ---" - if [ -f "pom.xml" ]; then - if command -v mvn &>/dev/null; then - mvn test -q 2>/dev/null && add_result "unit_tests" "PASS" "Unit tests passed" || add_result "unit_tests" "FAIL" "Unit tests failed" - else - add_result "unit_tests" "SKIP" "Maven not installed" - fi - elif [ -f "build.gradle" ]; then - if command -v gradle &>/dev/null; then - gradle test -q 2>/dev/null && add_result "unit_tests" "PASS" "Unit tests passed" || add_result "unit_tests" "FAIL" "Unit tests failed" - else - add_result "unit_tests" "SKIP" "Gradle not installed" - fi - else - add_result "unit_tests" "WARN" "No build configuration found" - fi -} - -test_role_matrix() { - echo "--- Test: Role Matrix Implementation ---" - if [ -d "src/main/java" ]; then - if grep -rq "Role\|Permission\|Principal" src/main/java 2>/dev/null; then - add_result "role_matrix_impl" "PASS" "Role matrix classes detected" - else - add_result "role_matrix_impl" "WARN" "Role matrix implementation unclear" - fi - else - add_result "role_matrix_impl" "WARN" "Source directory not found" - fi -} - -test_runtime_integration() { - echo "--- Test: Runtime Integration ---" - if grep -rq "runtime\|dynamic\|reflection" . 2>/dev/null; then - add_result "runtime_integration" "PASS" "Runtime integration patterns detected" - else - add_result "runtime_integration" "WARN" "Runtime integration patterns not found" - fi -} - -# Run all tests (without set -e to allow WARN/SKIP handling) -test_ci_pipeline -test_operational_risks -test_compilation -test_unit_tests -test_role_matrix -test_runtime_integration - -# Generate JSON report -echo "" -echo "=== Generating Report ===" - -cat > "$REPORT_FILE" << 'EOF' -{ - "timestamp": "__TIMESTAMP__", - "summary": { - "total": 0, - "passed": 0, - "failed": 0, - "warned": 0, - "skipped": 0 - }, - "results": [] -} -EOF - -# Build results JSON array -RESULTS_JSON="[" -first=true -for r in "${RESULTS[@]}"; do - if [ "$first" = true ]; then - first=false - else - RESULTS_JSON+=", " - fi - RESULTS_JSON+="$r" -done -RESULTS_JSON+="]" - -# Update report with results -REPORT_CONTENT=$(cat "$REPORT_FILE") -REPORT_CONTENT=$(echo "$REPORT_CONTENT" | sed "s/__TIMESTAMP__/$(date -Iseconds)/") -REPORT_CONTENT=$(echo "$REPORT_CONTENT" | jq --argjson results "$RESULTS_JSON" '.results = $results') - -# Calculate summary -TOTAL=$(echo "$RESULTS_JSON" | jq 'length') -PASSED=$(echo "$RESULTS_JSON" | jq '[.[] | select(.status == "PASS")] | length') -FAILED=$(echo "$RESULTS_JSON" | jq '[.[] | select(.status == "FAIL")] | length') -WARNED=$(echo "$RESULTS_JSON" | jq '[.[] | select(.status == "WARN")] | length') -SKIPPED=$(echo "$RESULTS_JSON" | jq '[.[] | select(.status == "SKIP")] | length') - -REPORT_CONTENT=$(echo "$REPORT_CONTENT" | jq \ - --argjson total "$TOTAL" \ - --argjson passed "$PASSED" \ - --argjson failed "$FAILED" \ - --argjson warned "$WARNED" \ - --argjson skipped "$SKIPPED" \ - '.summary = {"total": $total, "passed": $passed, "failed": $failed, "warned": $warned, "skipped": $skipped}') - -echo "$REPORT_CONTENT" > "$REPORT_FILE" - -# Print summary -echo "" -echo "=== Test Summary ===" -echo "Total: $TOTAL" -echo "Passed: $PASSED" -echo "Failed: $FAILED" -echo "Warnings: $WARNED" -echo "Skipped: $SKIPPED" -echo "" -echo "Report saved to: $REPORT_FILE" - -# Exit with appropriate code -exit 0