<< All versions

Skill v1.0.0

currentTrusted Publisher100/100
microsoft/rayfin/hotfix-release
──Details
PublishedOctober 10, 2026 at 08:44 AM
Content Hashsha256:56416fc49e2b4154...
Git SHA
──Files
Files (1 file, 4.0 KB)
SKILL.md4.0 KBactive
SKILL.md · 138 lines · 4.0 KB

version: "1.0.0" name: hotfix-release description: >- Create a hotfix release branch, cherry-pick commits, bump the version, and open a draft PR. Use when: hotfix, patch release, cherry-pick to release, hotfix nuget, hotfix npm, release branch fix, backport fix. license: MIT metadata: author: rayfin version: "1.0"


Create a hotfix release for a previously published NuGet or npm package.

Input: The user provides:

  • Package type: nuget or npm
  • Version to patch: The published version to hotfix (e.g., 0.0.45 for NuGet, 1.31.0 for npm)
  • Commits to cherry-pick: One or more commit SHAs, PR numbers, or branch names containing the fix

If any input is missing, use the AskUserQuestion tool to collect it:

  • If package type is unclear, ask: nuget or npm?
  • If version is missing, list recent tags with git tag -l "nuget/v*" --sort=-version:refname | head -10 (or npm/v*) and let the user pick
  • If commits are missing, ask for the commit SHAs or PR numbers to cherry-pick

Steps

1. Validate the tag exists

bash
git fetch origin --tags
git rev-parse "{{type}}/v{{version}}" >/dev/null 2>&1

If the tag doesn't exist, stop and tell the user. List available tags for that package type to help them.

2. Determine the hotfix version

NuGet: Use 4-part versioning. Check for existing hotfix tags:

bash
git tag -l "nuget/v{{version}}.*" --sort=-version:refname
  • If no prior hotfix: new version is {{version}}.1
  • If {{version}}.N exists: new version is {{version}}.N+1

npm: Use semver patch bump. Parse the version parts and increment patch:

  • 1.31.0 → 1.31.1
  • If npm/v1.31.1 exists, use 1.31.2, etc.

Announce the computed hotfix version to the user before proceeding.

3. Create the release branch

bash
git checkout -b release/{{type}}-v{{version}} {{type}}/v{{version}}
git push origin release/{{type}}-v{{version}}

4. Create the fix branch and cherry-pick

bash
git checkout -b fix/hotfix-{{type}}-v{{hotfix_version}} release/{{type}}-v{{version}}

Cherry-pick each provided commit:

bash
git cherry-pick {{commit_sha}}

If a cherry-pick conflicts:

  1. Show the conflicting files to the user
  2. Ask them to resolve
  3. After resolution, run git cherry-pick --continue

5. Bump the version

NuGet: Edit packages/host/Version.props — set <VersionPrefix> to the hotfix version:

xml
<VersionPrefix>{{hotfix_version}}</VersionPrefix>

npm: Edit packages/typescript-sdk/core/package.json and any other affected packages — set "version" to the hotfix version. Rush version policies apply to all packages in the typescript-sdk policy, so update each affected package.

6. Commit the version bump

bash
git add -A
git commit -m "chore(host): bump {{type}} version to {{hotfix_version}} for hotfix" --no-verify

7. Push and create a draft PR

bash
git push origin fix/hotfix-{{type}}-v{{hotfix_version}}

Create a draft PR targeting release/{{type}}-v{{version}} (not main):

  • Title: fix({{type}}): hotfix v{{hotfix_version}}
  • Body: List the cherry-picked commits and the version bump
  • Draft: true

8. Summary

After creating the PR, print a summary:

✅ Hotfix prepared
Package type: {{type}}
Base version: {{version}}
Hotfix version: {{hotfix_version}}
Release branch: release/{{type}}-v{{version}}
Fix branch: fix/hotfix-{{type}}-v{{hotfix_version}}
PR: {{pr_url}}
Next steps:
1. Review and merge the PR
2. Queue the rayfin.official pipeline on release/{{type}}-v{{version}}
- Set Publish{{Type}}: true
3. Pipeline will publish and tag {{type}}/v{{hotfix_version}}

Error Handling

  • Tag not found: List available tags and ask the user to pick the correct version
  • Cherry-pick conflict: Show conflicting files, let the user resolve, then continue
  • Branch already exists: Ask the user if they want to use the existing branch or create a new one
  • Version already tagged: Increment to the next available revision and confirm with the user
All versions