Skip to content

docs: 코드 품질 개선 보고서 작성 📊 #66

docs: 코드 품질 개선 보고서 작성 📊

docs: 코드 품질 개선 보고서 작성 📊 #66

Workflow file for this run

name: 🚀 Flutter CD - 프로덕션 배포

Check failure on line 1 in .github/workflows/flutter-cd.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/flutter-cd.yml

Invalid workflow file

(Line: 129, Col: 13): Unrecognized named-value: 'secrets'. Located at position 1 within expression: secrets.ANDROID_KEYSTORE_BASE64
# 🎯 트리거 조건: main 브랜치 push 시에만 배포 실행
on:
push:
branches: [main]
paths:
- 'sejong_catch-frontend/**'
- '.github/workflows/flutter-cd.yml'
# 수동 트리거도 가능 (응급 상황용!)
workflow_dispatch:
inputs:
deploy_environment:
description: '배포 환경 선택'
required: true
default: 'production'
type: choice
options:
- production
- staging
# 🔧 환경 변수
env:
FLUTTER_VERSION: '3.24.0'
WORKING_DIRECTORY: ./sejong_catch-frontend
JAVA_VERSION: '17'
jobs:
# 🏁 사전 검증 (한번 더 체크!)
pre_flight_check:
name: 🛡️ 배포 사전 검증
runs-on: ubuntu-latest
defaults:
run:
working-directory: ${{ env.WORKING_DIRECTORY }}
steps:
- name: 📥 코드 체크아웃
uses: actions/checkout@v4
- name: ⚡ Flutter 환경 설정
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
channel: 'stable'
cache: true
- name: 📦 의존성 설치
run: flutter pub get
- name: 🔍 코드 분석 (마지막 점검!)
run: |
echo "🔍 최종 코드 분석을 시작합니다..."
flutter analyze
if [ $? -eq 0 ]; then
echo "✅ 코드가 완벽합니다! 배포 준비 완료! 🚀"
else
echo "❌ 코드에 문제가 있어요! 배포를 중단합니다! 🚨"
exit 1
fi
- name: 🧪 테스트 실행 (마지막 검증!)
run: |
echo "🧪 최종 테스트를 시작합니다..."
flutter test
if [ $? -eq 0 ]; then
echo "🎉 모든 테스트 통과! 배포해도 좋아요! ✅"
else
echo "💥 테스트 실패! 배포 취소! 🛑"
exit 1
fi
# 🤖 Android 릴리즈 빌드
build_android:
name: 🤖 Android 릴리즈 빌드
runs-on: ubuntu-latest
needs: pre_flight_check
defaults:
run:
working-directory: ${{ env.WORKING_DIRECTORY }}
steps:
- name: 📥 코드 체크아웃
uses: actions/checkout@v4
- name: ☕ Java 환경 설정
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: ${{ env.JAVA_VERSION }}
- name: ⚡ Flutter 환경 설정
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
channel: 'stable'
cache: true
- name: 📦 의존성 설치
run: flutter pub get
# 🔐 Android 서명 설정 (Secrets 사용)
- name: 🔐 Android 키스토어 설정
if: ${{ github.event.inputs.deploy_environment != 'staging' }}
run: |
if [ -n "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" ]; then
echo "🔐 키스토어를 설정합니다..."
echo "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" | base64 -d > android/app/keystore.jks
echo "✅ 키스토어 설정 완료!"
else
echo "⚠️ 키스토어가 설정되지 않았습니다. Debug 빌드로 진행합니다."
fi
env:
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
- name: 🏗️ Android APK 빌드
run: |
echo "🤖 Android 릴리즈 빌드를 시작합니다..."
if [ -n "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" ]; then
echo "🔒 서명된 릴리즈 APK를 빌드합니다..."
flutter build apk --release
else
echo "🔓 Debug APK를 빌드합니다..."
flutter build apk --debug
fi
echo "✅ Android 빌드 완료!"
- name: 🏗️ Android AAB 빌드 (Play Store용)
if: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
run: |
echo "📦 Android App Bundle을 빌드합니다..."
flutter build appbundle --release
echo "✅ AAB 빌드 완료!"
- name: 📊 Android 빌드 업로드
uses: actions/upload-artifact@v4
with:
name: android-release-${{ github.sha }}
path: |
${{ env.WORKING_DIRECTORY }}/build/app/outputs/flutter-apk/*.apk
${{ env.WORKING_DIRECTORY }}/build/app/outputs/bundle/release/*.aab
retention-days: 30
# 🌐 Web 릴리즈 빌드
build_web:
name: 🌐 Web 릴리즈 빌드
runs-on: ubuntu-latest
needs: pre_flight_check
defaults:
run:
working-directory: ${{ env.WORKING_DIRECTORY }}
steps:
- name: 📥 코드 체크아웃
uses: actions/checkout@v4
- name: ⚡ Flutter 환경 설정
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
channel: 'stable'
cache: true
- name: 📦 의존성 설치
run: flutter pub get
- name: 🌐 Web 릴리즈 빌드
run: |
echo "🌐 웹 릴리즈 빌드를 시작합니다..."
flutter build web --release --web-renderer canvaskit
echo "✅ Web 빌드 완료! 브라우저에서 만나요! 💻"
- name: 📊 Web 빌드 업로드
uses: actions/upload-artifact@v4
with:
name: web-release-${{ github.sha }}
path: ${{ env.WORKING_DIRECTORY }}/build/web/
retention-days: 30
# 🚀 GitHub Pages 배포 (선택적)
- name: 🚀 GitHub Pages 배포
if: ${{ github.event.inputs.deploy_environment != 'staging' }}
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ${{ env.WORKING_DIRECTORY }}/build/web
cname: sejong-catch.dev # 커스텀 도메인 (선택적)
# 📦 GitHub Release 생성
create_release:
name: 📦 GitHub Release 생성
runs-on: ubuntu-latest
needs: [build_android, build_web]
if: ${{ github.event.inputs.deploy_environment != 'staging' }}
steps:
- name: 📥 코드 체크아웃
uses: actions/checkout@v4
- name: 📥 Android 빌드 다운로드
uses: actions/download-artifact@v4
with:
name: android-release-${{ github.sha }}
path: ./android-release/
- name: 📥 Web 빌드 다운로드
uses: actions/download-artifact@v4
with:
name: web-release-${{ github.sha }}
path: ./web-release/
- name: 📝 릴리즈 노트 생성
id: release_notes
run: |
VERSION="v$(date +'%Y.%m.%d')-${{ github.run_number }}"
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
cat > release_notes.md << 'EOF'
## 🎉 세종 캐치 새 버전 출시!
### 🚀 주요 변경사항
- Flutter ${{ env.FLUTTER_VERSION }} 기반 최신 빌드
- 크림슨 레드 테마 적용
- 성능 최적화 및 버그 수정
### 📱 다운로드
- **Android**: APK 파일을 다운로드하여 설치
- **Web**: GitHub Pages에서 바로 사용
### 🔧 기술 정보
- Build SHA: ${{ github.sha }}
- Build Date: $(date +'%Y-%m-%d %H:%M:%S KST')
- Environment: Production
---
🍗 **배포 완료!** 이제 치킨 시켜도 될 것 같네요!
EOF
- name: 🏷️ GitHub Release 생성
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ steps.release_notes.outputs.VERSION }}
name: "🚀 세종 캐치 ${{ steps.release_notes.outputs.VERSION }}"
body_path: release_notes.md
draft: false
prerelease: false
files: |
./android-release/**/*.apk
./android-release/**/*.aab
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# 🎊 배포 완료 알림
deployment_success:
name: 🎉 배포 완료!
runs-on: ubuntu-latest
needs: [build_android, build_web, create_release]
if: always()
steps:
- name: 🎊 성공 축하 메시지
if: ${{ needs.build_android.result == 'success' && needs.build_web.result == 'success' }}
run: |
echo "🎉🎉🎉 세종 캐치 배포가 성공적으로 완료됐습니다! 🎉🎉🎉"
echo "📱 Android APK: 릴리즈에서 다운로드 가능"
echo "🌐 Web: GitHub Pages에서 접속 가능"
echo "🍗 배포 축하 치킨 타임! 고생하셨어요!"
echo "🎯 버전: ${{ github.sha }}"
- name: 🚨 배포 실패 알림
if: ${{ needs.build_android.result == 'failure' || needs.build_web.result == 'failure' }}
run: |
echo "💥💥💥 배포에 실패했습니다! 💥💥💥"
echo "🔍 로그를 확인하고 문제를 해결해주세요!"
echo "☕ 디버깅 타임... 화이팅!"
exit 1