asp-mvvm-release
Skill65 starsChanged 19 days agoMITView on GitHub
Release an Aspid.MVVM version end to end. Phase 1 opens the release PR (version files, CHANGELOG section, local tests, Unity EditMode); the user merges it. Phase 2 pushes the v<version> tag after the user's yes and checks what the Release workflow published. The version alone picks the channel. - `/asp-mvvm-release 1.1.0-rc.1`, `/asp-mvvm-release 1.1.0`.
- Commits and pushes
In this repository9 other files it gives its agents.
- AGENTS.mdAGENTS.md
- asp-branchSkill
- asp-commitSkill
- aspid-code-styleSkill
- asp-prSkill
- docs-siteSkill
- starterkit-binder-authoringSkill
- starterkit-converter-authoringSkill
- starterkit-layoutSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
30 rules. About 0 are common, 10 are distinctive, and 20 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈10
Distinctive · estimate
This author's own choices. Worth a look.
20
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Distinctive: line 23
Run git fetch origin. Then pick the phase:
- Distinctive: line 33
Do every step without questions.
- Distinctive: line 35
Check that the working tree is clean.
- Very specific: line 36
Check that the version is greater than the package.json version on origin/main.
- Very specific: line 38
Create the branch: git switch -c chore/release-<version> origin/main.
- Very specific: line 39
Check the CHANGELOGs. set-version.sh releases the notes under ## [Unreleased] or under the version's own heading marked unreleased (## …
- Very specific: line 44
Run scripts/set-version.sh <version>.
- Very specific: line 45
Start two unity-verify agents in the background, with EditMode tests and no filter:
- Very specific: line 56
Run the local checks of .github/workflows/ci.yml:
- Distinctive: line 64
Put them into the report.
- Very specific: line 65
Wait for both unity-verify agents.
- Very specific: line 66
Commit with the asp-commit skill.
- Very specific: line 75
Ask the user in one message: the version, the channel, the commit SHA and subject.
- Distinctive: line 78
Wait for a clear yes. Any other answer → stop.
- Very specific: line 79
Create the tag: git tag -a v<version> -m "Release v<version>" <merge-sha>.
- Distinctive: line 83
No run yet → wait 10 seconds and try again.
- Very specific: line 84
Run gh run watch <id> --exit-status in the background.
- Very specific: line 91
Check the GitHub release: gh release view v<version> --json url,isPrerelease.
- Very specific: line 93
Check that refs/heads/<channel> and refs/tags/upm/<version> point to one commit: git ls-remote origin refs/heads/<channel> …
- Very specific: line 95
Check the package version on the channel: gh api 'repos/VPDPersonal/Aspid.MVVM/contents/package.json?ref=<channel>' --jq .content | base64 …
- Very specific: line 97
Check that the bundled CHANGELOG.md on the channel has the version's section: gh api …
- Distinctive: line 101
No milestone → say so in the report and skip step 9.
- Very specific: line 102
Stable: ask before you close the milestone.
- Very specific: line 108
Read the failed step: gh run view <id> --log-failed.
- Very specific: line 110
The job
Preflight, aCI / …job orreleasefailed: Only the v<version> tag is out: the push of the UPM branch and its tag is atomic. - Very specific: line 118
After the fix, ask before you delete the tag: git push origin :refs/tags/v<version>, git tag -d v<version>.
- Very specific: line 121
Run gh run rerun <id> --failed.
- Distinctive: line 122
Do not rerun the whole run: preflight would refuse the UPM tag that the first run already published.
- Distinctive: line 128
Put these items into the Phase 1 report.
- Distinctive: line 137
Write the report in Russian.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Release
The argument is the version, for example 1.1.0-rc.1. Remove a leading v. No argument → ask for the version.
Channel
The version picks the channel. It is the same rule as in scripts/set-version.sh and .github/workflows/release.yml.
- A version with a hyphen (
1.1.0-rc.1) →upm-preview: a GitHub prerelease. - A version without a hyphen (
1.1.0) →upm: a stable release. Only it has the steps marked Stable.
Both channels get an immutable upm/<version> tag, the pinned install URL of the README.
Which phase
Run git fetch origin. Then pick the phase:
- The tag
v<version>is on origin (git ls-remote --tags origin v<version>) → go to "Phase 3". - The
package.jsononorigin/mainhas the version → go to "Phase 2". - The PR from
chore/release-<version>is open (gh pr view chore/release-<version> --json state,url) → report its link and its checks, then stop. - Else → go to "Phase 1".
Phase 1: release PR
Do every step without questions. Stop at the first failure and report it.
- Check that the working tree is clean.
- Check that the version is greater than the
package.jsonversion onorigin/main. Use SemVer precedence:1.1.0-rc.10>1.1.0-rc.9, and1.1.0>1.1.0-rc.9. - Create the branch:
git switch -c chore/release-<version> origin/main. - Check the CHANGELOGs.
set-version.shreleases the notes under## [Unreleased]or under the version's own heading marked unreleased (## [1.1.0] — Unreleased,## [1.1.0] — Не выпущеноinDocs/i18n/ru/CHANGELOG.md). A prerelease of a line whose notes sit under the line's heading (1.1.0-rc.1under## [1.1.0] — Unreleased) needs its own section: write## [<version>] — <today>above the line's heading in both CHANGELOGs, with a short summary of the preview, in the style of the file. Keep the line's heading as it is. - Run
scripts/set-version.sh <version>. It ends withscripts/check-version.mjs. Start two
unity-verifyagents in the background, with EditMode tests and no filter:- a project from
scripts/make-unity-test-project.sh <scratchpad>/unity-min <minimum>, where<minimum>is the first version ofUNITY_VERSIONSin.github/workflows/ci.yml; - the dev project
Aspid.MVVM/of this checkout.
The
unity-verifyagent is user-level. Without it, run the batch command from the header ofscripts/make-unity-test-project.shfor both projects, in the background.The Editor of
<minimum>may not be installed (ls /Applications/Unity/Hub/Editor). Then use the oldest installed 6000.0.x and write that version in the report. No 6000.0.x Editor → skip the minimum project and write that in the report. The release workflow runs every version ofUNITY_VERSIONSanyway.- a project from
- Run the local checks of
.github/workflows/ci.yml:node --test scripts/*.test.mjsandnode scripts/check-package-files.mjs;- the
dotnet-testsjobs:dotnet test <path> --nologofor eachpathof its matrix; - the
roslyn-dllsjob:scripts/build-roslyn-dlls.sh, thengit status --short -- Aspid.MVVM/Packages/tech.aspid.mvvm.
- A DLL diff in step 7 means stale DLLs on
main. Rungit checkout --on the DLLs. Stop and report. - Find the old version in prose:
git grep -n -F '<old>' -- . ':!CHANGELOG.md' ':!Docs/i18n/ru/CHANGELOG.md' ':!scripts/'. Also look at the README install section (thePreview (1.1.0)summary, the channel text). Do not edit the hits. Put them into the report. - Wait for both
unity-verifyagents. A failed test stops the release. - Commit with the
asp-commitskill. Message:chore(release): v<version>. - Open the PR with the
asp-prskill. Title:chore(release): v<version>. Body: the channel and the version's CHANGELOG section in one line. - Send the report (format below). The user merges the PR.
Phase 2: tag
- Find the merge commit:
gh pr view chore/release-<version> --json state,mergeCommit. - The PR is not merged → say so and stop.
- Ask the user in one message: the version, the channel, the commit SHA and subject. Say that the tag starts the
Release workflow, that a published tag cannot be replaced, and that the
Release tagsruleset lets only an admin push it. - Wait for a clear yes. Any other answer → stop.
- Create the tag:
git tag -a v<version> -m "Release v<version>" <merge-sha>. - Push it:
git push origin v<version>. - Find the run of the tag:
gh run list --workflow release.yml --branch v<version> --limit 1 --json databaseId,status,conclusion. No run yet → wait 10 seconds and try again. After 6 tries, stop and report. - Run
gh run watch <id> --exit-statusin the background. Go to "Phase 3" when it ends.
Phase 3: check the publication
- Find the run of the tag as in "Phase 2" step 7.
statusis notcompleted→ go to "Phase 2" step 8.conclusionis notsuccess→ go to "Release failed".- Check the GitHub release:
gh release view v<version> --json url,isPrerelease.isPrereleasemust be true onupm-previewand false onupm. - Check that
refs/heads/<channel>andrefs/tags/upm/<version>point to one commit:git ls-remote origin refs/heads/<channel> refs/tags/upm/<version>. - Check the package version on the channel:
gh api 'repos/VPDPersonal/Aspid.MVVM/contents/package.json?ref=<channel>' --jq .content | base64 -d. - Check that the bundled
CHANGELOG.mdon the channel has the version's section:gh api 'repos/VPDPersonal/Aspid.MVVM/contents/CHANGELOG.md?ref=<channel>' --jq .content | base64 -d. - Stable: find the milestone. Its title is
<version>orv<version>:gh api 'repos/VPDPersonal/Aspid.MVVM/milestones?state=open&per_page=100' --jq '.[] | select(.title == "<version>" or .title == "v<version>") | .number'. No milestone → say so in the report and skip step 9. - Stable: ask before you close the milestone. Then close it:
gh api -X PATCH repos/VPDPersonal/Aspid.MVVM/milestones/<number> -f state=closed. - Send the final report: the release URL, the channel, the open items from the Phase 1 report.
Release failed
Read the failed step: gh run view <id> --log-failed. Then:
- The job
Preflight, aCI / …job orreleasefailed. Only thev<version>tag is out: the push of the UPM branch and its tag is atomic.- Report the cause.
- A transient cause (network, Unity license): ask, then run
gh run rerun <id> --failed. It keeps the finished jobs. Go to "Phase 3" when the run ends. - Preflight says the commit is not in
main: the tag is on the wrong commit. Merge that commit intomainwith a PR. Then go to step 5 with the merge commit. - Any other cause: the fix goes to
mainin a separate PR. - After the fix, ask before you delete the tag:
git push origin :refs/tags/v<version>,git tag -d v<version>. - Go to "Phase 2" step 3 with the merge commit of that PR.
- Only the job
GitHub releasefailed. The UPM tag and the channel branch are out.- Run
gh run rerun <id> --failed. It runs only that job. Go to "Phase 3" when the run ends. Do not rerun the whole run: preflight would refuse the UPM tag that the first run already published. - It fails again → ask, then create the release by hand.
The command is in the comment above the job in
release.yml.
- Run
Not done by this skill
Put these items into the Phase 1 report. Do not do them without a request.
- The API reference on the site (
docs-siteskill). Ask if a PR that changed public API merged without it since the last release. - A docs version of the Docusaurus site for a stable release (
docs-siteskill). - Stable: the Asset Store upload. It is manual: the user uploads the package.
Report format
Write the report in Russian. Keep it short:
- The first line: the PR link (Phase 1) or the release link (Phase 3), and the channel.
- The checks, one line each: script tests,
dotnet test, DLLs, Unity minimum, Unity dev project. - The old-version hits from Phase 1 step 9: the file and the line.
- The open items from "Not done by this skill" that apply to this version.
- The last line: what the user does next.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

