Files
zellyy-finance/.github/workflows/pr-deployment-status.yml
hansoo e72f9e8d26 feat: React 성능 최적화 및 Vercel 배포 시스템 구축 완료
🚀 성능 최적화 (Task 8):
- React.lazy를 활용한 코드 스플리팅 구현
- React.memo, useMemo, useCallback을 통한 메모이제이션 최적화
- 초기 번들 크기 87% 감소 (470kB → 62kB)
- 백그라운드 동기화 간격 최적화 (5분 → 30초)

📦 Vercel 배포 인프라 구축 (Task 9):
- vercel.json 배포 설정 및 보안 헤더 구성
- GitHub Actions 자동 배포 워크플로우 설정
- 환경별 배포 및 미리보기 시스템 구현
- 자동화된 배포 스크립트 및 환경 변수 관리
- 포괄적인 배포 가이드 및 체크리스트 작성

🔧 코드 품질 개선:
- ESLint 주요 오류 수정 (사용하지 않는 변수/import 정리)
- 테스트 커버리지 확장 (229개 테스트 통과)
- TypeScript 타입 안전성 강화
- Prettier 코드 포맷팅 적용

⚠️ 참고: 테스트 파일의 any 타입 및 일부 경고는 향후 개선 예정

🛠️ Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-12 20:52:04 +09:00

53 lines
2.0 KiB
YAML

name: PR Deployment Status
on:
deployment_status:
jobs:
deployment-status:
runs-on: ubuntu-latest
if: github.event.deployment_status.state == 'success' || github.event.deployment_status.state == 'failure'
steps:
- name: Add deployment comment to PR
uses: actions/github-script@v7
with:
script: |
const { deployment_status } = context.payload;
const state = deployment_status.state;
const targetUrl = deployment_status.target_url;
const environment = deployment_status.deployment.environment;
let emoji = state === 'success' ? '✅' : '❌';
let message = state === 'success' ? '성공' : '실패';
const comment = `## ${emoji} 배포 ${message}
**환경**: \`${environment}\`
**상태**: ${message}
**URL**: ${targetUrl ? `[배포 확인하기](${targetUrl})` : '배포 URL 없음'}
**시간**: ${new Date().toLocaleString('ko-KR', { timeZone: 'Asia/Seoul' })}
${state === 'success'
? '🎉 배포가 성공적으로 완료되었습니다! 위 링크에서 확인해보세요.'
: '⚠️ 배포 중 문제가 발생했습니다. Vercel 대시보드에서 로그를 확인해주세요.'}`;
// PR과 연관된 경우에만 코멘트 추가
if (context.payload.deployment_status.deployment.ref !== 'main') {
const { data: prs } = await github.rest.pulls.list({
owner: context.repo.owner,
repo: context.repo.repo,
head: `${context.repo.owner}:${context.payload.deployment_status.deployment.ref}`,
state: 'open'
});
if (prs.length > 0) {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prs[0].number,
body: comment
});
}
}