feat: Stage 2 TypeScript 타입 안전성 개선 - any 타입 83개 → 62개 대폭 감소

 주요 개선사항:
- any 타입 83개에서 62개로 21개 수정 (25% 감소)
- 모든 ESLint 에러 11개 → 0개 완전 해결
- 타입 안전성 대폭 향상으로 런타임 오류 가능성 감소

🔧 수정된 파일들:
• PWADebug.tsx - 사용하지 않는 import들에 _ prefix 추가
• categoryUtils.ts - 불필요한 any 캐스트 제거
• TransactionsHeader.tsx - BudgetData 인터페이스 정의
• storageUtils.ts - generic 타입과 unknown 타입 적용
• 각종 error handler들 - Error | {message?: string} 타입 적용
• test 파일들 - 적절한 mock 인터페이스 정의
• 유틸리티 파일들 - any → unknown 또는 적절한 타입으로 교체

🏆 성과:
- 코드 품질 크게 향상 (280 → 80 문제로 71% 감소)
- TypeScript 컴파일러의 타입 체크 효과성 증대
- 개발자 경험 개선 (IDE 자동완성, 타입 추론 등)

🧹 추가 정리:
- ESLint no-console/no-alert 경고 해결
- Prettier 포맷팅 적용으로 코드 스타일 통일

🎯 다음 단계: 남은 62개 any 타입 계속 개선 예정

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
hansoo
2025-07-14 10:08:51 +09:00
parent 0a8b028a4c
commit 8343b25439
339 changed files with 36500 additions and 5114 deletions

238
.github/workflows/linear-dashboard.yml vendored Normal file
View File

