release-setuplisted
Install: claude install-skill bcmyguest/personal-skills
# Release automation from Conventional Commits
One doctrine, shared by every release flow:
- Commit types drive the version: `feat` → minor, breaking → major, else
patch; the first releasable commit produces `v0.1.0` (`initial_tag`).
- git-cliff computes the bump (`git cliff --bumped-version`) and renders the
notes (`git cliff --unreleased --tag vX.Y.Z`); if the bumped version equals
the latest tag, nothing releasable landed and the pipeline no-ops.
- The committed manifest version is never hand-bumped — release pipelines
stamp the tag version in at build time.
- Registry publishing is **Trusted Publishing only** (OIDC) — never a
long-lived token in CI secrets or variables.
[`templates/cliff.toml`](templates/cliff.toml) is the **canonical copy** of
the git-cliff config; the rust-setup and uv-setup release flows copy it from
here. Enforce the commit convention at commit time via the
**pre-commit-setup** skill's `conventional-commits.repos.yaml` fragment (with
the `--hook-type commit-msg` install).
## GitHub
The workflows are language-specific (binary matrices, crates.io vs PyPI), so
they ship with the language skill — follow **rust-setup** or **uv-setup**,
which copy `cliff.toml` from this skill.
## GitLab
Fully implemented here, language-agnostic, no placeholders:
```bash
cp "$SKILL/templates/cliff.toml" .
cp "$SKILL/templates/release.gitlab-ci.yml" .
```
Wire it into `.gitlab-ci.yml` — add the include, and make sure a `release`
stage exists (or rename the