diff --git a/verification/generate-evidence.sh b/verification/generate-evidence.sh new file mode 100644 index 0000000..06278aa --- /dev/null +++ b/verification/generate-evidence.sh @@ -0,0 +1,110 @@ +#!/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"