id = "topgrade"
name = "Topgrade"
homepage = "https://github.com/topgrade-rs/topgrade"
executables = ["topgrade"]
[dotfiles]
paths = [
"[configHome]/topgrade.toml",
"[configHome]/topgrade/topgrade.toml",
"[configHome]/topgrade.d/",
]
secret = []
side_effect = false
[commands]
format = 1
label = "Upgrade everything"
description = "Run Topgrade's upgrade steps with a dry run, step selection and retry behaviour. Custom commands, environment variables, notifications and logging options are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = false, short_attached = true, short_bundles = true }
[[commands.source]]
id = "cli"
kind = "manual"
url = "https://raw.githubusercontent.com/topgrade-rs/topgrade/HEAD/src/config.rs"
revision = "2026-10-27"
evidence = """
-n, --dry-run Print what would be done
--disable <STEP>... Do not perform upgrades for the given steps
--only <STEP>... Perform only the specified steps
-y, --yes [<STEP>...] Say yes to package manager's prompt
-v, --verbose Output debug logs. Alias for `--log-filter debug`.
-k, --keep Prompt for a key before exiting
--no-ask-retry Do not ask what to do after a step fails
--auto-retry <COUNT> Automatically retry failed steps up to COUNT times
--config <PATH> Alternative configuration file
--show-skipped Show the reason for skipped steps
--no-self-update Don't update Topgrade
--sudoloop Periodically run `sudo -v` to avoid password re-prompts during updates
(Help text transcribed from the clap #[arg(...)] doc comments in src/config.rs.)
"""
[[commands.field]]
id = "dry_run"
label = "Dry run"
description = "Print what would be done without upgrading anything."
type = "boolean"
option = ["--dry-run", "-n"]
sources = ["cli"]
[[commands.field]]
id = "only"
label = "Only these steps"
description = "Step names such as brew, cargo or system. Only these steps run."
type = "string"
option = ["--only"]
multiple = true
sources = ["cli"]
[[commands.field]]
id = "disable"
label = "Skip these steps"
description = "Step names to leave out of the run."
type = "string"
option = ["--disable"]
multiple = true
sources = ["cli"]
[[commands.field]]
id = "yes"
label = "Answer yes to prompts"
description = "Say yes to the package managers' prompts."
type = "boolean"
option = ["--yes", "-y"]
sources = ["cli"]
[[commands.field]]
id = "no_self_update"
label = "Skip Topgrade self-update"
type = "boolean"
option = ["--no-self-update"]
sources = ["cli"]
[[commands.field]]
id = "no_ask_retry"
label = "Do not ask to retry failures"
type = "boolean"
option = ["--no-ask-retry"]
sources = ["cli"]
[[commands.field]]
id = "auto_retry"
label = "Automatic retries"
description = "Retry failed steps up to this many times."
type = "integer"
option = ["--auto-retry"]
sources = ["cli"]
[[commands.field]]
id = "config"
label = "Config file"
type = "path"
option = ["--config"]
path = { kind = "file", role = "input" }
sources = ["cli"]
[[commands.field]]
id = "show_skipped"
label = "Show skipped reasons"
type = "boolean"
option = ["--show-skipped"]
sources = ["cli"]
[[commands.field]]
id = "sudoloop"
label = "Keep sudo alive"
description = "Periodically run sudo -v to avoid password re-prompts."
type = "boolean"
option = ["--sudoloop"]
sources = ["cli"]
[[commands.field]]
id = "keep"
label = "Wait for a key at the end"
type = "boolean"
option = ["--keep", "-k"]
sources = ["cli"]
[[commands.field]]
id = "verbose"
label = "Verbose"
type = "boolean"
option = ["--verbose", "-v"]
sources = ["cli"]
[[commands.task]]
id = "preview"
label = "Preview upgrades"
fields = ["dry_run", "only", "disable", "show_skipped"]
set = { dry_run = [true] }
[[commands.task]]
id = "unattended"
label = "Unattended upgrade"
fields = ["yes", "no_ask_retry", "auto_retry", "disable", "only"]
set = { yes = [true] }
[[commands.group]]
id = "basic"
label = "Basic"
fields = ["dry_run", "only", "disable", "yes", "no_self_update", "verbose"]
[[commands.group]]
id = "advanced"
label = "Advanced"
fields = ["no_ask_retry", "auto_retry", "config", "show_skipped", "sudoloop", "keep"]