Reviewer 역할 검증 보고서 smoke (role-reviewer-live-1522-001)
This commit is contained in:
parent
33d512d574
commit
49a2a38b6f
1 changed files with 282 additions and 0 deletions
282
verification/smoke-test.sh
Normal file
282
verification/smoke-test.sh
Normal file
|
|
@ -0,0 +1,282 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# Runtime Role Matrix Live - Smoke Test Script
|
||||||
|
# 이 스크립트는 변경 사항의 기본 검증을 수행합니다
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
||||||
|
REPORT_FILE="$SCRIPT_DIR/smoke-test-report.json"
|
||||||
|
|
||||||
|
# 색상 정의
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# 테스트 결과 배열
|
||||||
|
declare -a TEST_RESULTS
|
||||||
|
|
||||||
|
log_info() {
|
||||||
|
echo -e "${GREEN}[INFO]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_warn() {
|
||||||
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_error() {
|
||||||
|
echo -e "${RED}[ERROR]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
record_result() {
|
||||||
|
local test_name="$1"
|
||||||
|
local status="$2"
|
||||||
|
local message="$3"
|
||||||
|
TEST_RESULTS+=("{\"test\": \"$test_name\", \"status\": \"$status\", \"message\": \"$message\"}")
|
||||||
|
}
|
||||||
|
|
||||||
|
# 1. 프로젝트 구조 확인
|
||||||
|
test_project_structure() {
|
||||||
|
log_info "프로젝트 구조 확인 중..."
|
||||||
|
|
||||||
|
if [ -f "$PROJECT_ROOT/pom.xml" ] || [ -f "$PROJECT_ROOT/build.gradle" ]; then
|
||||||
|
log_info "빌드 파일 발견"
|
||||||
|
record_result "project_structure" "PASS" "빌드 파일 존재 확인"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log_error "빌드 파일을 찾을 수 없습니다"
|
||||||
|
record_result "project_structure" "FAIL" "빌드 파일 부재"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 2. 변경 파일 확인
|
||||||
|
test_changed_files() {
|
||||||
|
log_info "변경 파일 확인 중..."
|
||||||
|
|
||||||
|
cd "$PROJECT_ROOT"
|
||||||
|
|
||||||
|
if git rev-parse --git-dir > /dev/null 2>&1; then
|
||||||
|
local changed_files=$(git diff --name-only HEAD~1 2>/dev/null || echo "")
|
||||||
|
if [ -n "$changed_files" ]; then
|
||||||
|
log_info "변경된 파일 목록:"
|
||||||
|
echo "$changed_files" | while read -r file; do
|
||||||
|
echo " - $file"
|
||||||
|
done
|
||||||
|
echo "$changed_files" > "$SCRIPT_DIR/changed-files.txt"
|
||||||
|
record_result "changed_files" "PASS" "$(echo "$changed_files" | wc -l)개 파일 변경됨"
|
||||||
|
else
|
||||||
|
log_warn "변경된 파일이 없습니다"
|
||||||
|
record_result "changed_files" "WARN" "변경된 파일 없음"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_warn "Git 저장소가 아닙니다"
|
||||||
|
record_result "changed_files" "SKIP" "Git 저장소 아님"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 3. 소스 코드 컴파일 확인
|
||||||
|
test_compilation() {
|
||||||
|
log_info "소스 코드 컴파일 확인 중..."
|
||||||
|
|
||||||
|
cd "$PROJECT_ROOT"
|
||||||
|
|
||||||
|
if [ -f "pom.xml" ]; then
|
||||||
|
if mvn compile -q -DskipTests 2>&1; then
|
||||||
|
log_info "Maven 컴파일 성공"
|
||||||
|
record_result "compilation" "PASS" "Maven 컴파일 성공"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log_error "Maven 컴파일 실패"
|
||||||
|
record_result "compilation" "FAIL" "Maven 컴파일 실패"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
elif [ -f "build.gradle" ]; then
|
||||||
|
if ./gradlew compileJava -q 2>&1; then
|
||||||
|
log_info "Gradle 컴파일 성공"
|
||||||
|
record_result "compilation" "PASS" "Gradle 컴파일 성공"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log_error "Gradle 컴파일 실패"
|
||||||
|
record_result "compilation" "FAIL" "Gradle 컴파일 실패"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_warn "빌드 파일이 없습니다"
|
||||||
|
record_result "compilation" "SKIP" "빌드 파일 부재"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 4. 단위 테스트 실행
|
||||||
|
test_unit_tests() {
|
||||||
|
log_info "단위 테스트 실행 중..."
|
||||||
|
|
||||||
|
cd "$PROJECT_ROOT"
|
||||||
|
|
||||||
|
if [ -f "pom.xml" ]; then
|
||||||
|
if mvn test -q 2>&1; then
|
||||||
|
log_info "단위 테스트 성공"
|
||||||
|
record_result "unit_tests" "PASS" "모든 단위 테스트 통과"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log_error "단위 테스트 실패"
|
||||||
|
record_result "unit_tests" "FAIL" "단위 테스트 실패"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
elif [ -f "build.gradle" ]; then
|
||||||
|
if ./gradlew test -q 2>&1; then
|
||||||
|
log_info "단위 테스트 성공"
|
||||||
|
record_result "unit_tests" "PASS" "모든 단위 테스트 통과"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log_error "단위 테스트 실패"
|
||||||
|
record_result "unit_tests" "FAIL" "단위 테스트 실패"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_warn "테스트 실행 불가"
|
||||||
|
record_result "unit_tests" "SKIP" "빌드 파일 부재"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 5. CI 설정 파일 확인
|
||||||
|
test_ci_config() {
|
||||||
|
log_info "CI 설정 파일 확인 중..."
|
||||||
|
|
||||||
|
local ci_found=false
|
||||||
|
|
||||||
|
if [ -d "$PROJECT_ROOT/.github/workflows" ]; then
|
||||||
|
log_info "GitHub Actions 설정 발견"
|
||||||
|
ci_found=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$PROJECT_ROOT/Jenkinsfile" ]; then
|
||||||
|
log_info "Jenkins 설정 발견"
|
||||||
|
ci_found=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$PROJECT_ROOT/.gitlab-ci.yml" ]; then
|
||||||
|
log_info "GitLab CI 설정 발견"
|
||||||
|
ci_found=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if $ci_found; then
|
||||||
|
record_result "ci_config" "PASS" "CI 설정 파일 확인됨"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log_warn "CI 설정 파일을 찾을 수 없습니다"
|
||||||
|
record_result "ci_config" "WARN" "CI 설정 파일 부재"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 6. 보안 설정 확인
|
||||||
|
test_security_config() {
|
||||||
|
log_info "보안 설정 확인 중..."
|
||||||
|
|
||||||
|
local security_issues=0
|
||||||
|
|
||||||
|
# 시크릿 관리 파일 확인
|
||||||
|
if [ -f "$PROJECT_ROOT/.env" ]; then
|
||||||
|
log_warn ".env 파일이 버전 관리에 포함되어 있습니다"
|
||||||
|
((security_issues++))
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 민감 정보 패턴 확인
|
||||||
|
if grep -r -l "password\s*=" "$PROJECT_ROOT/src" 2>/dev/null | grep -v ".class" > /dev/null; then
|
||||||
|
log_warn "소스 코드에 비밀번호 하드코딩 의심 발견"
|
||||||
|
((security_issues++))
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $security_issues -eq 0 ]; then
|
||||||
|
log_info "기본 보안 검사 통과"
|
||||||
|
record_result "security" "PASS" "보안 검사 통과"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log_warn "보안 이슈 $security_issues건 발견"
|
||||||
|
record_result "security" "WARN" "보안 이슈 $security_issues건"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 7. 문서 확인
|
||||||
|
test_documentation() {
|
||||||
|
log_info "문서 확인 중..."
|
||||||
|
|
||||||
|
local docs_found=false
|
||||||
|
|
||||||
|
for doc in README.md CONTRIBUTING.md CHANGELOG.md; do
|
||||||
|
if [ -f "$PROJECT_ROOT/$doc" ]; then
|
||||||
|
log_info "$doc 발견"
|
||||||
|
docs_found=true
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if $docs_found; then
|
||||||
|
record_result "documentation" "PASS" "필수 문서 존재"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log_warn "필수 문서가 부족합니다"
|
||||||
|
record_result "documentation" "WARN" "문서 부족"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 8. JSON 보고서 생성
|
||||||
|
generate_report() {
|
||||||
|
log_info "보고서 생성 중..."
|
||||||
|
|
||||||
|
local timestamp=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||||
|
local results_json=$(IFS=,; echo "[${TEST_RESULTS[*]}]")
|
||||||
|
|
||||||
|
cat > "$REPORT_FILE" << EOF
|
||||||
|
{
|
||||||
|
"report": {
|
||||||
|
"project": "runtime-role-matrix-live",
|
||||||
|
"timestamp": "$timestamp",
|
||||||
|
"smoke_test_version": "1.0.0"
|
||||||
|
},
|
||||||
|
"results": $results_json,
|
||||||
|
"summary": {
|
||||||
|
"total": ${#TEST_RESULTS[@]},
|
||||||
|
"passed": $(echo "$results_json" | grep -o '"PASS"' | wc -l),
|
||||||
|
"failed": $(echo "$results_json" | grep -o '"FAIL"' | wc -l),
|
||||||
|
"warned": $(echo "$results_json" | grep -o '"WARN"' | wc -l),
|
||||||
|
"skipped": $(echo "$results_json" | grep -o '"SKIP"' | wc -l)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
log_info "보고서 저장 완료: $REPORT_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 메인 실행
|
||||||
|
main() {
|
||||||
|
log_info "=========================================="
|
||||||
|
log_info "Runtime Role Matrix Live - Smoke Test"
|
||||||
|
log_info "=========================================="
|
||||||
|
|
||||||
|
mkdir -p "$SCRIPT_DIR"
|
||||||
|
|
||||||
|
test_project_structure
|
||||||
|
test_changed_files
|
||||||
|
test_compilation
|
||||||
|
test_unit_tests
|
||||||
|
test_ci_config
|
||||||
|
test_security_config
|
||||||
|
test_documentation
|
||||||
|
|
||||||
|
generate_report
|
||||||
|
|
||||||
|
log_info "=========================================="
|
||||||
|
log_info "Smoke Test 완료"
|
||||||
|
log_info "=========================================="
|
||||||
|
|
||||||
|
# 결과 요약 출력
|
||||||
|
echo ""
|
||||||
|
echo "결과 요약:"
|
||||||
|
cat "$REPORT_FILE" | grep -A 10 '"summary"'
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
Loading…
Add table
Add a link
Reference in a new issue