mirror of
https://github.com/microsoft/PowerToys
synced 2025-08-22 01:58:04 +00:00
<!-- 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 These appear in every PR  Resolve all spelling issues that were generating excessive noise in PRs. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] **Closes:** #xxx - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **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) - [ ] **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: #xxx <!-- 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 <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed
6.7 KiB
6.7 KiB
PowerToys Release Process
This document outlines the process for preparing and publishing PowerToys releases.
Release Preparation
Branch Management
-
Sync commits from main branch to stable branch
- Usually sync current main to stable
- For hotfixes: might need to cherry-pick specific commits
-
Start release build from the stable branch
- Use pipelines to build
- Set version number (e.g., 0.89.0)
- Build for both x64 and ARM64
- Build time: ~1-2 hours (signing can take extra time)
- Build can be flaky, might need multiple attempts
-
Artifacts from the build:
- ARM64 release files
- PowerToys setup for ARM64 (machine setup)
- User setup
- X64 release files
- PowerToys setup for x64 (machine setup)
- User setup
- GPO files (same for both architectures)
- Hash files for verification
- Symbols that are shipped with every release
- ARM64 release files
Versioning
- Uses semantic versioning:
MAJOR.MINOR.PATCH
- MINOR version increases with regular releases (e.g., 0.89.0)
- PATCH version increases for hotfixes (e.g., 0.87.0 → 0.87.1)
- Each release version must be greater than the previous one for proper updating
Testing Process
Release Candidate Testing
-
Fully test the builds using a checklist
- Manual tests for each release
- Each test item should be verified by at least 2 people
- Test on both x64 and ARM64 machines
- Every module is tested by at least two people
- New team members typically take 2 days for complete testing
- Experienced team members complete testing in less than a day (~2 hours for 1/3 of tests)
-
For subsequent Release Candidates:
- Full retesting of modules with changes
- Verifying specific fixes
- Sanity checking all utilities (ensuring no startup crashes)
-
If regressions found:
- Fix issues
- Return to step 1 (sync fixes to stable and build again)
Testing Workflow
- Team divides the test checklist among members
- Each member performs assigned tests
- Members report any issues found
- Team assesses if issues are release blockers
- Team confirms testing completion before proceeding
Reporting Bugs During Testing
- Discuss in team chat
- Determine if it's a regression (check if bug exists in previous version)
- Check if an issue is already open
- Open a new issue if needed
- Decide on criticality for the release (if regression)
Sign-off Process
- Teams sign off on modules independently
- Regressions found in first release candidates lead to PRs
- Second release candidate verified fixes
- Final verification ensures modules don't crash with new features
Documentation and Changelog
README Updates
- Create PR with README updates for the release:
- Add new utilities to the list if applicable
- Update milestones
- Update expected download links
- Upload new hashes
- Update version and month
- Write highlights of important changes
- Thank open source contributors
- Don't thank internal team members or Microsoft employees assigned to the project
- Exception: thank external helpers like Niels (UI contributions)
Changelog Creation
- Changelog PR should be created several days before release
- Community members need time to comment and request changes
- Project managers need time to review and clean up
- When team testing is set, either tests are done or changelog is created right away
Changelog Structure
-
General section:
- Issues/fixes not related to specific modules
- User-visible changes
- Important package updates (like .NET packages)
- Fixes that affect end users
-
Development section:
- CI-related changes
- Changes not visible to end users
- Performance improvements internal to the system
- Refactoring changes
- Logger updates and other developer-focused improvements
Formatting Notes
- Special attention needed for "highlights" section
- Different format is required for highlights in README versus release notes
- Must follow the exact same pattern/format for proper processing
- PowerToys pulls "What's New" information from the GitHub API
- Gets changelog from the latest 5 releases
- Format must be consistent for the PowerToys code to properly process it
- Code behind will delete everything between certain markers (installer hashes and highlights)
Documentation Changes
- Public docs appear on the web
- Changes happen in the Microsoft Docs repo: microsoft/windows-dev-docs
- For help with docs, contact Alvin Ashcraft from Microsoft
- Content automatically appears on learn.microsoft.com when PR is merged
GitHub Release Process
Creating the Release
-
Ask the project management team to start a GitHub release draft
- Draft should target stable branch
- Use proper version format (e.g., V 0.89.0)
- Set title using same format (e.g., "Release V 0.89.0")
-
After testing is complete:
- Pick up the hashes from artifacts
- Apply changelog
- Fill in release notes
- Upload binaries
- GPO files
- Setup files
- ZIP files with symbols
- Only press "Save Draft", don't publish yet
-
Final verification:
- Download every file from the draft
- Check that ZIPs can be unzipped
- Verify hashes match expectations
- Tell the project management team the release is good to go
- They will handle the actual publishing
Post-Release Actions
- GitHub Actions automatically trigger:
- Store submission
- WinGet submission
- Monitor these actions to ensure they complete successfully
- If something fails, action may need to be taken
Release Decision Making
Timing Considerations
- Release owner should coordinate with project managers
- Project managers have high-level view of what should be included in the release
- Use the "in for .XX" tag to identify PRs that should be included
- If a key feature isn't ready, discuss with PMs whether to delay the release
Release Coordination
- Release coordination requires good communication with domain feature owners
- Coordination needed with project managers and key feature developers
- Release candidate can only be done once key features have been merged
- Need to ensure all critical fixes are included before the release candidate
Special Cases
Hotfix Process
- For critical issues found after release
- Create a hotfix branch from the stable branch
- Cherry-pick only essential fixes
- Increment the PATCH version (e.g., 0.87.0 → 0.87.1)
- Follow the standard release process but with limited testing scope
Community Testing
- Community members generally don't have access to draft builds
- Exception: Some Microsoft MVPs sometimes test ARM64 builds
- If providing builds to community members, use a different version number (e.g., 0.1.x) to avoid installer conflicts