Runs or bootstraps mise release pipeline for Python, Rust, Node, or mixed repos. Handles preflight checks, semantic versioning, package publishing (PyPI/crates.io/npm), and verification.
From misenpx claudepluginhub terrylica/cc-skills --plugin miseThis skill is limited to using the following tools:
references/evolution-log.mdExecutes pre-written implementation plans: critically reviews, follows bite-sized steps exactly, runs verifications, tracks progress with checkpoints, uses git worktrees, stops on blockers.
Verifies tests pass on completed feature branch, presents options to merge locally, create GitHub PR, keep as-is or discard; executes choice and cleans up worktree.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Run the current repo's mise release pipeline — or bootstrap one if it doesn't exist yet.
Self-Evolving Skill: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues.
mise tasks ls 2>/dev/null | grep -i release
If tasks exist → skip to Step 3: Execute. If tasks NOT found → continue to Step 2.
This step scaffolds an individualized release pipeline for THIS repo. Every repo is different — do not copy templates verbatim. Audit first, then scaffold what fits.
Run all of these to understand what this repo needs:
# Ecosystem detection
ls pyproject.toml Cargo.toml package.json setup.py 2>/dev/null
# Existing mise config
cat .mise.toml 2>/dev/null || cat mise.toml 2>/dev/null
# Existing release infra (semantic-release, Makefile, GitHub Actions)
ls .releaserc* release.config.* 2>/dev/null
ls .github/workflows/*release* 2>/dev/null
grep -i release Makefile 2>/dev/null
# Credentials already configured
grep -E 'GH_TOKEN|GITHUB_TOKEN|UV_PUBLISH_TOKEN|CARGO_REGISTRY_TOKEN|NPM_TOKEN' .mise.toml mise.toml 2>/dev/null
Read cc-skills' own release tasks as a working example — adapt, don't copy:
ls $HOME/.claude/plugins/marketplaces/cc-skills/.mise/tasks/release/
Also read: $HOME/.claude/plugins/marketplaces/cc-skills/docs/RELEASE.md
.mise/tasks/release/Create only the tasks this repo actually needs. The 5-phase pattern is:
| Phase | Task | Purpose | Required? |
|---|---|---|---|
| 1. Preflight | preflight | Clean dir, auth, branch check | Always |
| 2. Version | version | semantic-release (or repo-specific versioning) | Always |
| 3. Publish | pypi | uv publish or custom script | If Python |
crates | cargo publish --workspace (Rust 1.90+) | If Rust | |
npm | npm publish | If Node | |
| 4. Verify | verify | Tag exists, release exists, artifacts published | Always |
| 5. Postflight | postflight | Clean git state, no unpushed, lockfile reset | Always |
Orchestrator: full task chains the phases with depends = [...].
Key rules:
.mise.toml [env], not hardcoded in scripts.mise.toml [tools]preflight and postflight (build artifacts, not intentional changes)--dry and --status convenience tasks@semantic-release/git untracked file explosion: v10.x runs git ls-files -m -o without --exclude-standard. Patch after install:
find $(npm root -g 2>/dev/null) node_modules \
-path "*/@semantic-release/git/lib/git.js" 2>/dev/null | while read f; do
grep -q 'exclude-standard' "$f" || \
sed -i '' "s/\['ls-files', '-m', '-o'\]/['ls-files', '-m', '-o', '--exclude-standard']/" "$f"
done
Partial semantic-release failure (version bumped, no tag): Do NOT re-run semantic-release. Manually create tag + GitHub release, then continue with publish tasks.
# Pre-release sync
git pull origin main
# Check for unpushed commits
git log --oneline @{u}..HEAD
# Route by flags
mise run release:full # default
mise run release:dry # --dry
mise run release:status # --status
If working directory is dirty: commit related changes or stash WIP first. Reset lockfile drift if present:
git diff --name-only | grep -E '(uv\.lock|package-lock\.json|Cargo\.lock|bun\.lockb)$' | xargs -r git checkout --
After this skill completes, reflect before closing the task:
Do NOT defer. The next invocation inherits whatever you leave behind.