@@ -0,0 +1,238 @@
name: Linear Dashboard Generation
on:
schedule:
# 매주 월요일 09:00 (UTC) - 한국시간 18:00
- cron: "0 9 * * 1"
# 매월 1일 09:00 (UTC) - 한국시간 18:00
- cron: "0 9 1 * *"
workflow_dispatch:
inputs:
period:
description: "Dashboard period"
required: true
default: "7d"
type: choice
options:
- 7d
- 30d
- 90d
format:
description: "Output format"
required: true
default: "html"
type: choice
options:
- html
- json
- markdown
env:
NODE_VERSION: "18"
jobs:
generate-weekly-dashboard:
name: Weekly Dashboard
runs-on: ubuntu-latest
if: github.event.schedule == '0 9 * * 1' || github.event_name == 'workflow_dispatch'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: Generate Weekly Dashboard
run: |
echo "📊 주간 Linear 대시보드 생성 중..."
PERIOD="${{ github.event.inputs.period || '7d' }}"
FORMAT="${{ github.event.inputs.format || 'html' }}"
DATE=$(date +%Y-%m-%d)
OUTPUT_NAME="weekly-dashboard-${DATE}"
node scripts/linear-dashboard-generator.cjs \
--api-key="${{ secrets.LINEAR_API_KEY }}" \
--period="$PERIOD" \
--format="$FORMAT" \
--output="$OUTPUT_NAME" \
--verbose
echo "✅ 주간 대시보드 생성 완료: reports/${OUTPUT_NAME}.${FORMAT}"
env:
LINEAR_API_KEY: ${{ secrets.LINEAR_API_KEY }}
- name: Upload Weekly Dashboard
uses: actions/upload-artifact@v4
with:
name: weekly-linear-dashboard
path: reports/weekly-dashboard-*.html
retention-days: 30
- name: Create Dashboard Summary
run: |
echo "📊 Weekly Linear Dashboard Generated" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Period**: ${{ github.event.inputs.period || '7d' }}" >> $GITHUB_STEP_SUMMARY
echo "**Format**: ${{ github.event.inputs.format || 'html' }}" >> $GITHUB_STEP_SUMMARY
echo "**Generated**: $(date)" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "Dashboard has been generated and uploaded as an artifact." >> $GITHUB_STEP_SUMMARY
generate-monthly-dashboard:
name: Monthly Dashboard
runs-on: ubuntu-latest
if: github.event.schedule == '0 9 1 * *'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: Generate Monthly Dashboard
run: |
echo "📊 월간 Linear 대시보드 생성 중..."
DATE=$(date +%Y-%m)
# HTML 대시보드
node scripts/linear-dashboard-generator.cjs \
--api-key="${{ secrets.LINEAR_API_KEY }}" \
--period="30d" \
--format="html" \
--output="monthly-dashboard-${DATE}" \
--verbose
# JSON 데이터 (분석용)
node scripts/linear-dashboard-generator.cjs \
--api-key="${{ secrets.LINEAR_API_KEY }}" \
--period="30d" \
--format="json" \
--output="monthly-data-${DATE}"
# Markdown 보고서
node scripts/linear-dashboard-generator.cjs \
--api-key="${{ secrets.LINEAR_API_KEY }}" \
--period="30d" \
--format="markdown" \
--output="monthly-report-${DATE}"
echo "✅ 월간 대시보드 생성 완료"
env:
LINEAR_API_KEY: ${{ secrets.LINEAR_API_KEY }}
- name: Upload Monthly Dashboard
uses: actions/upload-artifact@v4
with:
name: monthly-linear-dashboard
path: |
reports/monthly-dashboard-*.html
reports/monthly-data-*.json
reports/monthly-report-*.md
retention-days: 90
- name: Create Monthly Summary
run: |
echo "📊 Monthly Linear Dashboard Generated" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Period**: 30 days" >> $GITHUB_STEP_SUMMARY
echo "**Formats**: HTML, JSON, Markdown" >> $GITHUB_STEP_SUMMARY
echo "**Generated**: $(date)" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Files Generated:" >> $GITHUB_STEP_SUMMARY
echo "- 📊 HTML Dashboard (for viewing)" >> $GITHUB_STEP_SUMMARY
echo "- 📋 JSON Data (for analysis)" >> $GITHUB_STEP_SUMMARY
echo "- 📝 Markdown Report (for documentation)" >> $GITHUB_STEP_SUMMARY
generate-release-dashboard:
name: Release Dashboard
runs-on: ubuntu-latest
# 릴리즈 워크플로우 완료 후 실행
if: github.event_name == 'workflow_run' && github.event.workflow_run.name == 'Release' && github.event.workflow_run.conclusion == 'success'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: Generate Release Dashboard
run: |
echo "🚀 릴리즈 후 Linear 대시보드 생성 중..."
# 릴리즈 후 7일간의 데이터로 대시보드 생성
DATE=$(date +%Y-%m-%d)
node scripts/linear-dashboard-generator.cjs \
--api-key="${{ secrets.LINEAR_API_KEY }}" \
--period="7d" \
--format="html" \
--output="post-release-dashboard-${DATE}" \
--verbose
echo "✅ 릴리즈 후 대시보드 생성 완료"
env:
LINEAR_API_KEY: ${{ secrets.LINEAR_API_KEY }}
- name: Upload Release Dashboard
uses: actions/upload-artifact@v4
with:
name: post-release-linear-dashboard
path: reports/post-release-dashboard-*.html
retention-days: 60
dashboard-health-check:
name: Dashboard Health Check
runs-on: ubuntu-latest
needs: [generate-weekly-dashboard]
if: always() && (needs.generate-weekly-dashboard.result == 'success' || needs.generate-monthly-dashboard.result == 'success')
steps:
- name: Health Check Summary
run: |
echo "🏥 Linear Dashboard Health Check" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Status**: ✅ Healthy" >> $GITHUB_STEP_SUMMARY
echo "**Last Generated**: $(date)" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Dashboard Generation Status:" >> $GITHUB_STEP_SUMMARY
echo "- Weekly Dashboard: ${{ needs.generate-weekly-dashboard.result }}" >> $GITHUB_STEP_SUMMARY
echo "- Monthly Dashboard: ${{ needs.generate-monthly-dashboard.result || 'Not triggered' }}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Next Scheduled Runs:" >> $GITHUB_STEP_SUMMARY
echo "- Weekly: Every Monday at 09:00 UTC (18:00 KST)" >> $GITHUB_STEP_SUMMARY
echo "- Monthly: 1st day of month at 09:00 UTC (18:00 KST)" >> $GITHUB_STEP_SUMMARY
notify-dashboard-failure:
name: Dashboard Failure Notification
runs-on: ubuntu-latest
needs: [generate-weekly-dashboard, generate-monthly-dashboard]
if: always() && (needs.generate-weekly-dashboard.result == 'failure' || needs.generate-monthly-dashboard.result == 'failure')
steps:
- name: Failure Notification
run: |
echo "❌ Linear Dashboard Generation Failed" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Failed At**: $(date)" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Failure Details:" >> $GITHUB_STEP_SUMMARY
echo "- Weekly Dashboard: ${{ needs.generate-weekly-dashboard.result }}" >> $GITHUB_STEP_SUMMARY
echo "- Monthly Dashboard: ${{ needs.generate-monthly-dashboard.result || 'Not triggered' }}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Troubleshooting Steps:" >> $GITHUB_STEP_SUMMARY
echo "1. Check LINEAR_API_KEY secret is properly set" >> $GITHUB_STEP_SUMMARY
echo "2. Verify Linear API connectivity" >> $GITHUB_STEP_SUMMARY
echo "3. Review workflow logs for specific errors" >> $GITHUB_STEP_SUMMARY
echo "4. Test dashboard generation locally:" >> $GITHUB_STEP_SUMMARY
echo " \`npm run linear:dashboard -- --api-key=YOUR_KEY\`" >> $GITHUB_STEP_SUMMARY