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