azure/create-release
Use when creating a new ASO release, including pre-checks, release notes generation, draft GitHub release creation, documentation updates, and ROADMAP changes.
npx skills add https://github.com/Azure/azure-service-operator --skill create-release
This skill automates the end-to-end process of creating a new Azure Service Operator release. It runs pre-checks, generates release notes, creates a draft GitHub release, updates documentation, and opens a docs PR.
Determine the new version number by examining the latest release tag:
git describe --tags $(git rev-list --tags='v2*' --max-count=1) --match 'v2*'
If the latest tag is v2.19.0, the new version is v2.20.0 (increment the minor version).
All three pre-checks MUST pass before proceeding. If any check fails, STOP and report the failure. Do not continue with release creation.
Check the pre-release upgrade tests workflow:
gh run list --workflow=pre-release-tests.yaml --limit=1 -R Azure/azure-service-operator --json status,conclusion,createdAt,url
conclusion: successCheck the scan controller image workflow:
gh run list --workflow=scan-controller-image.yaml --limit=1 -R Azure/azure-service-operator --json status,conclusion,createdAt,url
conclusion: successCheck the experimental release:
gh release view experimental -R Azure/azure-service-operator --json tagName,createdAt,isDraft,isPrerelease,assets
If any pre-check fails, report which check failed, why, and provide the relevant URL. Do not proceed.
Invoke the create-release-notes skill (defined in .agents/skills/create-release-notes/SKILL.md) to generate polished release notes. This involves:
scripts/v2/generate-raw-changelog.sh to get the raw changelogscripts/v2/generate-raw-changelog.sh --api-only to identify API group changesSave the release notes to a temp file:
/tmp/aso-<VERSION>-release-notes.md
Use the scripts/v2/create-release.sh script to create a draft release:
scripts/v2/create-release.sh <VERSION> /tmp/aso-<VERSION>-release-notes.md
This creates a draft release on GitHub targeting the main branch. The release must be reviewed and published manually by a human.
Create a local branch and make the following changes:
currentRelease in config filesUpdate supportedResourcesReport.currentRelease to the new version in both:
v2/azure-arm.yamlhack/crossplane/azure-crossplane.yamlRun the code generators to update the resource documentation (moves resources from "Next Release" to "Released"):
./hack/tools/task controller:generate-types
./hack/tools/task crossplane:generate-types
./hack/tools/task doc:crd-api
Note: controller:generate-types takes ~5-7 minutes. doc:crd-api also runs controller:generate-types internally and takes ~10 minutes total. Set generous timeouts (900000ms+).
In ROADMAP.md:
Check if the milestone referenced by the new future version in the ROADMAP exists:
gh api repos/Azure/azure-service-operator/milestones --jq '.[] | "\(.number) \(.title)"'
If the milestone does not exist, create it following the pattern of existing milestones:
gh api repos/Azure/azure-service-operator/milestones -f title="v2.XX.0" -f description="" -f due_on="YYYY-MM-DDT00:00:00Z" -f state="open"
<user>/X.XX-docs (e.g. matthchr/2.20-docs)Update docs for <major>.<minor> (e.g. Update docs for 2.20)main in Azure/azure-service-operator with:Update docs for <major>.<minor> - [x] this PR contains documentation
- [ ] this PR contains tests
- [ ] this PR contains YAML Samples
At the end of the run, produce a summary report including:
docs/hugo/content/contributing/create-a-new-release.md)Take azure/create-release from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.