🚀 성능 최적화 (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>
53 lines
2.0 KiB
YAML
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
|
|
});
|
|
}
|
|
}
|