id = "cargo-release"
name = "cargo-release"
homepage = "https://github.com/crate-ci/cargo-release"
description = "Cargo subcommand `release`: everything about releasing a rust crate"
executables = ["cargo-release"]
[dotfiles]
paths = ["~/.release.toml", "[configHome]/cargo-release/release.toml"]
secret = []
[commands]
format = 1
label = "Release crate"
description = "Bump the version, publish, tag and push a crate. Dry-run is the default; tick Execute to really release. Per-step subcommands, sign options and certificate settings are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = false }
[[commands.source]]
id = "help"
kind = "help"
url = "https://github.com/crate-ci/cargo-release/blob/master/docs/reference.md"
revision = "2026-10-27"
evidence = """
Usage: cargo release [OPTIONS] [LEVEL|VERSION]
[LEVEL|VERSION] Either bump by LEVEL or set the VERSION for all selected packages [possible
values: major, minor, patch, release, rc, beta, alpha]
--manifest-path <PATH> Path to Cargo.toml
-p, --package <SPEC> Package to process (see `cargo help pkgid`)
--workspace Process all packages in the workspace
--exclude <SPEC> Exclude packages from being processed
--unpublished Process all packages whose current version is unpublished
-x, --execute Actually perform a release. Dry-run mode is the default
--no-confirm Skip release confirmation and version preview
-v, --verbose... Pass many times for more log output
--no-publish Do not run cargo publish on release
--no-tag Do not create git tag
--no-push Do not run git push in the last step
"""
[[commands.field]]
id = "level"
label = "Level or version"
description = "Bump level, or leave empty to use the default."
type = "enum"
position = 0
choices = [{ value = "major", label = "major" }, { value = "minor", label = "minor" }, { value = "patch", label = "patch" }, { value = "release", label = "release" }, { value = "rc", label = "rc" }, { value = "beta", label = "beta" }, { value = "alpha", label = "alpha" }]
sources = ["help"]
[[commands.field]]
id = "manifest_path"
label = "Cargo.toml"
type = "path"
option = ["--manifest-path"]
path = { kind = "file", role = "input" }
sources = ["help"]
[[commands.field]]
id = "package"
label = "Package"
type = "string"
option = ["--package", "-p"]
multiple = true
sources = ["help"]
[[commands.field]]
id = "workspace"
label = "Whole workspace"
type = "boolean"
option = ["--workspace"]
sources = ["help"]
[[commands.field]]
id = "exclude"
label = "Exclude package"
type = "string"
option = ["--exclude"]
multiple = true
sources = ["help"]
[[commands.field]]
id = "unpublished"
label = "Only unpublished"
type = "boolean"
option = ["--unpublished"]
sources = ["help"]
[[commands.field]]
id = "execute"
label = "Execute for real"
description = "Without this, only a dry run is performed."
type = "boolean"
option = ["--execute", "-x"]
effect = "exec"
sources = ["help"]
[[commands.field]]
id = "no_confirm"
label = "Skip confirmation"
type = "boolean"
option = ["--no-confirm"]
sources = ["help"]
[[commands.field]]
id = "no_publish"
label = "Do not publish"
type = "boolean"
option = ["--no-publish"]
sources = ["help"]
[[commands.field]]
id = "no_tag"
label = "Do not tag"
type = "boolean"
option = ["--no-tag"]
sources = ["help"]
[[commands.field]]
id = "no_push"
label = "Do not push"
type = "boolean"
option = ["--no-push"]
sources = ["help"]
[[commands.field]]
id = "verbose"
label = "Verbose"
type = "count"
option = ["--verbose", "-v"]
sources = ["help"]
[[commands.task]]
id = "dry-run"
label = "Dry run a release"
fields = ["level", "workspace", "package", "verbose"]
required = ["level"]
[[commands.task]]
id = "release"
label = "Perform the release"
fields = ["level", "workspace", "package", "execute", "no_confirm"]
required = ["level", "execute"]
set = { execute = [true] }
[[commands.group]]
id = "basic"
label = "Basic"
fields = ["level", "manifest_path", "package", "workspace", "exclude", "unpublished", "execute"]
[[commands.group]]
id = "advanced"
label = "Advanced"
fields = ["no_confirm", "no_publish", "no_tag", "no_push", "verbose"]