name: Deployment Monitor on: push: branches: [main, develop] pull_request: branches: [main] jobs: pre-deployment-check: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: "18" cache: "npm" - name: Install dependencies run: npm ci - name: πŸ” Pre-deployment checks run: | echo "πŸ—οΈ 배포 μ „ 검사λ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€..." # λΉŒλ“œ 크기 뢄석 npm run build # dist 폴더 크기 확인 DIST_SIZE=$(du -sh dist | cut -f1) echo "πŸ“¦ λΉŒλ“œ 크기: $DIST_SIZE" # μ£Όμš” 청크 파일 크기 확인 echo "πŸ“Š μ£Όμš” 청크 파일 크기:" find dist/assets -name "*.js" -exec ls -lh {} \; | awk '{print $5 " " $9}' | sort -hr | head -10 echo "βœ… λΉŒλ“œ 뢄석 μ™„λ£Œ" - name: πŸ§ͺ μ„±λŠ₯ 체크 run: | # JavaScript 파일 개수 확인 JS_COUNT=$(find dist/assets -name "*.js" | wc -l) CSS_COUNT=$(find dist/assets -name "*.css" | wc -l) echo "πŸ“ μƒμ„±λœ 파일:" echo " - JavaScript 파일: $JS_COUNT 개" echo " - CSS 파일: $CSS_COUNT 개" # λŒ€μš©λŸ‰ 파일 κ²½κ³  find dist/assets -name "*.js" -size +500k -exec echo "⚠️ λŒ€μš©λŸ‰ JS 파일 발견: {}" \; find dist/assets -name "*.css" -size +100k -exec echo "⚠️ λŒ€μš©λŸ‰ CSS 파일 발견: {}" \; - name: πŸ“Š λ²ˆλ“€ 뢄석 κ²°κ³Ό μ €μž₯ uses: actions/upload-artifact@v4 with: name: bundle-analysis path: | dist/ retention-days: 7 deployment-notification: runs-on: ubuntu-latest needs: pre-deployment-check if: github.ref == 'refs/heads/main' steps: - name: πŸš€ Production 배포 μ•Œλ¦Ό run: | echo "🎯 ν”„λ‘œλ•μ…˜ 배포가 μ‹œμž‘λ©λ‹ˆλ‹€!" echo "πŸ“… μ‹œκ°„: $(date)" echo "πŸ‘€ μž‘μ„±μž: ${{ github.actor }}" echo "πŸ“ 컀밋: ${{ github.sha }}" echo "πŸ”— Vercel λŒ€μ‹œλ³΄λ“œμ—μ„œ 배포 μƒνƒœλ₯Ό ν™•μΈν•˜μ„Έμš”." security-scan: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: "18" cache: "npm" - name: Install dependencies run: npm ci - name: πŸ”’ λ³΄μ•ˆ μŠ€μΊ” run: | echo "πŸ” λ³΄μ•ˆ 취약점 검사λ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€..." # npm audit if npm audit --audit-level=moderate; then echo "βœ… λ³΄μ•ˆ 취약점이 λ°œκ²¬λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€." else echo "⚠️ λ³΄μ•ˆ 취약점이 λ°œκ²¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€. κ²€ν† κ°€ ν•„μš”ν•©λ‹ˆλ‹€." fi # ν™˜κ²½ λ³€μˆ˜ λˆ„μΆœ 검사 echo "πŸ” ν™˜κ²½ λ³€μˆ˜ λˆ„μΆœ 검사..." if grep -r "VITE_.*=" dist/ --include="*.js" --include="*.css" 2>/dev/null; then echo "⚠️ λΉŒλ“œ νŒŒμΌμ—μ„œ ν™˜κ²½ λ³€μˆ˜κ°€ λ°œκ²¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€." else echo "βœ… ν™˜κ²½ λ³€μˆ˜ λˆ„μΆœμ΄ λ°œκ²¬λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€." fi - name: πŸ“‹ λ³΄μ•ˆ μŠ€μΊ” κ²°κ³Ό run: | echo "πŸ›‘οΈ λ³΄μ•ˆ μŠ€μΊ”μ΄ μ™„λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€." echo "배포 μ „ λ³΄μ•ˆ 검사가 ν†΅κ³Όλ˜μ—ˆμŠ΅λ‹ˆλ‹€."