Add publish-release skill and a publish-workflow tag guard#22
Merged
Conversation
Port the publish-release skill from the touki repo, adapted to madowaku: single KlutzyNinja.Madowaku package and v* tag stream, MinVer wired in the csproj, API-key publish, and workflow_dispatch recovery via the tag ref. Register it in the skills catalog. Add a "Validate tag format" step as the first step of publish.yml that rejects non-tag refs and tags not matching the SemVer v-prefix regex, so a malformed tag (e.g. the historical v.0.1.0-alpha.3 typo) fails fast instead of publishing a MinVer height-fallback version. The skill docs describe the guard.
There was a problem hiding this comment.
Pull request overview
This PR strengthens the release process for madowaku by (1) adding a new agent skill that documents the tagging/publishing workflow for KlutzyNinja.Madowaku and (2) adding a tag-format validation gate to the NuGet publish GitHub Actions workflow to prevent malformed tags from producing incorrect MinVer versions.
Changes:
- Added a
publish-releaseskill (with supporting docs) describing version selection, tagging, and release steps tailored to this repo’s MinVer + NuGet publish setup. - Added a “Validate tag format” step to
publish.ymlto fail fast on non-tag refs and tags that don’t match the intended SemVer-with-v-prefix format. - Registered the new skill in the skills catalog.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
.github/workflows/publish.yml |
Adds an early guard step to validate tag refs and tag name format before packing/publishing. |
.agents/skills/README.md |
Registers the new publish-release skill in the repo skill catalog. |
.agents/skills/publish-release/SKILL.md |
Defines the publish-release skill entrypoint and high-level procedure including an approval checkpoint. |
.agents/skills/publish-release/versioning.md |
Documents version selection, SemVer bump rules, tag format, and the publish tag-format guard rationale. |
.agents/skills/publish-release/release-steps.md |
Documents tag creation/push, workflow monitoring, rerun guidance, and GitHub release creation steps. |
- publish.yml: use -cnotmatch so the tag-format check enforces a lowercase `v` prefix; PowerShell -notmatch is case-insensitive, so V1.2.3 would have passed and produced a MinVer height-fallback version. - versioning.md / SKILL.md: replace the stale "no guard" / "missing-guard" references with the current "Tag-format guard" section name. - versioning.md: make the channel prompt tool-agnostic instead of naming vscode_askQuestions, which does not exist on every agent surface.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two related changes for the release process.
publish-releaseskill (new)Ports the
publish-releaseskill from the touki repo, adapted to madowaku's specifics:KlutzyNinja.Madowakuon thev*tag prefix (touki ships two packages / two streams).MinVerTagPrefix=v); noDirectory.Build.targets.NUGET_API_KEYsecret +dotnet nuget push --skip-duplicate(not OIDC).workflow_dispatchtakes no inputs; re-run by selecting the tag ref in the Actions UI.net10.0-windows10.0.22000.0,net10.0,net472.Files: SKILL.md, versioning.md, release-steps.md.
Tag-format guard in
publish.ymlAdds a Validate tag format step as the first step of the publish job. The
v*.*.*trigger glob matched the historicalv.0.1.0-alpha.3typo (the*matches the stray dot), which MinVer then can't parse — silently publishing a height-fallback version. The guard:github.refmust start withrefs/tags/) — catches aworkflow_dispatchlaunched from a branch.^v(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-[0-9A-Za-z.-]+)?$.env:to avoid script injection from ref names.Verified accept/reject against
v0.1.0-alpha.4,v0.2.0,v1.0.0-rc.1(pass) andv.0.1.0-alpha.3,0.1.0-alpha.4,v0.1,v01.02.03, branch refs (reject).Validation
Validate-AgentFiles.ps1— passed.publish.yml— no YAML errors.