153 lines
4 KiB
Bash
153 lines
4 KiB
Bash
#!/bin/bash
|
|
# 검증 스크립트 - runtime-role-reverify-202607140550
|
|
|
|
set -e
|
|
|
|
echo "=========================================="
|
|
echo " 검증 체크리스트 실행"
|
|
echo " 프로젝트: runtime-role-reverify-202607140550"
|
|
echo "=========================================="
|
|
echo ""
|
|
|
|
# 색상 정의
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 카운터
|
|
PASS=0
|
|
FAIL=0
|
|
SKIP=0
|
|
|
|
# 검증 함수
|
|
check_pass() {
|
|
echo -e "${GREEN}[PASS]${NC} $1"
|
|
((PASS++))
|
|
}
|
|
|
|
check_fail() {
|
|
echo -e "${RED}[FAIL]${NC} $1"
|
|
((FAIL++))
|
|
}
|
|
|
|
check_skip() {
|
|
echo -e "${YELLOW}[SKIP]${NC} $1"
|
|
((SKIP++))
|
|
}
|
|
|
|
echo "=== 1. 산출물 검증 ==="
|
|
|
|
# D-01: 소스 코드 구조
|
|
if [ -d "src/main/java" ] && [ -d "src/test/java" ]; then
|
|
check_pass "D-01: 소스 코드 구조 완전성"
|
|
else
|
|
check_fail "D-01: 소스 코드 구조 완전성"
|
|
fi
|
|
|
|
# D-02: 설정 파일
|
|
if [ -f "pom.xml" ] || [ -f "build.gradle" ]; then
|
|
check_pass "D-02: 설정 파일 존재성"
|
|
else
|
|
check_fail "D-02: 설정 파일 존재성"
|
|
fi
|
|
|
|
# D-03: 문서
|
|
if [ -f "README.md" ]; then
|
|
check_pass "D-03: 문서 존재성"
|
|
else
|
|
check_skip "D-03: 문서 존재성 (README.md 없음)"
|
|
fi
|
|
|
|
# D-04: 의존성
|
|
if [ -f "pom.xml" ]; then
|
|
if grep -q "<dependencies>" pom.xml; then
|
|
check_pass "D-04: 의존성 선언 완전성"
|
|
else
|
|
check_fail "D-04: 의존성 선언 완전성"
|
|
fi
|
|
else
|
|
check_skip "D-04: 의존성 선언 (pom.xml 없음)"
|
|
fi
|
|
|
|
# D-05: 빌드 스크립트
|
|
if [ -f "pom.xml" ] || [ -f "build.gradle" ] || [ -f "Makefile" ]; then
|
|
check_pass "D-05: 빌드 스크립트 존재"
|
|
else
|
|
check_fail "D-05: 빌드 스크립트 존재"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== 2. 테스트 검증 ==="
|
|
|
|
# T-01: 단위 테스트
|
|
if find . -name "*Test.java" -type f 2>/dev/null | grep -q .; then
|
|
check_pass "T-01: 단위 테스트 존재"
|
|
else
|
|
check_skip "T-01: 단위 테스트 존재 (테스트 파일 없음)"
|
|
fi
|
|
|
|
# T-02: 통합 테스트
|
|
if find . -name "*IT.java" -type f 2>/dev/null | grep -q . || [ -d "src/test/integration" ]; then
|
|
check_pass "T-02: 통합 테스트 존재"
|
|
else
|
|
check_skip "T-02: 통합 테스트 존재 (통합 테스트 없음)"
|
|
fi
|
|
|
|
# T-03: 테스트 자동화
|
|
if [ -f "pom.xml" ]; then
|
|
if grep -q "maven-surefire-plugin" pom.xml || grep -q "<artifactId>maven-surefire-plugin</artifactId>" pom.xml; then
|
|
check_pass "T-03: 테스트 자동화 설정"
|
|
else
|
|
check_skip "T-03: 테스트 자동화 설정 (Surefire 플러그인 없음)"
|
|
fi
|
|
else
|
|
check_skip "T-03: 테스트 자동화 (pom.xml 없음)"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== 3. CI/CD 검증 ==="
|
|
|
|
# C-01: CI 파이프라인
|
|
if [ -f ".github/workflows/ci.yml" ] || [ -f ".github/workflows/build.yml" ] || [ -f "Jenkinsfile" ] || [ -f ".gitlab-ci.yml" ]; then
|
|
check_pass "C-01: CI 파이프라인 정의 파일 존재"
|
|
else
|
|
check_skip "C-01: CI 파이프라인 정의 파일 존재 (CI 설정 없음)"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== 4. 운영 리스크 검증 ==="
|
|
|
|
# O-01: 로깅 설정
|
|
if [ -f "src/main/resources/logback.xml" ] || [ -f "src/main/resources/logback-spring.xml" ] || [ -f "src/main/resources/log4j2.xml" ]; then
|
|
check_pass "O-01: 로깅 전략 정의"
|
|
else
|
|
check_skip "O-01: 로깅 전략 정의 (로깅 설정 없음)"
|
|
fi
|
|
|
|
# O-02: 환경별 설정
|
|
if ls src/main/resources/application-*.properties src/main/resources/application-*.yml src/main/resources/application-*.yaml 2>/dev/null | grep -q .; then
|
|
check_pass "O-02: 환경별 설정 분리"
|
|
else
|
|
check_skip "O-02: 환경별 설정 분리 (프로파일 설정 없음)"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=========================================="
|
|
echo " 검증 결과 요약"
|
|
echo "=========================================="
|
|
echo -e "${GREEN}통과:${NC} $PASS"
|
|
echo -e "${RED}실패:${NC} $FAIL"
|
|
echo -e "${YELLOW}건너뜀:${NC} $SKIP"
|
|
echo ""
|
|
|
|
TOTAL=$((PASS + FAIL + SKIP))
|
|
if [ $TOTAL -gt 0 ]; then
|
|
PASS_RATE=$((PASS * 100 / TOTAL))
|
|
echo "통과율: $PASS_RATE%"
|
|
fi
|
|
|
|
echo "=========================================="
|
|
|
|
# 결과 반환
|
|
exit 0
|