Signed-off-by: Arya Pratap Singh <notaryasingh@gmail.com>
This commit is contained in:
committed by
GitHub
parent
5581078935
commit
e96885974e
@@ -0,0 +1,223 @@
|
||||
version: 1.0.0
|
||||
title: Daily Standup Report Generator
|
||||
description: Automates daily standup report creation by fetching PR status, issue progress, and commit activity directly from GitHub via OAuth - generates formatted reports stored in ./standup/ folder for team communication and historical tracking
|
||||
author:
|
||||
contact: ARYPROGRAMMER
|
||||
|
||||
activities:
|
||||
- Fetch pull requests and their status from GitHub
|
||||
- Fetch issues assigned to or created by user
|
||||
- Analyze merged PRs and commits from specified time period
|
||||
- Identify blockers from PR reviews and issue comments
|
||||
- Generate formatted standup report with accomplishments
|
||||
- Store report in ./standup/ folder with dated filename
|
||||
- Read previous standup reports for progress continuity
|
||||
|
||||
instructions: |
|
||||
You are a Daily Standup Report Generator that helps developers create comprehensive, professional standup reports by fetching all data directly from GitHub.
|
||||
|
||||
Key capabilities:
|
||||
- Fetch PRs directly from GitHub (all branches, no local repo needed)
|
||||
- Get PR reviews, approvals, and CI/CD status
|
||||
- Fetch issues and their current state from GitHub
|
||||
- Extract commits from merged PRs
|
||||
- Identify blockers from PR reviews and failing checks
|
||||
- Store standup reports in dated files in ./standup/ folder
|
||||
- Read previous standup files to show progress continuity
|
||||
- Generate professional standup reports in multiple formats
|
||||
- Works without any local git repository
|
||||
|
||||
IMPORTANT:
|
||||
- All data is fetched from GitHub API via OAuth authentication
|
||||
- Works for any GitHub repository you have access to
|
||||
- Uses official github-mcp-server with OAuth flow for secure authentication
|
||||
- Filters all data by the authenticated GitHub user
|
||||
- Always create a report file in ./standup/ folder at the end
|
||||
- Previous reports are stored as ./standup/standup-{YYYY-MM-DD}.{format}
|
||||
|
||||
parameters:
|
||||
- key: github_owner
|
||||
input_type: string
|
||||
requirement: required
|
||||
default: ""
|
||||
description: "GitHub repository owner/organization (e.g., 'ARYPROGRAMMER', 'block')"
|
||||
|
||||
- key: github_repo
|
||||
input_type: string
|
||||
requirement: required
|
||||
default: ""
|
||||
description: "GitHub repository name (e.g., 'goose')"
|
||||
|
||||
- key: time_period
|
||||
input_type: string
|
||||
requirement: optional
|
||||
default: "24h"
|
||||
description: "Time period to analyze: '24h' (last 24 hours), '48h', 'week'"
|
||||
|
||||
- key: include_prs
|
||||
input_type: string
|
||||
requirement: optional
|
||||
default: "true"
|
||||
description: "Include PR status in the report (true/false)"
|
||||
|
||||
- key: include_issues
|
||||
input_type: string
|
||||
requirement: optional
|
||||
default: "true"
|
||||
description: "Include issue progress in the report (true/false)"
|
||||
|
||||
- key: output_format
|
||||
input_type: string
|
||||
requirement: optional
|
||||
default: "markdown"
|
||||
description: "Report format: 'markdown', 'slack', 'text', 'json'"
|
||||
|
||||
- key: team_channel
|
||||
input_type: string
|
||||
requirement: optional
|
||||
default: ""
|
||||
description: "Team channel name to mention in the report (e.g., '#engineering')"
|
||||
|
||||
extensions:
|
||||
- type: builtin
|
||||
name: developer
|
||||
display_name: Developer
|
||||
timeout: 300
|
||||
bundled: true
|
||||
description: For writing the standup report files to disk and reading previous reports
|
||||
|
||||
- type: stdio
|
||||
name: github
|
||||
cmd: uvx
|
||||
args: ["github-mcp-server"]
|
||||
display_name: GitHub
|
||||
timeout: 300
|
||||
bundled: false
|
||||
description: For fetching PRs, issues, reviews, commits, and GitHub repository data via OAuth authentication
|
||||
|
||||
prompt: |
|
||||
Generate a daily standup report with the following configuration:
|
||||
- GitHub Repository: {{ github_owner }}/{{ github_repo }}
|
||||
- Time Period: {{ time_period }}
|
||||
- Include PRs: {{ include_prs }}
|
||||
- Include Issues: {{ include_issues }}
|
||||
- Output Format: {{ output_format }}
|
||||
{% if team_channel %}
|
||||
- Team Channel: {{ team_channel }}
|
||||
{% endif %}
|
||||
|
||||
**CRITICAL REQUIREMENT**: You MUST create a file named `./standup/standup-{date}.{{ output_format }}` containing the complete standup report. This is the PRIMARY GOAL of this recipe.
|
||||
|
||||
Execute this standup report generation workflow (fetch everything from GitHub):
|
||||
|
||||
## Phase 1: Context Gathering & User Identification
|
||||
|
||||
1. **Read previous standup reports for context:**
|
||||
- Check if ./standup/ directory exists (if not, create it)
|
||||
- Scan for previous standup files matching pattern: ./standup/standup-*.{{ output_format }}
|
||||
- Read the most recent 3-5 standup files (by date) to understand:
|
||||
* What was accomplished in previous standups
|
||||
* Ongoing tasks and their progress
|
||||
* Previously mentioned blockers and their status
|
||||
- Use this context to show progress continuity in today's report
|
||||
|
||||
2. **Identify the authenticated GitHub user:**
|
||||
- The GitHub MCP server authenticates using OAuth
|
||||
- When you fetch PRs and issues, the API returns data for the authenticated user
|
||||
- Note: You'll need to filter results to show only items where the authenticated user is the author or assignee
|
||||
|
||||
## Phase 2: Fetch PRs from GitHub
|
||||
|
||||
{% if include_prs == "true" %}
|
||||
3. **Fetch PRs from GitHub:**
|
||||
- Use GitHub extension tool `list_pull_requests` with these parameters:
|
||||
* owner: {{ github_owner }}
|
||||
* repo: {{ github_repo }}
|
||||
* state: all (to get both open and closed PRs)
|
||||
* per_page: 100 (maximum allowed)
|
||||
* page: 1
|
||||
{% if time_period == "24h" %}
|
||||
- After fetching, filter PRs updated in last 24 hours by checking the `updated_at` timestamp
|
||||
{% elif time_period == "48h" %}
|
||||
- After fetching, filter PRs updated in last 48 hours by checking the `updated_at` timestamp
|
||||
{% elif time_period == "week" %}
|
||||
- After fetching, filter PRs updated in last week by checking the `updated_at` timestamp
|
||||
{% endif %}
|
||||
- **IMPORTANT**: Filter to show only PRs where the authenticated user is the author (check PR.user field)
|
||||
- Categorize by status:
|
||||
* ✅ Merged (shows completed work - check if `merged_at` is not null)
|
||||
* ✅ Ready to merge (check review_decision field for 'APPROVED' and mergeable_state)
|
||||
* 👀 Awaiting review (no reviews yet or review count is 0)
|
||||
* 🔄 In review (has reviews, may need changes based on review state)
|
||||
* 🚧 Blocked (has conflicts or failing checks - check mergeable field)
|
||||
- For merged PRs, you can use `get_pull_request` tool to get detailed commit information if needed
|
||||
{% endif %}
|
||||
|
||||
## Phase 3: Fetch Issues from GitHub
|
||||
|
||||
{% if include_issues == "true" %}
|
||||
4. **Fetch issues from GitHub:**
|
||||
- Use GitHub extension tool `list_issues` with these parameters:
|
||||
* owner: {{ github_owner }}
|
||||
* repo: {{ github_repo }}
|
||||
* state: all (to get both open and closed issues)
|
||||
* per_page: 100 (maximum allowed)
|
||||
* page: 1
|
||||
- **IMPORTANT**: Filter to show only issues where the authenticated user is either:
|
||||
* The assignee (check assignees array)
|
||||
* The creator (check user field)
|
||||
- Filter by activity in {{ time_period }} by checking `updated_at` timestamp
|
||||
- Categorize:
|
||||
* ✅ Closed (state is 'closed' and closed within the time period)
|
||||
* 🔄 In progress (state is 'open' and recently updated)
|
||||
* 🆕 Created (state is 'open' and created within the time period)
|
||||
{% endif %}
|
||||
|
||||
## Phase 4: Identify Blockers
|
||||
|
||||
5. **Identify blockers:**
|
||||
- For open PRs:
|
||||
* Use `get_pull_request_status` tool to check for failing CI/CD checks
|
||||
* Check the `mergeable` field - if false, there are merge conflicts
|
||||
* Check review state - if "CHANGES_REQUESTED", it needs updates
|
||||
- For open issues:
|
||||
* Look for "blocked" label in the labels array
|
||||
* Search comments for keywords like "blocked", "waiting", "dependency"
|
||||
- Summarize each blocker with:
|
||||
* What is blocked (PR# or Issue#)
|
||||
* Why it's blocked
|
||||
* What's needed to unblock
|
||||
|
||||
## Phase 5: Generate Report
|
||||
|
||||
6. **Create the standup report:**
|
||||
|
||||
{% if output_format == "markdown" %}
|
||||
Write a Markdown report with:
|
||||
- **Header**: Date, Repository ({{ github_owner }}/{{ github_repo }})
|
||||
- **✅ Completed**: Merged PRs and closed issues from {{ time_period }}
|
||||
{% if include_prs == "true" %}
|
||||
- **🔄 Open PRs**: Current status of open PRs
|
||||
{% endif %}
|
||||
{% if include_issues == "true" %}
|
||||
- **📋 Active Issues**: Issues you're working on
|
||||
{% endif %}
|
||||
- **🎯 Next Steps**: Based on open PRs and issues
|
||||
- **🚧 Blockers**: List or "None"
|
||||
{% elif output_format == "slack" %}
|
||||
Write Slack format with Completed, Today, Blockers sections
|
||||
{% elif output_format == "json" %}
|
||||
Write JSON with: date, repo, merged_prs[], closed_issues[], open_prs[], open_issues[], blockers[]
|
||||
{% else %}
|
||||
Write plain text with clear sections
|
||||
{% endif %}
|
||||
|
||||
## Phase 6: Save Report
|
||||
|
||||
6. **Save the file:**
|
||||
- Ensure the ./standup/ directory exists (create if needed)
|
||||
- **MUST DO**: Use the developer extension's file writing capability to create the file `./standup/standup-{date}.{{ output_format }}`
|
||||
- The file must contain the complete standup report generated above
|
||||
- Do NOT store summaries in memory - the file system is the source of truth
|
||||
- Display confirmation message: "✅ Report saved: ./standup/standup-{date}.{{ output_format }}"
|
||||
- Include file location in the confirmation
|
||||
Reference in New Issue
Block a user