id = "topgrade" name = "Topgrade" homepage = "https://github.com/topgrade-rs/topgrade" executables = ["topgrade"] [dotfiles] # https://github.com/topgrade-rs/topgrade/blob/main/README.md#configuration- # path — CONFIG_DIR is ${XDG_CONFIG_HOME:-~/.config} on macOS and other Unix # systems and %APPDATA% on Windows. The README lists both main-file spellings # and says CONFIG_DIR/topgrade.d/ files are loaded before the main config; # [configHome] is the catalog root for this cross-platform config location. paths = [ "[configHome]/topgrade.toml", "[configHome]/topgrade/topgrade.toml", "[configHome]/topgrade.d/", ] # Topgrade's TOML can run user-defined commands, but the project does not # define stable credential fields; no secret_paths rule is asserted here. 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 ... Do not perform upgrades for the given steps --only ... Perform only the specified steps -y, --yes [...] 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 Automatically retry failed steps up to COUNT times --config 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"]