Git create release
Skill ainova-systems/intelligence-dev-packs/packs/core/skills/git-create-release
Cut a release: version, changelog, tag, and release object — policy-driven across trunk/gitflow and tag-only/fullFrom its SKILL.md
npx -y skills add ainova-systems/intelligence-dev-packs --skill git-create-releaseAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 8 commands, including `git pull --ff-only` and 7 more.
SKILL.md
5.3 KB, ~1.3k tokens by cl100k_base, as published. Nobody here has run it
Create a Release
A release reproducible from its tag, with an honest changelog. Releases are outward-facing — publishing (the tag push, or the release object) is the confirmation gate. This skill is policy-driven: it reads the project profile and adapts across trunk vs gitflow, direct vs PR vs automated cuts, and tag-only vs full releases. When a key is unset, fall back to the best-practice default below, then auto-detect, then ask once.
Policy — dev-project-profile.md › ## Releases
release_flow—tag-on-default(trunk: cut and tag the default branch) |gitflow-merge(mergedevelop→master, tag the merge commit). Detect: an existingdevelopbranch ⇒gitflow-merge.changelog—continuous(default): every PR already appended its line under## [Unreleased]; the release only promotes it.assembled: the section is written at release time.release_cut— how the release commit lands:direct|release-pr(default) |automated.release_artifact— what to publish beyond the tag:tag-only|github-release(default) |github-release-draft.release_notes— release body:changelog-section(default) |generated|none.tagger—maintainer(default): a person tags locally and pushes the tag.ci: an Action tags on merge; nobody pushes the default branch by hand.version_source(where the version is bumped, e.g.package.json/changelog) andtag_format(defaultvX.Y.Z).
State the resolved policy in one line before acting.
Steps
- Pre-flight. Source branch current (
git pull --ff-only),git status --porcelainclean, CI green on HEAD. Red → STOP — that isgit-finalize-prterritory. - Version. An explicit argument wins; else derive from commits since
git describe --tags --abbrev=0— breaking ⇒ major, features ⇒ minor, fixes ⇒ patch (SemVer). Ambiguous → propose and ask. - Changelog + manifest.
continuous→ promote## [Unreleased]into## [X.Y.Z] — <date>(an empty[Unreleased]⇒ STOP: nothing to ship).assembled→ write the section now, entries grouped Added / Changed / Fixed / Breaking. Bump the version inversion_source. Treat the changelog promotion + version bump as one "release" change-set. - Land the release change-set on the release target — the default branch for
tag-on-default, ormaster(after mergingdevelop) forgitflow-merge— perrelease_cut:direct→ commit straight to the target. Only when the target is unprotected; if it is protected, STOP and userelease-pr.release-pr→ commit on arelease/x.y.zbranch, open a PR to the target, get CI green, merge permerge_method. No direct push — branch protection is satisfied. (gitflow-merge: thedevelop→mastermerge IS this PR.)automated→ defer to the release bot (e.g. release-please): make its open release PR reflect this version, get it green and merged; the bot lands the commit, sets the tag, and creates the release. Skip steps 5–6.
- Tag the release commit (the merge commit for
release-pr/gitflow-merge) — annotated, pertag_format, message = version plus the changelog headline.tagger: maintainer→git tag -a <tag> <commit>; confirm with the owner, thengit push origin <tag>— push the tag, not a branch. A protected default branch does not block a tag push; locking tags is a separaterefs/tags/v*ruleset.tagger: ci→ do not tag locally; the merge triggers the CI tagger — verify it ran.
- Publish the release object per
release_artifact:tag-only→ done; the tag is the release.github-release/github-release-draft→gh release create <tag> --verify-tag --title "<tag> — <headline>"with the body fromrelease_notes(changelog-section→--notes-file <the [X.Y.Z] section>;generated→--generate-notes;none→--notes ""); add--draftfor the draft variant and--prereleaseonly when the version carries a pre-release suffix (e.g.-rc.1). Non-GitHub platforms use their own CLI (glab release create, …).
- Watch the deploy/release pipeline to completion when one exists. Report the tag, the changelog section, the release-object URL (if any), and the pipeline outcome.
Verify
git describe --tagson the release commit prints the new tag; the changelog section matches the shipped diff; CI/deploy is green; any release object is visible at its URL (Latest, or Draft pending publish).
Scope / hand-off
- Getting the release PR green and merged —
git-finalize-pr/git-merge-pr. - Keeping
## [Unreleased]filled per feature PR — that is thecontinuouschangelog habit (done at commit time /git-commit-push), not this skill.
CRITICAL
- Never release around a red pipeline; never retag or force-move a published tag.
- A pipeline failure after the tag ships as a NEW patch release, never a rewrite of the failed one.
release-prandautomatedexist so a protected default branch is never pushed directly.release_cut: directis only for an unprotected target.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.