Release Manager (satellite)
Prepares a release branch for this repo. This is a light version of the core Umbraco.Automate
release-management skill — this repo has a single product, no changelog, and no release manifest,
so there is no version-bump analysis, cascade, or manifest generation to do.
Branch model
main = current CMS major line (v18)
support/17.x = previous CMS major line (v17)
Releases are cut as release/YYYY.MM.N branches. N is a single counter shared across both lines
in a given month (e.g. release/2026.07.1 for v18, release/2026.07.2 for v17 in the same month) —
not a separate counter per line.
Workflow
Ask which line to release using AskUserQuestion:
- v18 (from
main)
- v17 (from
support/17.x)
Fetch latest state:
git fetch origin --tags
Determine the next release number for the current month. Release branches are deleted after
merge-back (see /post-release-cleanup), so there is no live release/* branch or date-based tag
to list. Instead scan merge commit messages on both lines for this month's releases:
git log origin/main origin/support/17.x --merges --oneline \
--grep="Merge release/$(date +%Y.%m)\." -E
Find the highest N used this month across both lines and use N+1. If none this month, N=1.
Confirm the branch name with the user (default: computed name, e.g. release/2026.07.3).
Create and check out the release branch from the correct base:
git checkout -b release/<name> origin/main # v18
git checkout -b release/<name> origin/support/17.x # v17
Bump Directory.Packages.props: every PackageVersion for Umbraco.Automate, .Core, or
.Testing → range [X.0.0, X.999.999) where X is the target line's major version (18 or 17).
NuGet resolves a range to its floor, so this is what pulls the stable X.0.0 package rather than a
prerelease. Floating X.0.0-* does NOT work here — it resolves to the highest prerelease, never
the stable release. Leave product-dependency ranges (e.g. Umbraco.Commerce.Cms.Startup) untouched
— those are managed separately.
Bump version.json "version" → stable X.0.0 (drop any -beta/prerelease suffix).
Show the diff and commit:
git add Directory.Packages.props version.json
git commit -m "build(deps): Release v<X> against Umbraco.Automate <X>.0.0"
Report next steps:
✓ Created release branch: release/2026.07.3
✓ Bumped Directory.Packages.props + version.json to 18.0.0
Next steps:
- Push: git push -u origin release/2026.07.3
- CI (azure-pipelines.yml) validates on push (Build + Test + SBOM)
- Once green, manually push the package to MyGet
- Then run /post-release-cleanup to merge back, tag, and create the GitHub Release
Notes
- Always run from repository root.
- Do not add changelog generation, release manifests, or dependency cascade logic — none of that
exists in this repo, and adding it is out of scope for this skill.
- If
Directory.Packages.props has no matching Umbraco.Automate* entries for some reason, stop and
ask the user rather than guessing.
1---2name: release-management-33description: Creates a release branch for this Umbraco.Automate satellite - bumps the Directory.Packages.props Automate package ranges and version.json to a stable version for the chosen Umbraco CMS major line. Use when preparing a new release.4allowed-tools: Bash, Read, Edit, AskUserQuestion5---67# Release Manager (satellite)89Prepares a release branch for this repo. This is a **light** version of the core Umbraco.Automate10`release-management` skill — this repo has a single product, no changelog, and no release manifest,11so there is no version-bump analysis, cascade, or manifest generation to do.1213## Branch model1415- `main` = current CMS major line (**v18**)16- `support/17.x` = previous CMS major line (**v17**)1718Releases are cut as `release/YYYY.MM.N` branches. `N` is a single counter shared across **both** lines19in a given month (e.g. `release/2026.07.1` for v18, `release/2026.07.2` for v17 in the same month) —20not a separate counter per line.2122## Workflow23241. **Ask which line to release** using AskUserQuestion:25 - v18 (from `main`)26 - v17 (from `support/17.x`)27282. **Fetch latest state:**29 ```bash30 git fetch origin --tags31 ```32333. **Determine the next release number for the current month.** Release branches are deleted after34 merge-back (see `/post-release-cleanup`), so there is no live `release/*` branch or date-based tag35 to list. Instead scan merge commit messages on both lines for this month's releases:36 ```bash37 git log origin/main origin/support/17.x --merges --oneline \38 --grep="Merge release/$(date +%Y.%m)\." -E39 ```40 Find the highest `N` used this month across both lines and use `N+1`. If none this month, `N=1`.41424. **Confirm the branch name** with the user (default: computed name, e.g. `release/2026.07.3`).43445. **Create and check out the release branch** from the correct base:45 ```bash46 git checkout -b release/<name> origin/main # v1847 git checkout -b release/<name> origin/support/17.x # v1748 ```49506. **Bump `Directory.Packages.props`:** every `PackageVersion` for `Umbraco.Automate`, `.Core`, or51 `.Testing` → range `[X.0.0, X.999.999)` where `X` is the target line's major version (18 or 17).52 NuGet resolves a range to its floor, so this is what pulls the stable `X.0.0` package rather than a53 prerelease. Floating `X.0.0-*` does NOT work here — it resolves to the highest *prerelease*, never54 the stable release. Leave product-dependency ranges (e.g. `Umbraco.Commerce.Cms.Startup`) untouched55 — those are managed separately.56577. **Bump `version.json` `"version"`** → stable `X.0.0` (drop any `-beta`/prerelease suffix).58598. **Show the diff and commit:**60 ```bash61 git add Directory.Packages.props version.json62 git commit -m "build(deps): Release v<X> against Umbraco.Automate <X>.0.0"63 ```64659. **Report next steps:**66 ```67 ✓ Created release branch: release/2026.07.368 ✓ Bumped Directory.Packages.props + version.json to 18.0.06970 Next steps:71 - Push: git push -u origin release/2026.07.372 - CI (azure-pipelines.yml) validates on push (Build + Test + SBOM)73 - Once green, manually push the package to MyGet74 - Then run /post-release-cleanup to merge back, tag, and create the GitHub Release75 ```7677## Notes7879- Always run from repository root.80- Do not add changelog generation, release manifests, or dependency cascade logic — none of that81 exists in this repo, and adding it is out of scope for this skill.82- If `Directory.Packages.props` has no matching `Umbraco.Automate*` entries for some reason, stop and83 ask the user rather than guessing.