Generate executive-ready sprint release notes by reading a GitHub Project Board (v2),
analyzing completed items, reading associated documentation, evaluating contributor performance,
and publishing a polished markdown release note to a designated repo.
Collect these from the user before starting:
https://github.com/orgs/{org}/projects/{number} or https://github.com/users/{user}/projects/{number}repo, read:org, project (read access to Projects v2)If any of these are missing, ask the user before proceeding.
The skill executes in 7 phases. Run them sequentially:
Read the reference file for the full GraphQL queries:
view /path/to/skill/references/github-queries.md
Use the GitHub GraphQL API (https://api.github.com/graphql) with the user's PAT token.
Step 1.1: Fetch the project ID from the board URL.
organization.projectV2(number: N) or user.projectV2(number: N)Step 1.2: Fetch iteration fields.
Step 1.3: Fetch all items in the current sprint iteration.
Separate items into:
Group by Repository:
Map> body)Also extract metadata:
v1.{sprint_number}.0For each completed item, gather context from the associated repository. This is the intelligence-gathering phase. Read the reference file for API patterns:
view /path/to/skill/references/github-queries.md
For each completed item:
3a. PR Descriptions & Commits
3b. Documentation Changes
/docs, README.md, or wiki-related pathsGET /repos/{owner}/{repo}/contents/{path}3c. README Files
README.md for overall project context3d. Labels & Metadata
Categorization heuristic for release notes sections:
Score each contributor who worked on completed items. Read the scoring reference:
view /path/to/skill/references/contributor-scoring.md
Collect per-contributor metrics:
Scoring formula:
Score = (PRs_merged × 2) + (lines_changed / 100) + (reviews_given × 3) + (bugs_fixed × 4) + (challenge_score × 5)
If scores are very close (within 10%), note both contributors.
For each repository group, generate a separate release notes document using the template below (this becomes the GitHub Release body).
Repository Mapping:
Use the exact template below. Replace all [placeholders] with real data. If a section has no items, write "No changes this sprint." instead of removing the section.
# 🚀 Sprint Release Notes: [Sprint Name/Number] - [Repo Name]
**Date:** [YYYY-MM-DD] | **Version:** v1.[sprint_number].0 | **Status:** Shipped | **Repository:** [repo_name]
---
## 🎯 Summary
[2-3 sentences: What was the primary objective for this repository? What shipped?]
---
## ✨ New Features
* **[Issue Title]**: [Short description of what changed].
---
## 🛠️ Infrastructure & Tech Debt
* **[Issue Title]**: [Description of work done].
---
## 🐛 Bug Fixes
* **[Issue Title]**: [Description of fix].
---
## 📊 Items Completed
- [ ] #[issue_number] [issue_title]
---
*Generated from GitHub Project Board - Sprint [sprint_name]*
For each repository that had completed items, publish the sprint markdown as that repo’s Release (the Releases page / releases/latest UI), not as a file in the tree.
Step 6.1: Derive the release tag and name from the sprint (aligned with Phase 2):
v1.[sprint_number].0 (same as the Version line in the template)Step 6.2: Resolve whether a release for that tag already exists:
GET /repos/{owner}/{repo}/releases/tags/v1.[sprint_number].0
id, update it (Step 6.4).Step 6.3: Create a new release (creates the tag on the default branch if the tag does not exist yet):
POST /repos/{owner}/{repo}/releases
JSON body (minimal):
tag_name: v1.[sprint_number].0target_commitish: the repo’s default branch (e.g. main)name: same as tag_name (or a short sprint title if the user prefers)body: the full markdown from Phase 5draft: falseprerelease: falseStep 6.4: Update an existing release’s notes and title flags:
PATCH /repos/{owner}/{repo}/releases/{release_id}
Example (curl; use the user’s PAT and API version header as appropriate):
curl -L -X PATCH \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/repos/OWNER/REPO/releases/RELEASE_ID \
-d '{
"name": "v1.2.3",
"body": "Updated release notes",
"draft": false,
"prerelease": false
}'
Step 6.5: Track each repo’s html_url from the create/update response for Phase 7 and the user summary.
Notes:
repo on private repos).Authorization: Bearer with Accept: application/vnd.github+json for REST calls; include X-GitHub-Api-Version when using calendar-dated API versions.body.If the user specifies a designated issue to post the summary:
Step 7.1: Collect all published release URLs (html_url from each create/update response).
Step 7.2: Use GitHub Issues API to add a comment:
POST /repos/{owner}/{repo}/issues/{issue_number}/comments
Comment template:
## 🚀 Sprint [sprint_number] Release Notes Published
Release notes have been published to each repository’s Releases:
| Repository | Release |
|------------|---------|
| [repo_1] | [release_link_1] |
| [repo_2] | [release_link_2] |
| ... | ... |
---
*Generated automatically from GitHub Project Board*
Step 7.3: Confirm success and provide the user with all published links.
project scope. Tell the user which scopes are needed.https://api.github.com — ensure network access is available共 1 个版本