release
release
Drive the repo's release-please flow to a shipped release — get the integration branch onto the release branch, wait for the release PR release-please opens, validate it, merge it. Manual invocation only: nothing here ever fires on its own, and every merge waits for a human.
This skill is GitHub-only, and that is a decision rather than a stage. What binds it is not the forge but the release tool: release-please is GitHub-only by construction, and nothing with real traction elsewhere reproduces its release-PR model — semantic-release tags straight from the pipeline, leaving this skill nothing to validate and nothing to merge. So a root forge key naming another forge is not "not yet, a driver is coming"; it means there is nothing here to drive, and the run stops and says so. The alternatives that were weighed and rejected: Decisions. The seams stay open on purpose — the release tool is detected, not configured and the skill's name is deliberately tool-neutral, so a tool that does reproduce the model on another forge docks here as detection, without a rename or a config break.
Opted out? If the repo config sets release to false, this skill is disabled for the repo — stop immediately and tell the user the release skill is turned off in .tituskirch-skills.json. An absent release block is not disabled. Check .release == false on the resolved config before any action. A missing jq or config exits non-zero too, so a pass is not evidence the config was read.
Workflow
1. Detect (read the repo — never assume)
- Forge — from the root
forgekey.githubis the only value this skill drives, so any other value stops the run — and the message says why: this skill is GitHub-only because release-please is, not because a driver is pending. Never say "not supported yet"; that promises something nobody is building. Point at Decisions for what was weighed. Then confirm the repo is reachable:gh repo view --json nameWithOwner,defaultBranchRef. If it fails (no GitHub remote, orghnot authenticated), stop. - Release tool — the tool is detected, not configured. v1 recognises exactly one: release-please (
release-please-config.json+.release-please-manifest.json, plus a workflow runninggoogleapis/release-please-actionon the release branch). None recognised → stop and report that no supported release tool was detected, naming what v1 supports. This skill drives a release tool; it does not invent a release process. - Branches — resolve the promotion chain:
release.stagesif set (integration branch first, release branch last), else[head, base]wherehead=release.head, elsepr.base, else the default branch, andbase=release.base, else the repo default branch. Never hardcodedev/main. Validatestages(non-empty, distinct branches, real refs) — malformed → report and stop.git fetchfirst, then show the whole chain (dev → … → base) in the plan. Chains. - Config —
.tituskirch-skills.jsonat the repo root (optional, committed). Keys: REFERENCE.md.