Refresh ARM SDK Release Skill
When to Use This Skill
Activate only when the user wants an Azure.ResourceManager package refresh PR driven by API-version/tag resolution and dependency/changelog refresh updates.
Scope Boundaries
- Use this skill only for refresh-style updates (for example regenerated surface alignment, changelog maintenance, dependency version refresh, and refresh PR creation).
- Do not use this skill for broad or feature-driven package releases, release planning across multiple packages, or non-refresh release orchestration.
Prerequisites
- Repository: azure-sdk-for-net
- Target package path is known, for example sdk/dns/Azure.ResourceManager.Dns
- Access to remote origin and GitHub PR creation
- Current date available in yyyy-mm-dd format
Workflow
Step 1: Create Branch
- Fetch latest origin/main.
- Create a new branch from origin/main.
- Use a branch name that identifies package and date.
Step 2: Eligibility Check — Skip Conditions
Before doing any further work on a package, check the CHANGELOG.md and skip the package (do not refresh it) if either of the following is true:
- Already released: The latest changelog entry does NOT contain
(Unreleased) — it already has a release date (e.g., ## 1.2.0 (2026-04-17)). This means a release was already prepared and no new (Unreleased) entry exists to stamp.
- Dependencies already up to date: Any changelog entry (across all released versions, not just the latest) already contains upgrade lines for both the current
Azure.Core and Azure.ResourceManager versions (resolved from eng/centralpackagemanagement/Directory.Packages.props). If these exact versions were already shipped in any prior release, adding them again provides no value, so skip.
When skipping a package, log it clearly as SKIPPED with the reason, and move on to the next package in the batch.
Step 3: Determine API Version Source in Order
- Check metadata.json in the package root.
- If present, use apiVersions value.
- If metadata.json is missing, check src/autorest.md for an uncommented tag.
- If tag is missing there, use the require value in src/autorest.md to open the referenced readme.md and read tag under Basic Information.
Step 4: Decide SDK Versioning Mode
- If API version source indicates preview, use beta flow.
- Otherwise use stable flow.
Step 5: Update CHANGELOG.md
- Confirm the newest heading exists and has the latest package version.
- During release finalization, replace Unreleased with current date using yyyy-mm-dd.
- For stable flow only, determine the new stable version using this logic:
- Find the latest released version in the CHANGELOG — the first entry that does NOT have
(Unreleased).
- If the latest released version is stable (e.g.,
1.1.1): increment its patch to get the new version (e.g., 1.1.2).
- If the latest released version is beta (e.g.,
1.1.0-beta.7): strip the pre-release suffix to get the new version (e.g., 1.1.0). This handles promotion when the most recent work was done as beta.
- If no released version exists at all (every entry is Unreleased or the changelog is empty): use
1.0.0.
- Update the unreleased entry's heading to reflect the new stable version.
- Remove empty sections under the latest entry when present:
- Features Added
- Breaking Changes
- Bugs Fixed
- Under Other Changes, add:
- Upgraded dependent Azure.Core to 1.X.X.
- Upgraded dependent Azure.ResourceManager to 1.X.X.
- Always resolve these exact versions from
eng/centralpackagemanagement/Directory.Packages.props at the time of refresh — do not hardcode or cache version numbers, as they may change between batches.
Step 6: Update Project Version for Stable Flow Only
- If stable flow, set Version in src/Azure.ResourceManager.XXX.csproj to the new stable version matching the changelog entry.
- If beta flow, keep beta versioning and do not apply a version bump.
Step 6b: Update README for First Stable Release
- This applies only when there is no prior stable release in the CHANGELOG (only beta entries exist).
- Add the line
This is the first stable release of this library. immediately after the version heading (before any sections).
- Open
README.md in the package root and find the dotnet add package installation command.
- If it contains
--prerelease, remove that flag so the command installs the stable package.
- Example:
dotnet add package Azure.ResourceManager.XXX --prerelease → dotnet add package Azure.ResourceManager.XXX
Step 7: Commit, Push, and Create PR
- Commit with a refresh-focused message.
- Push branch to origin.
- Create PR with title format:
- Prepare release for Azure.ResourceManager.XXX Version 1.x.x
- Include summary of API source decision, refresh changes, and versioning mode.
Copyable Checklist
Refresh PR progress:
1---2name: refresh-arm-sdk-release3description: **WORKFLOW SKILL** — Prepares Azure.ResourceManager SDK refresh pull requests in azure-sdk-for-net. WHEN: "prepare sdk refresh", "refresh Azure.ResourceManager package", "update ARM SDK from autorest tag", "refresh changelog dependencies". INVOKES: git and GitHub pull request tools for branch, commit, push, and PR creation. FOR SINGLE OPERATIONS: Use git or GitHub tools directly.4---56# Refresh ARM SDK Release Skill78## When to Use This Skill9Activate only when the user wants an Azure.ResourceManager package refresh PR driven by API-version/tag resolution and dependency/changelog refresh updates.1011## Scope Boundaries12- Use this skill only for refresh-style updates (for example regenerated surface alignment, changelog maintenance, dependency version refresh, and refresh PR creation).13- Do not use this skill for broad or feature-driven package releases, release planning across multiple packages, or non-refresh release orchestration.1415## Prerequisites16- Repository: azure-sdk-for-net17- Target package path is known, for example sdk/dns/Azure.ResourceManager.Dns18- Access to remote origin and GitHub PR creation19- Current date available in yyyy-mm-dd format2021## Workflow2223### Step 1: Create Branch24- Fetch latest origin/main.25- Create a new branch from origin/main.26- Use a branch name that identifies package and date.2728### Step 2: Eligibility Check — Skip Conditions29Before doing any further work on a package, check the CHANGELOG.md and skip the package (do not refresh it) if **either** of the following is true:30311. **Already released**: The latest changelog entry does NOT contain `(Unreleased)` — it already has a release date (e.g., `## 1.2.0 (2026-04-17)`). This means a release was already prepared and no new `(Unreleased)` entry exists to stamp.322. **Dependencies already up to date**: **Any** changelog entry (across all released versions, not just the latest) already contains upgrade lines for **both** the current `Azure.Core` and `Azure.ResourceManager` versions (resolved from `eng/centralpackagemanagement/Directory.Packages.props`). If these exact versions were already shipped in any prior release, adding them again provides no value, so skip.3334When skipping a package, log it clearly as **SKIPPED** with the reason, and move on to the next package in the batch.3536### Step 3: Determine API Version Source in Order37- Check metadata.json in the package root.38- If present, use apiVersions value.39- If metadata.json is missing, check src/autorest.md for an uncommented tag.40- If tag is missing there, use the require value in src/autorest.md to open the referenced readme.md and read tag under Basic Information.4142### Step 4: Decide SDK Versioning Mode43- If API version source indicates preview, use beta flow.44- Otherwise use stable flow.4546### Step 5: Update CHANGELOG.md47- Confirm the newest heading exists and has the latest package version.48- During release finalization, replace Unreleased with current date using yyyy-mm-dd.49- For stable flow only, determine the new stable version using this logic:50 1. Find the latest **released** version in the CHANGELOG — the first entry that does NOT have `(Unreleased)`.51 2. If the latest released version is **stable** (e.g., `1.1.1`): increment its patch to get the new version (e.g., `1.1.2`).52 3. If the latest released version is **beta** (e.g., `1.1.0-beta.7`): strip the pre-release suffix to get the new version (e.g., `1.1.0`). This handles promotion when the most recent work was done as beta.53 4. If no released version exists at all (every entry is Unreleased or the changelog is empty): use `1.0.0`.54- Update the unreleased entry's heading to reflect the new stable version.55- Remove empty sections under the latest entry when present:56 - Features Added57 - Breaking Changes58 - Bugs Fixed59- Under Other Changes, add:60 - Upgraded dependent Azure.Core to 1.X.X.61 - Upgraded dependent Azure.ResourceManager to 1.X.X.62- **Always** resolve these exact versions from `eng/centralpackagemanagement/Directory.Packages.props` at the time of refresh — do not hardcode or cache version numbers, as they may change between batches.6364### Step 6: Update Project Version for Stable Flow Only65- If stable flow, set Version in src/Azure.ResourceManager.XXX.csproj to the new stable version matching the changelog entry.66- If beta flow, keep beta versioning and do not apply a version bump.6768### Step 6b: Update README for First Stable Release69- This applies only when there is **no prior stable release** in the CHANGELOG (only beta entries exist).70- Add the line `This is the first stable release of this library.` immediately after the version heading (before any sections).71- Open `README.md` in the package root and find the `dotnet add package` installation command.72- If it contains `--prerelease`, remove that flag so the command installs the stable package.73- Example: `dotnet add package Azure.ResourceManager.XXX --prerelease` → `dotnet add package Azure.ResourceManager.XXX`7475### Step 7: Commit, Push, and Create PR76- Commit with a refresh-focused message.77- Push branch to origin.78- Create PR with title format:79 - Prepare release for Azure.ResourceManager.XXX Version 1.x.x80- Include summary of API source decision, refresh changes, and versioning mode.8182## Copyable Checklist8384Refresh PR progress:85- [ ] Branch created from origin/main86- [ ] Eligibility checked — packages with no Unreleased entry or already-current deps skipped87- [ ] API version source resolved using required precedence88- [ ] Beta or stable mode decided89- [ ] Changelog latest entry updated90- [ ] Unreleased replaced with current date yyyy-mm-dd91- [ ] Dependency upgrade lines added using central package versions92- [ ] Csproj version updated if stable flow93- [ ] README --prerelease flag removed if first stable release (version 1.0.0)94- [ ] Commit and push completed95- [ ] PR created with required title format