#!/bin/bash # 증적 보고서 생성 스크립트 # smoke-test.sh 실행 후 이 스크립트를 실행하여 최종 증적 보고서를 생성합니다 set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" echo "==========================================" echo "증적 보고서 생성" echo "==========================================" # smoke-test-report.json이 있는지 확인 if [ ! -f "$SCRIPT_DIR/smoke-test-report.json" ]; then echo "오류: smoke-test-report.json을 찾을 수 없습니다." echo "먼저 ./verification/smoke-test.sh를 실행해주세요." exit 1 fi # 변경 파일 목록 echo "" echo "1. 변경 파일 수집..." if [ -f "$SCRIPT_DIR/changed-files.txt" ]; then CHANGED_FILES=$(cat "$SCRIPT_DIR/changed-files.txt" | tr '\n' ',' | sed 's/,$//') else CHANGED_FILES="" fi # Git 정보 수집 echo "2. Git 정보 수집..." cd "$PROJECT_ROOT" GIT_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown") GIT_COMMIT=$(git rev-parse HEAD 2>/dev/null || echo "unknown") GIT_COMMIT_MSG=$(git log -1 --pretty=%B 2>/dev/null | head -1 || echo "unknown") # 빌드 정보 수집 echo "3. 빌드 정보 수집..." if [ -f "$PROJECT_ROOT/pom.xml" ]; then BUILD_TOOL="maven" PROJECT_VERSION=$(grep -A1 '' "$PROJECT_ROOT/pom.xml" | grep -A1 'runtime-role-matrix' | grep '' | sed 's/.*//' | sed 's/<\/version>//' | head -1) elif [ -f "$PROJECT_ROOT/build.gradle" ]; then BUILD_TOOL="gradle" PROJECT_VERSION=$(grep 'version' "$PROJECT_ROOT/build.gradle" | head -1 | sed 's/.*version.*//' | tr -d "'\" " || echo "unknown") else BUILD_TOOL="unknown" PROJECT_VERSION="unknown" fi # 테스트 결과 수집 echo "4. 테스트 결과 수집..." UNIT_TEST_RESULT=$(cat "$SCRIPT_DIR/smoke-test-report.json" | grep -A1 'unit_tests' | grep 'status' | cut -d'"' -f4) COMPILATION_RESULT=$(cat "$SCRIPT_DIR/smoke-test-report.json" | grep -A1 'compilation' | grep 'status' | cut -d'"' -f4) # 최종 증적 보고서 생성 echo "5. 증적 보고서 생성..." cat > "$SCRIPT_DIR/final-evidence-report.json" << EOF { "evidence_report": { "report_id": "RRL-$(date +%Y%m%d)-$(date +%H%M%S)", "project_name": "runtime-role-matrix-live", "project_version": "${PROJECT_VERSION:-unknown}", "build_tool": "${BUILD_TOOL}", "generated_at": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")", "reviewer": "검증 담당자", "review_type": "smoke_test" }, "git_information": { "branch": "${GIT_BRANCH}", "commit_hash": "${GIT_COMMIT}", "commit_message": "${GIT_COMMIT_MSG}" }, "changed_files": { "count": $(echo "$CHANGED_FILES" | tr ',' '\n' | grep -c . 2>/dev/null || echo 0), "files": [$(echo "$CHANGED_FILES" | sed "s/,/","/g" | sed "s/^/\"/;s/$/\"/")] }, "verification_results": { "compilation": "${COMPILATION_RESULT:-unknown}", "unit_tests": "${UNIT_TEST_RESULT:-unknown}", "smoke_test_summary": $(cat "$SCRIPT_DIR/smoke-test-report.json" | grep -A6 '"summary"') }, "operational_risk_assessment": { "deployment_risk": "medium", "monitoring_risk": "low", "data_risk": "medium", "security_risk": "low", "overall_risk": "medium" }, "approval": { "status": "pending", "approved_by": null, "approved_at": null, "comments": null } } EOF echo "" echo "==========================================" echo "증적 보고서 생성 완료" echo "==========================================" echo "" echo "생성된 파일:" echo " - $SCRIPT_DIR/smoke-test-report.json" echo " - $SCRIPT_DIR/final-evidence-report.json" echo " - $SCRIPT_DIR/changed-files.txt" echo "" echo "최종 증적 보고서 내용:" cat "$SCRIPT_DIR/final-evidence-report.json"