Files
PowerToys/.github/skills/release-note-generation/references/step1-collection.md
Gordon Lam 5422bc31bb docs(prompts): Enhance release notes generation and implement GitHub issue tools (#44762)
<!-- Enter a brief description/summary of your PR here. What does it
fix/what does it change/how was it tested (even manually, if necessary)?
-->
## Summary of the Pull Request
This update improves the release notes generation process by
restructuring documentation for clarity and enhancing workflows. It
introduces new tools for handling GitHub issue images and attachments,
along with automated tests to ensure functionality.

<!-- Please review the items on the PR checklist before submitting-->
## PR Checklist

- [ ] Closes: N/A
- [ ] **Communication:** I've discussed this with core contributors
already. If the work hasn't been agreed, this work might be rejected
- [x] **Tests:** Added/updated and all pass
- [ ] **Localization:** All end-user-facing strings can be localized
- [x] **Dev docs:** Added/updated
- [ ] **New binaries:** Added on the required places
- [ ] [JSON for
signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json)
for new binaries
- [ ] [WXS for
installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs)
for new binaries and localization folder
- [ ] [YML for CI
pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml)
for new test projects
- [ ] [YML for signed
pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml)
- [x] **Documentation updated:** If checked, please file a pull request
on [our docs
repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys)
and link it here: N/A

<!-- Provide a more detailed description of the PR, other things fixed,
or any additional comments/features here -->
## Detailed Description of the Pull Request / Additional comments
The changes include updates to the release notes summarization process
and workflow documentation for better clarity. New scripts for managing
PR diffs, grouping, and milestone assignments have been added.
Additionally, tools for downloading images and attachments from GitHub
issues have been implemented, ensuring a more streamlined process.

<!-- Describe how you validated the behavior. Add automated tests
wherever possible, but list manual validation steps taken as well -->
## Validation Steps Performed
Automated tests were added for the new GitHub issue tools, and all tests
passed successfully. Manual validation included testing the new
workflows and ensuring the documentation accurately reflects the changes
made.
```
2026-01-21 16:18:57 +08:00

5.2 KiB

Step 1: Collection and Milestones

1.0 To-do

  • 1.0.1 Generate MemberList.md (REQUIRED)
  • 1.1 Collect PRs
  • 1.2 Assign Milestones (REQUIRED)

Required Variables

⚠️ Before starting, confirm these values with the user:

Variable Description Example
{{ReleaseVersion}} Target release version 0.97
{{PreviousReleaseTag}} Previous release tag from releases page v0.96.1

If user hasn't specified {{ReleaseVersion}}, ASK: "What release version are we generating notes for? (e.g., 0.97)"

{{PreviousReleaseTag}} is derived from the releases page, not user input. Use the latest published release tag (top of the page). You will use its tag name and tag commit SHA in Step 1.


1.0.1 Generate MemberList.md (REQUIRED)

Create Generated Files/ReleaseNotes/MemberList.md from the PowerToys core team section in COMMUNITY.md.

Rules:

  • One GitHub username per line, no @ prefix.
  • Use the usernames exactly as listed in the core team section.
  • Do not include former team members or other sections.

Example (format only):

example-user
another-user

1.1 Collect PRs

1.1.1 Get the previous release commit

  1. Open the PowerToys releases page
  2. Find the latest release (e.g., v0.96.1, which should be at the top)
  3. Set {{PreviousReleaseTag}} to that tag name (e.g., v0.96.1)
  4. Copy the full tag commit SHA as {{SHALastRelease}}

If the release SHA is not in your branch history: Use the helper script to find an equivalent commit on the target branch by matching the commit title:

pwsh ./.github/skills/release-note-generation/scripts/find-commit-by-title.ps1 `
    -Commit '{{SHALastRelease}}' `
    -Branch 'stable'

1.1.2 Run collection script against stable branch

# Collect PRs from previous release to current HEAD of stable branch
pwsh ./.github/skills/release-note-generation/scripts/dump-prs-since-commit.ps1 `
    -StartCommit '{{SHALastRelease}}' `
    -Branch 'stable' `
    -OutputDir 'Generated Files/ReleaseNotes'

Parameters:

  • -StartCommit - Previous release tag or commit SHA (exclusive)
  • -Branch - Always use stable branch, not main (script uses origin/stable as the end ref)
  • -EndCommit - Optional override if you need a custom end ref
  • -OutputDir - Output directory for generated files

Reliability check: If the script reports “No commits found”, the stable branch has not moved since the last release. In that case, either:

  • Confirm this is expected and stop (no new release notes), or
  • Re-run against main to gather pending changes for the next release cycle.

The script detects both merge commits (Merge pull request #12345) and squash commits (Feature (#12345)).

Output (in Generated Files/ReleaseNotes/):

  • milestone_prs.json - raw PR data
  • sorted_prs.csv - sorted PR list with columns: Id, Title, Labels, Author, Url, Body, CopilotSummary, NeedThanks

1.2 Assign Milestones (REQUIRED)

Before generating release notes, ensure all collected PRs have the correct milestone assigned.

⚠️ CRITICAL: Do NOT proceed to labeling until all PRs have milestones assigned.

1.2.1 Check current milestone status (dry run)

# Dry run first to see what would be changed:
pwsh ./.github/skills/release-note-generation/scripts/collect-or-apply-milestones.ps1 `
    -InputCsv 'Generated Files/ReleaseNotes/sorted_prs.csv' `
    -OutputCsv 'Generated Files/ReleaseNotes/prs_with_milestone.csv' `
    -DefaultMilestone 'PowerToys {{ReleaseVersion}}' `
    -ApplyMissing -WhatIf

This queries GitHub for each PR's current milestone and shows which PRs would be updated.

1.2.2 Apply milestones to PRs missing them

# Apply for real:
pwsh ./.github/skills/release-note-generation/scripts/collect-or-apply-milestones.ps1 `
    -InputCsv 'Generated Files/ReleaseNotes/sorted_prs.csv' `
    -OutputCsv 'Generated Files/ReleaseNotes/prs_with_milestone.csv' `
    -DefaultMilestone 'PowerToys {{ReleaseVersion}}' `
    -ApplyMissing

Script Behavior:

  • Queries each PR's current milestone from GitHub
  • PRs that already have a milestone are skipped (not overwritten)
  • PRs missing a milestone get the default milestone applied
  • Outputs prs_with_milestone.csv with (Id, Milestone) columns
  • Produces summary: Updated=X Skipped=Y Failed=Z

Validation: After assignment, all PRs in prs_with_milestone.csv should have the target milestone.


Additional Commands

Collect milestones only (no changes to GitHub)

pwsh ./.github/skills/release-note-generation/scripts/collect-or-apply-milestones.ps1 `
    -InputCsv 'Generated Files/ReleaseNotes/sorted_prs.csv' `
    -OutputCsv 'Generated Files/ReleaseNotes/prs_with_milestone.csv'

Local assignment only (fill blanks in CSV, no GitHub changes)

pwsh ./.github/skills/release-note-generation/scripts/collect-or-apply-milestones.ps1 `
    -InputCsv 'Generated Files/ReleaseNotes/sorted_prs.csv' `
    -OutputCsv 'Generated Files/ReleaseNotes/prs_with_milestone.csv' `
    -DefaultMilestone 'PowerToys {{ReleaseVersion}}' `
    -LocalAssign