159 lines
5.0 KiB
Markdown
159 lines
5.0 KiB
Markdown
---
|
||||
|
|
description: Creates weekly summary of issue activity including trends, charts, and insights every Monday
|
|||
|
|
|
|||
|
|
timeout-minutes: 20
|
|||
|
|
|
|||
|
|
on:
|
|||
|
|
schedule: weekly on monday
|
|||
|
|
workflow_dispatch:
|
|||
|
|
|
|||
|
|
permissions:
|
|||
|
|
issues: read
|
|||
|
|
|
|||
|
|
network:
|
|||
|
|
allowed:
|
|||
|
|
- defaults
|
|||
|
|
- python
|
|||
|
|
|
|||
|
|
tools:
|
|||
|
|
edit:
|
|||
|
|
bash:
|
|||
|
|
- "*"
|
|||
|
|
github:
|
|||
|
|
lockdown: true
|
|||
|
|
toolsets:
|
|||
|
|
- issues
|
|||
|
|
min-integrity: none # This workflow is allowed to examine and comment on any issues or PRs
|
|||
|
|
|
|||
|
|
safe-outputs:
|
|||
|
|
upload-asset:
|
|||
|
|
create-discussion:
|
|||
|
|
title-prefix: "[Weekly Summary] "
|
|||
|
|
category: "audits"
|
|||
|
|
close-older-discussions: true
|
|||
|
|
|
|||
|
|
steps:
|
|||
|
|
- name: Setup Python environment
|
|||
|
|
run: |
|
|||
|
|
mkdir -p /tmp/charts /tmp/data
|
|||
|
|
pip install --user --quiet numpy pandas matplotlib seaborn scipy
|
|||
|
|
python3 -c "import pandas, matplotlib, seaborn; print('Python environment ready')"
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# Weekly Issue Summary
|
|||
|
|
|
|||
|
|
Create a comprehensive weekly summary of issue activity for repository ${{ github.repository }}.
|
|||
|
|
|
|||
|
|
## Step 1: Collect Issue Data
|
|||
|
|
|
|||
|
|
Use GitHub API tools to gather data for the past 30 days:
|
|||
|
|
|
|||
|
|
1. **Issue Activity Data** - Count of issues opened per day, closed per day, and running open count
|
|||
|
|
2. **Issue Resolution Data** - Average time to close issues, distribution of issue lifespans, breakdown by label
|
|||
|
|
|
|||
|
|
Fetch enough issues to compute weekly and daily trends over the past 30 days. Use the GitHub toolset to query issues filtered by `created` and `closed` dates.
|
|||
|
|
|
|||
|
|
## Step 2: Generate Trend Charts
|
|||
|
|
|
|||
|
|
Write Python scripts to create exactly 2 high-quality trend charts and execute them via bash.
|
|||
|
|
|
|||
|
|
### Chart 1: Issue Activity Trends
|
|||
|
|
|
|||
|
|
Save data to `/tmp/data/issue_activity.csv` with columns: `date,opened,closed,open_total`
|
|||
|
|
|
|||
|
|
Generate a multi-line chart:
|
|||
|
|
|
|||
|
|
- Issues opened per week (bar or line)
|
|||
|
|
- Issues closed per week (bar or line)
|
|||
|
|
- Running total of open issues (secondary line)
|
|||
|
|
- X-axis: last 12 weeks, Y-axis: count
|
|||
|
|
- Save as `/tmp/charts/issue_activity_trends.png` at 300 DPI, 12×7 inches
|
|||
|
|
- Use seaborn whitegrid style with a professional color palette
|
|||
|
|
|
|||
|
|
### Chart 2: Issue Resolution Time Trends
|
|||
|
|
|
|||
|
|
Save data to `/tmp/data/issue_resolution.csv` with columns: `date,avg_days,median_days`
|
|||
|
|
|
|||
|
|
Generate a line chart with moving average overlay:
|
|||
|
|
|
|||
|
|
- Average time to close (7-day moving average line)
|
|||
|
|
- Median time to close
|
|||
|
|
- Shaded variance band
|
|||
|
|
- X-axis: last 30 days, Y-axis: days to resolution
|
|||
|
|
- Save as `/tmp/charts/issue_resolution_trends.png` at 300 DPI, 12×7 inches
|
|||
|
|
|
|||
|
|
Run your Python scripts via bash and verify the charts exist before proceeding.
|
|||
|
|
|
|||
|
|
### Python Notes
|
|||
|
|
|
|||
|
|
- Use pandas for data manipulation and datetime handling
|
|||
|
|
- Use `matplotlib.pyplot` and `seaborn` for visualization
|
|||
|
|
- Apply `plt.tight_layout()` before saving
|
|||
|
|
- Handle sparse data gracefully (use bar charts if fewer than 7 data points)
|
|||
|
|
- Set `matplotlib.use('Agg')` to avoid display errors in headless environments
|
|||
|
|
|
|||
|
|
## Step 3: Upload Charts
|
|||
|
|
|
|||
|
|
Upload both chart images using the `upload-asset` safe output tool. Collect the returned URLs to embed in the discussion.
|
|||
|
|
|
|||
|
|
## Step 4: Create Weekly Discussion
|
|||
|
|
|
|||
|
|
Create a discussion with the title format: `Weekly Summary - [YYYY-MM-DD]`
|
|||
|
|
|
|||
|
|
### Formatting Guidelines
|
|||
|
|
|
|||
|
|
- Use `###` for main sections, `####` for subsections (discussion title is the h1)
|
|||
|
|
- Wrap long lists in `<details><summary>` collapsible sections
|
|||
|
|
- Keep critical information (overview, trends, statistics, recommendations) always visible
|
|||
|
|
- Keep optional detail (full issue lists, verbose breakdowns) in collapsible sections
|
|||
|
|
|
|||
|
|
### Discussion Structure
|
|||
|
|
|
|||
|
|
```markdown
|
|||
|
|
### 📊 Weekly Overview
|
|||
|
|
|
|||
|
|
[1–2 paragraphs: total issues opened and closed this week, how that compares to the previous week, key theme or pattern in the issues]
|
|||
|
|
|
|||
|
|
### 📈 Issue Activity Trends
|
|||
|
|
|
|||
|
|
#### Weekly Activity Patterns
|
|||
|
|

|
|||
|
|
|
|||
|
|
[2–3 sentences: describe the trend - are issues accumulating, being resolved quickly, or holding steady?]
|
|||
|
|
|
|||
|
|
#### Resolution Time Analysis
|
|||
|
|

|
|||
|
|
|
|||
|
|
[2–3 sentences: how quickly are issues being resolved? improving or slowing down?]
|
|||
|
|
|
|||
|
|
### 🔑 Key Trends
|
|||
|
|
|
|||
|
|
[Bullet list of 3–5 notable patterns: common issue types, label distribution, new contributors filing issues, recurring topics, etc.]
|
|||
|
|
|
|||
|
|
### 📋 Summary Statistics
|
|||
|
|
|
|||
|
|
| Metric | This Week | Last Week | Trend |
|
|||
|
|
|--------|-----------|-----------|-------|
|
|||
|
|
| Issues Opened | X | X | ↑/↓/→ |
|
|||
|
|
| Issues Closed | X | X | ↑/↓/→ |
|
|||
|
|
| Currently Open | X | X | ↑/↓/→ |
|
|||
|
|
| Avg Close Time | X days | X days | ↑/↓/→ |
|
|||
|
|
|
|||
|
|
<details>
|
|||
|
|
<summary><b>Full Issue List (This Week)</b></summary>
|
|||
|
|
|
|||
|
|
[Numbered list of all issues opened this week with title, number, author, labels]
|
|||
|
|
|
|||
|
|
</details>
|
|||
|
|
|
|||
|
|
### 💡 Recommendations for Upcoming Week
|
|||
|
|
|
|||
|
|
[3–5 actionable suggestions: which issues to prioritize, patterns that suggest backlog growth, labels that need attention, etc.]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Step 5: Notes
|
|||
|
|
|
|||
|
|
- If fewer than 7 days of data are available, generate charts with available data and note the limited range
|
|||
|
|
- If no issues exist this week, still create a discussion noting the quiet week
|
|||
|
|
- Always create the discussion even if charts fail to generate (omit chart sections and explain)
|