#!/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 워크플로우 실행"