ONNX Runtime Release Notes
Use this skill to produce a consistent release-note draft from commit history and contributor metadata.
When To Use
Use this skill when you need to:
- Draft release notes for a full ONNX Runtime release
- Draft release notes for a scoped component (e.g., in-tree plugin EP) release
- Select a release profile by preset name instead of manually supplying path/version files
- Add PR links to highlight bullets
- Build a human-only contributor acknowledgment list from contributor metadata
Required Inputs
Collect these inputs from the user or infer from context:
preset: release profile name (for example, ort, webgpu-plugin-ep, cuda-plugin-ep)
base_ref: previous release tag
target_ref: release commit/tag/branch tip
Optional inputs:
version override
output_dir override
Presets
Read preset definitions from presets.json.
The config defines shared output defaults:
outputDirPattern
draftFileName
Each preset defines:
displayName: reader-facing product or component name
versionFile
pathsFile (nullable): file of git pathspecs to filter to, one per line. Use :(top) to anchor an entry at repo root.
Example presets:
ort (full ONNX Runtime)
webgpu-plugin-ep (scoped WebGPU Plugin EP)
cuda-plugin-ep (scoped CUDA Plugin EP)
CUDA Plugin EP Scope
The cuda-plugin-ep preset uses the pathspecs in plugin-ep-cuda/paths.txt to scope release-note changes.
Workflow
- Determine release mode.
- Select preset and load configuration from presets.json.
- Use the preset's
displayName whenever the release-note content names the product or component. The preset
key is internal and must not appear in published content.
- If preset has
pathsFile, run in scoped mode. Otherwise run full mode.
- Resolve version, in this order:
- explicit
version input
- value from preset
versionFile
- Resolve output directory, referred to as
resolved_output_dir after this step.
The output directory contains contributor artifacts and the release notes draft.
Resolve it in this order:
- explicit
output_dir input
- shared
outputDirPattern rendered with preset name and resolved version
- Gather metadata.
- If the output directory is missing or lacks contributor artifacts, generate them with
tools/python/compile_contributors.py.
- Generation can take a while because it scans commit history and fetches PR metadata.
- Use
--paths-file only when preset has a pathsFile.
- If existing contributor artifacts are reused, verify
resolved_output_dir/logs.txt matches base/target before trusting them.
- Read
resolved_output_dir/detail.csv as the primary source for PR numbers, titles, authors, target commits, and cherry-pick mapping.
- Use
resolved_output_dir/logs.txt for contributor summary context and base/target verification.
- Use
git log only as a fallback sanity check when artifacts are present but incomplete or suspect.
- Check PRs with unexpectedly large author lists for rebased history that imported unrelated commits. Replace those
authors with the actual PR author or authors before building contributor acknowledgments; do not credit authors
solely because they authored an unrelated imported commit. For example, PR #28299, the rebased history contains unrelated commits and co-author metadata.
- Build highlight categories.
- Full ORT example categories: performance, model/operator support, execution providers, API/languages,
reliability/security, build/packaging/tooling, docs/dev workflow.
- Scoped mode: narrow categories to the component domain.
- Draft markdown.
- Write the release-note draft to
resolved_output_dir/<draftFileName>.
- Contents:
- Intro sentence
## Highlights
- Inline PR links on every highlight bullet
## Contributors
- Optional scope note for scoped-component releases
- Use the preset's reader-facing
displayName, not the internal preset key.
- Describe the scope in reader-facing terms, such as "commits affecting WebGPU Plugin EP code and
packaging."
- AI disclaimer if AI drafted
- Do not mention presets,
pathsFile, configuration files, or other release-note-generation implementation
details in the release-note content.
- Do not refer to the release notes as a "draft" in their content. "Draft" is only an internal workflow
and file-naming concept.
- Build contributors section.
- Start from
detail.csv output
- Include humans only
- Exclude bots/agents (for example:
github-actions[bot], app/copilot-swe-agent, claude)
- Sort alphabetically
- Validate draft quality.
- Every highlight bullet has at least one PR link
- PRs are traceable to metadata or git history
- Contributor list is human-only and alphabetical
- Scope is correct for full vs component release
PowerShell Command Patterns
compile_contributors.py
Full ORT metadata:
python .\tools\python\compile_contributors.py \
--base <previous_tag> \
--target <target_ref> \
--dir <resolved_output_dir>
Scoped metadata:
python .\tools\python\compile_contributors.py \
--base <previous_tag> \
--target <target_ref> \
--dir <resolved_output_dir> \
--paths-file <paths_file>
Style and Policy
Default policy unless release owners override:
- Treat the range as changes since the previous release.
- Keep PR links inline with highlight claims.
- Keep contributor acknowledgments human-only and best effort.
- Include an AI disclaimer when highlights are AI drafted.
- Use GitHub Releases pages as preferred style references.
E.g., ORT 1.28 release page.
- Prefer preset-driven configuration over ad-hoc path/version arguments.
- Use a single
output_dir for contributor artifacts, logs, and the release-note draft.
1---2name: ort-release-notes3description: Draft ONNX Runtime release notes using preset configurations for full ORT or scoped component releases. Use when generating highlights with PR links, compiling human contributor acknowledgments from compile_contributors.py output, and applying preset path filtering.4---56# ONNX Runtime Release Notes78Use this skill to produce a consistent release-note draft from commit history and contributor metadata.910## When To Use1112Use this skill when you need to:1314- Draft release notes for a full ONNX Runtime release15- Draft release notes for a scoped component (e.g., in-tree plugin EP) release16- Select a release profile by preset name instead of manually supplying path/version files17- Add PR links to highlight bullets18- Build a human-only contributor acknowledgment list from contributor metadata1920## Required Inputs2122Collect these inputs from the user or infer from context:23241. `preset`: release profile name (for example, `ort`, `webgpu-plugin-ep`, `cuda-plugin-ep`)252. `base_ref`: previous release tag263. `target_ref`: release commit/tag/branch tip2728Optional inputs:2930- `version` override31- `output_dir` override3233## Presets3435Read preset definitions from [presets.json](./presets.json).3637The config defines shared output defaults:38391. `outputDirPattern`402. `draftFileName`4142Each preset defines:43441. `displayName`: reader-facing product or component name452. `versionFile`463. `pathsFile` (nullable): file of git pathspecs to filter to, one per line. Use `:(top)` to anchor an entry at repo root.4748Example presets:49501. `ort` (full ONNX Runtime)512. `webgpu-plugin-ep` (scoped WebGPU Plugin EP)523. `cuda-plugin-ep` (scoped CUDA Plugin EP)5354### CUDA Plugin EP Scope5556The `cuda-plugin-ep` preset uses the pathspecs in `plugin-ep-cuda/paths.txt` to scope release-note changes.5758## Workflow59601. Determine release mode.61 - Select preset and load configuration from [presets.json](./presets.json).62 - Use the preset's `displayName` whenever the release-note content names the product or component. The preset63 key is internal and must not appear in published content.64 - If preset has `pathsFile`, run in scoped mode. Otherwise run full mode.652. Resolve version, in this order:66 1. explicit `version` input67 2. value from preset `versionFile`683. Resolve output directory, referred to as `resolved_output_dir` after this step.69 The output directory contains contributor artifacts and the release notes draft.70 Resolve it in this order:71 1. explicit `output_dir` input72 2. shared `outputDirPattern` rendered with preset name and resolved version734. Gather metadata.74 - If the output directory is missing or lacks contributor artifacts, generate them with75 `tools/python/compile_contributors.py`.76 - Generation can take a while because it scans commit history and fetches PR metadata.77 - Use `--paths-file` only when preset has a `pathsFile`.78 - If existing contributor artifacts are reused, verify `resolved_output_dir/logs.txt` matches base/target before trusting them.795. Read `resolved_output_dir/detail.csv` as the primary source for PR numbers, titles, authors, target commits, and cherry-pick mapping.80 - Use `resolved_output_dir/logs.txt` for contributor summary context and base/target verification.81 - Use `git log` only as a fallback sanity check when artifacts are present but incomplete or suspect.82 - Check PRs with unexpectedly large author lists for rebased history that imported unrelated commits. Replace those83 authors with the actual PR author or authors before building contributor acknowledgments; do not credit authors84 solely because they authored an unrelated imported commit. For example, PR #28299, the rebased history contains unrelated commits and co-author metadata.856. Build highlight categories.86 - Full ORT example categories: performance, model/operator support, execution providers, API/languages,87 reliability/security, build/packaging/tooling, docs/dev workflow.88 - Scoped mode: narrow categories to the component domain.897. Draft markdown.90 - Write the release-note draft to `resolved_output_dir/<draftFileName>`.91 - Contents:92 - Intro sentence93 - `## Highlights`94 - Inline PR links on every highlight bullet95 - `## Contributors`96 - Optional scope note for scoped-component releases97 - Use the preset's reader-facing `displayName`, not the internal preset key.98 - Describe the scope in reader-facing terms, such as "commits affecting WebGPU Plugin EP code and99 packaging."100 - AI disclaimer if AI drafted101 - Do not mention presets, `pathsFile`, configuration files, or other release-note-generation implementation102 details in the release-note content.103 - Do not refer to the release notes as a "draft" in their content. "Draft" is only an internal workflow104 and file-naming concept.1058. Build contributors section.106 - Start from `detail.csv` output107 - Include humans only108 - Exclude bots/agents (for example: `github-actions[bot]`, `app/copilot-swe-agent`, `claude`)109 - Sort alphabetically1109. Validate draft quality.111 - Every highlight bullet has at least one PR link112 - PRs are traceable to metadata or git history113 - Contributor list is human-only and alphabetical114 - Scope is correct for full vs component release115116## PowerShell Command Patterns117118### compile_contributors.py119120Full ORT metadata:121122```powershell123python .\tools\python\compile_contributors.py \124 --base <previous_tag> \125 --target <target_ref> \126 --dir <resolved_output_dir>127```128129Scoped metadata:130131```powershell132python .\tools\python\compile_contributors.py \133 --base <previous_tag> \134 --target <target_ref> \135 --dir <resolved_output_dir> \136 --paths-file <paths_file>137```138139## Style and Policy140141Default policy unless release owners override:1421431. Treat the range as changes since the previous release.1442. Keep PR links inline with highlight claims.1453. Keep contributor acknowledgments human-only and best effort.1464. Include an AI disclaimer when highlights are AI drafted.1475. Use GitHub Releases pages as preferred style references.148 E.g., [ORT 1.28 release page](https://github.com/microsoft/onnxruntime/releases/tag/v1.28.0).1496. Prefer preset-driven configuration over ad-hoc path/version arguments.1507. Use a single `output_dir` for contributor artifacts, logs, and the release-note draft.