On this page
Release lifecycle commands: bump and publish versions, scaffold release files, retry CI, sync release notes, undo, and yank past releases.
#rlsbl release
Release orchestration commands. Provides 8 subcommands covering the full release lifecycle: run, resume, init, retry, edit, undo, yank, and scrub.
#release run
Bump version, validate the JSONL changelog, run tests and lint, commit, tag, push, and create a GitHub Release. Reads the bump type (patch, minor, major, or hotfix) and target selection from .rlsbl/releases/unreleased.toml, which can be scaffolded with rlsbl release init. Supports dry-run preview, non-interactive mode with --yes, and --allow-dirty to skip the clean working tree check.
#Flags
| Name | Short | Type | Default | Env | Description |
|---|---|---|---|---|---|
--allow-dirty | bool | Skip the clean working tree check and allow releasing with uncommitted changes | |||
--bump | str | Bump type: patch, minor, major, hotfix, prerelease. Skips the release file. | |||
--description | str | Release description (required with --bump) | |||
--preid | str | Pre-release identifier: alpha, beta, rc, stable. Only valid with --bump. | |||
--watch | bool | After release, automatically watch CI runs to completion | |||
--no-watch | bool | After release, print the watch command hint without watching |
#release resume
Resume a previously failed release from where it left off. Reads the in-progress state file (.rlsbl/releases/in-progress.json), validates that the current branch matches the saved state, and re-enters the release flow, skipping already-completed steps.
#Flags
| Name | Short | Type | Default | Env | Description |
|---|---|---|---|---|---|
--watch | bool | After release, automatically watch CI runs to completion | |||
--no-watch | bool | After release, print the watch command hint without watching |
#release init
Scaffold a .rlsbl/releases/unreleased.toml file by auto-detecting project targets. The generated file contains a default bump type (patch), an include list of all detected targets, and per-target configuration sections for Flutter targets.
#release retry
Dispatch CI/CD workflows for a completed release via gh workflow run. Reads the dispatch list and ref from .rlsbl/releases/retry.toml, which is auto-scaffolded with sensible defaults if missing. Verifies the GitHub Release exists before dispatching. Each workflow in the dispatch list is triggered against the configured ref (defaults to the release tag).
#Flags
| Name | Short | Type | Default | Env | Description |
|---|---|---|---|---|---|
--watch | bool | After retry, automatically watch CI runs to completion | |||
--no-watch | bool | After retry, print the watch command hint without watching |
#release edit
Sync the GitHub Release notes for a given version with the corresponding CHANGELOG.md entry. Defaults to the current version if none is specified. Use --dry-run to preview changes without updating GitHub.
#Arguments
| Name | Required | Description |
|---|---|---|
version | no | Version whose GitHub Release notes to sync (defaults to current version) |
#release undo
Revert the most recent release by deleting the GitHub Release, removing the git tag from local and remote, and reverting the version bump commit. Requires a manual git push afterward to finalize.
#Flags
| Name | Short | Type | Default | Env | Description |
|---|---|---|---|---|---|
--target | str | Target a specific registry for version detection (auto-detected if omitted) |
#release yank
Mark a past release as deprecated (soft yank) or delete it (hard yank). Soft yank marks the GitHub Release as pre-release and prepends a deprecation notice. Hard yank deletes the release entirely while preserving the git tag.
#Flags
| Name | Short | Type | Default | Env | Description |
|---|---|---|---|---|---|
--reason | str | Human-readable explanation of why this version is being yanked | |||
--use | str | Suggest this version as a replacement in the deprecation notice | |||
--hard | bool | Delete the release instead of marking as pre-release |
#Arguments
| Name | Required | Description |
|---|---|---|
version | yes | Semver string of the release to yank, with or without v prefix (e.g. 0.9.1) |
#release scrub
Scrub sensitive content from git history and update release metadata to match the rewritten commits. Wraps safegit scrub (match or file mode), remaps commit hashes in all JSONL changelog files, regenerates CHANGELOG.md, force-pushes the rewritten history, and recreates GitHub Releases on the new tags. A scrub-result.json file records the SHA mapping for recovery if any post-rewrite step fails.
#Flags
| Name | Short | Type | Default | Env | Description |
|---|---|---|---|---|---|
--reason | str | Reason for scrubbing (required, used in commit message) | |||
--pattern | str | Regex pattern to match against file contents (mutually exclusive with --file) | |||
--file | str | Path to the file to remove from git history (mutually exclusive with --pattern) | |||
--replace | str | Literal text to substitute for each match (mutually exclusive with --mangle) | |||
--mangle | bool | Replace matched content with random ASCII of same length | |||
--from-commit | str | SHA of the earliest commit to rewrite (all descendants are also rewritten) | |||
--entire-history | bool | Rewrite every commit in the repository from the initial commit onward |