✨ 주요 개선사항: - any 타입 83개에서 62개로 21개 수정 (25% 감소) - 모든 ESLint 에러 11개 → 0개 완전 해결 - 타입 안전성 대폭 향상으로 런타임 오류 가능성 감소 🔧 수정된 파일들: • PWADebug.tsx - 사용하지 않는 import들에 _ prefix 추가 • categoryUtils.ts - 불필요한 any 캐스트 제거 • TransactionsHeader.tsx - BudgetData 인터페이스 정의 • storageUtils.ts - generic 타입과 unknown 타입 적용 • 각종 error handler들 - Error | {message?: string} 타입 적용 • test 파일들 - 적절한 mock 인터페이스 정의 • 유틸리티 파일들 - any → unknown 또는 적절한 타입으로 교체 🏆 성과: - 코드 품질 크게 향상 (280 → 80 문제로 71% 감소) - TypeScript 컴파일러의 타입 체크 효과성 증대 - 개발자 경험 개선 (IDE 자동완성, 타입 추론 등) 🧹 추가 정리: - ESLint no-console/no-alert 경고 해결 - Prettier 포맷팅 적용으로 코드 스타일 통일 🎯 다음 단계: 남은 62개 any 타입 계속 개선 예정 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
197 lines
5.3 KiB
Bash
Executable File
197 lines
5.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# CI/CD 파이프라인 로컬 테스트 스크립트
|
|
# GitHub Actions와 동일한 환경에서 빌드 과정을 시뮬레이션
|
|
|
|
set -e # 에러 발생 시 스크립트 종료
|
|
|
|
echo "🚀 모바일 빌드 파이프라인 테스트 시작"
|
|
echo "======================================"
|
|
|
|
# 색상 정의
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
print_step() {
|
|
echo -e "${BLUE}🔄 $1${NC}"
|
|
}
|
|
|
|
print_success() {
|
|
echo -e "${GREEN}✅ $1${NC}"
|
|
}
|
|
|
|
print_warning() {
|
|
echo -e "${YELLOW}⚠️ $1${NC}"
|
|
}
|
|
|
|
print_error() {
|
|
echo -e "${RED}❌ $1${NC}"
|
|
}
|
|
|
|
# 1. 환경 확인
|
|
print_step "환경 확인"
|
|
echo "Node.js 버전: $(node --version)"
|
|
echo "npm 버전: $(npm --version)"
|
|
|
|
# Java 확인 (Android 빌드용)
|
|
if command -v java &> /dev/null; then
|
|
echo "Java 버전: $(java -version 2>&1 | head -n 1)"
|
|
else
|
|
print_warning "Java가 설치되지 않음 - Android 빌드 불가"
|
|
fi
|
|
|
|
# Xcode 확인 (macOS에서만)
|
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
if command -v xcodebuild &> /dev/null; then
|
|
echo "Xcode 버전: $(xcodebuild -version | head -n 1)"
|
|
else
|
|
print_warning "Xcode가 설치되지 않음 - iOS 빌드 불가"
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# 2. 의존성 설치
|
|
print_step "의존성 설치"
|
|
npm ci
|
|
print_success "의존성 설치 완료"
|
|
|
|
# 3. 코드 품질 검사
|
|
print_step "코드 품질 검사"
|
|
|
|
echo " > ESLint 실행..."
|
|
npm run lint
|
|
print_success "ESLint 통과"
|
|
|
|
echo " > 타입 체킹..."
|
|
npm run type-check
|
|
print_success "타입 체킹 통과"
|
|
|
|
echo " > 테스트 실행..."
|
|
npm run test:run
|
|
print_success "테스트 통과"
|
|
|
|
# 4. 웹 앱 빌드
|
|
print_step "웹 앱 빌드"
|
|
npm run build:prod
|
|
print_success "웹 앱 빌드 완료"
|
|
|
|
# 빌드 파일 크기 확인
|
|
if [ -d "dist" ]; then
|
|
DIST_SIZE=$(du -sh dist | cut -f1)
|
|
echo "빌드 크기: $DIST_SIZE"
|
|
fi
|
|
|
|
# 5. 버전 동기화
|
|
print_step "버전 동기화"
|
|
npm run version:sync
|
|
print_success "버전 동기화 완료"
|
|
|
|
# 6. Capacitor 동기화
|
|
print_step "Capacitor 동기화"
|
|
npm run mobile:sync
|
|
print_success "Capacitor 동기화 완료"
|
|
|
|
# 7. Android 빌드 테스트 (키스토어가 있는 경우)
|
|
print_step "Android 빌드 테스트"
|
|
|
|
if [ -f "android/key.properties" ]; then
|
|
echo " > 키스토어 설정 확인됨"
|
|
|
|
# 디버그 빌드 테스트
|
|
echo " > 디버그 APK 빌드..."
|
|
cd android
|
|
./gradlew assembleDebug --info
|
|
cd ..
|
|
|
|
if [ -f "android/app/build/outputs/apk/debug/app-debug.apk" ]; then
|
|
APK_SIZE=$(du -sh android/app/build/outputs/apk/debug/app-debug.apk | cut -f1)
|
|
print_success "디버그 APK 빌드 완료 (크기: $APK_SIZE)"
|
|
else
|
|
print_error "디버그 APK 파일이 생성되지 않았습니다"
|
|
fi
|
|
|
|
# 릴리즈 빌드 시도 (키스토어 설정에 따라)
|
|
echo " > 릴리즈 번들 빌드 시도..."
|
|
cd android
|
|
if ./gradlew bundleRelease --info 2>/dev/null; then
|
|
cd ..
|
|
if [ -f "android/app/build/outputs/bundle/release/app-release.aab" ]; then
|
|
AAB_SIZE=$(du -sh android/app/build/outputs/bundle/release/app-release.aab | cut -f1)
|
|
print_success "릴리즈 AAB 빌드 완료 (크기: $AAB_SIZE)"
|
|
fi
|
|
else
|
|
cd ..
|
|
print_warning "릴리즈 빌드 실패 - 키스토어 설정 확인 필요"
|
|
fi
|
|
|
|
else
|
|
print_warning "키스토어 설정이 없습니다. 디버그 키스토어를 생성하려면:"
|
|
echo " npm run keystore:debug"
|
|
fi
|
|
|
|
# 8. iOS 빌드 테스트 (macOS에서만)
|
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
print_step "iOS 빌드 테스트"
|
|
|
|
if [ -d "ios/App" ]; then
|
|
echo " > CocoaPods 의존성 설치..."
|
|
cd ios/App
|
|
pod install --quiet
|
|
cd ../..
|
|
|
|
echo " > iOS 디버그 빌드..."
|
|
cd ios/App
|
|
if xcodebuild -workspace App.xcworkspace -scheme App -configuration Debug -destination 'generic/platform=iOS Simulator' build -quiet; then
|
|
cd ../..
|
|
print_success "iOS 디버그 빌드 완료"
|
|
else
|
|
cd ../..
|
|
print_warning "iOS 빌드 실패 - Xcode 설정 확인 필요"
|
|
fi
|
|
else
|
|
print_warning "iOS 프로젝트를 찾을 수 없습니다"
|
|
fi
|
|
else
|
|
print_warning "macOS가 아니므로 iOS 빌드를 건너뜁니다"
|
|
fi
|
|
|
|
# 9. 빌드 결과 요약
|
|
echo ""
|
|
echo "======================================"
|
|
print_success "빌드 파이프라인 테스트 완료"
|
|
|
|
echo ""
|
|
echo "📋 빌드 결과 요약:"
|
|
echo " • 웹 앱: ✅ 완료"
|
|
echo " • 버전 동기화: ✅ 완료"
|
|
echo " • Capacitor 동기화: ✅ 완료"
|
|
|
|
if [ -f "android/app/build/outputs/apk/debug/app-debug.apk" ]; then
|
|
echo " • Android 디버그: ✅ 완료"
|
|
else
|
|
echo " • Android 디버그: ❌ 실패"
|
|
fi
|
|
|
|
if [ -f "android/app/build/outputs/bundle/release/app-release.aab" ]; then
|
|
echo " • Android 릴리즈: ✅ 완료"
|
|
else
|
|
echo " • Android 릴리즈: ⚠️ 건너뜀/실패"
|
|
fi
|
|
|
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
echo " • iOS 빌드: ✅ 테스트됨"
|
|
else
|
|
echo " • iOS 빌드: ⚠️ macOS 아님"
|
|
fi
|
|
|
|
echo ""
|
|
echo "🎉 CI/CD 파이프라인이 로컬에서 성공적으로 검증되었습니다!"
|
|
echo ""
|
|
echo "다음 단계:"
|
|
echo "1. GitHub 리포지토리에 시크릿 설정"
|
|
echo "2. 실제 키스토어 및 인증서 업로드"
|
|
echo "3. GitHub Actions 워크플로우 실행" |