From 8ef14793248bf099fe8cf0f3a147d3a95214a64f Mon Sep 17 00:00:00 2001 From: Keeyan Nejad Date: Tue, 24 Sep 2024 12:17:17 +0100 Subject: [PATCH] Remove HideHelpCommand: true from all commands This is no longer needed, since we can show the help command without causing issues. Also removes the duplicated parts of the descriptions explaining the subcommands and the README entry instructing us to use the HideHelpCommand. Changelog: fixed --- cmd/gitaly/main_test.go | 4 ++-- doc/help_text_style_guide.md | 15 --------------- internal/cli/gitaly/app.go | 3 +-- internal/cli/gitaly/serve.go | 5 ++--- internal/cli/gitaly/subcmd_check.go | 7 +++---- internal/cli/gitaly/subcmd_configuration.go | 11 +++-------- internal/cli/gitaly/subcmd_git.go | 3 +-- internal/cli/gitaly/subcmd_hooks.go | 11 ++++------- internal/cli/praefect/main.go | 3 +-- internal/cli/praefect/serve.go | 3 +-- internal/cli/praefect/subcmd_accept_dataloss.go | 1 - internal/cli/praefect/subcmd_check.go | 1 - internal/cli/praefect/subcmd_configuration.go | 11 +++-------- .../cli/praefect/subcmd_configuration_validate.go | 3 +-- .../subcmd_configuration_validate_test.go | 3 +++ internal/cli/praefect/subcmd_dataloss.go | 3 +-- internal/cli/praefect/subcmd_dial_nodes.go | 3 +-- internal/cli/praefect/subcmd_list_storages.go | 3 +-- .../subcmd_list_untracked_repositories.go | 3 +-- internal/cli/praefect/subcmd_metadata.go | 3 +-- internal/cli/praefect/subcmd_remove_repository.go | 3 +-- .../cli/praefect/subcmd_set_replication_factor.go | 3 +-- internal/cli/praefect/subcmd_sql_migrate.go | 3 +-- internal/cli/praefect/subcmd_sql_migrate_down.go | 3 +-- .../cli/praefect/subcmd_sql_migrate_status.go | 3 +-- internal/cli/praefect/subcmd_sql_ping.go | 9 ++++----- .../cli/praefect/subcmd_track_repositories.go | 3 +-- internal/cli/praefect/subcmd_track_repository.go | 3 +-- internal/cli/praefect/subcmd_verify.go | 3 +-- tools/test-boot/main.go | 7 +++---- 30 files changed, 45 insertions(+), 94 deletions(-) diff --git a/cmd/gitaly/main_test.go b/cmd/gitaly/main_test.go index 9a4e618dbb..e525c801b6 100644 --- a/cmd/gitaly/main_test.go +++ b/cmd/gitaly/main_test.go @@ -31,7 +31,7 @@ func TestGitalyCLI(t *testing.T) { { desc: "without arguments", exitCode: 2, - stdout: "NAME:\n gitaly - a Git RPC service\n\nUSAGE:\n gitaly command [command options]\n\nDESCRIPTION:\n Gitaly is a Git RPC service for handling Git calls.\n\nCOMMANDS:\n serve launch the server daemon\n check verify internal API is accessible\n configuration run configuration-related commands\n hooks manage Git hooks\n bundle-uri Generate bundle URI bundle\n git execute Git commands using Gitaly's embedded Git\n db Interact with the BadgerDB\n\nOPTIONS:\n --help, -h show help\n --version, -v print the version\n", + stdout: "NAME:\n gitaly - a Git RPC service\n\nUSAGE:\n gitaly command [command options]\n\nDESCRIPTION:\n Gitaly is a Git RPC service for handling Git calls.\n\nCOMMANDS:\n serve launch the server daemon\n check verify internal API is accessible\n configuration run configuration-related commands\n hooks manage Git hooks\n bundle-uri Generate bundle URI bundle\n git execute Git commands using Gitaly's embedded Git\n db Interact with the BadgerDB\n help, h Shows a list of commands or help for one command\n\nOPTIONS:\n --help, -h show help\n --version, -v print the version\n", }, { desc: "with non-existent config", @@ -43,7 +43,7 @@ func TestGitalyCLI(t *testing.T) { desc: "check without config", args: []string{"check"}, exitCode: 2, - stdout: "NAME:\n gitaly check - verify internal API is accessible\n\nUSAGE:\n gitaly check \n\n Example: gitaly check gitaly.config.toml\n\nDESCRIPTION:\n Check that the internal Gitaly API is accessible.\n\nOPTIONS:\n --help, -h show help\n", + stdout: "NAME:\n gitaly check - verify internal API is accessible\n\nUSAGE:\n gitaly check \n\n Example: gitaly check gitaly.config.toml\n\nDESCRIPTION:\n Check that the internal Gitaly API is accessible.\n\nCOMMANDS:\n help, h Shows a list of commands or help for one command\n\nOPTIONS:\n --help, -h show help\n", stderr: "invalid argument(s)", }, { diff --git a/doc/help_text_style_guide.md b/doc/help_text_style_guide.md index 22d170b58a..9e384cb7ca 100644 --- a/doc/help_text_style_guide.md +++ b/doc/help_text_style_guide.md @@ -27,21 +27,6 @@ To help users discover `gitaly` and `praefect` features through the CLI: Example: gitaly subcommand plausible-value.toml --mandatory-flag plausible-value`, ``` -- Because of a [known issue](https://gitlab.com/gitlab-org/gitaly/-/issues/5350), always set the `HideHelpCommand` - field key to `true`. Setting this hides the `COMMANDS:` section of the help text, - which hides a generated list of available subcommands, if available. - - Instead, list subcommands in the value of the `Description` field key. For example: - - ```go - Description: `This is a long description of all the things example command can do. - - Provides the following subcommands: - - - subcommand1 - - subcommand2`, - ``` - ## Rules for command strings When adding or updating `gitaly` and `praefect` CLI tools, use the following guidance for values for the different field diff --git a/internal/cli/gitaly/app.go b/internal/cli/gitaly/app.go index 8f04ccd900..5d7b11e3df 100644 --- a/internal/cli/gitaly/app.go +++ b/internal/cli/gitaly/app.go @@ -25,8 +25,7 @@ func NewApp() *cli.App { // serveAction is also here in the root to keep the CLI backwards compatible // with the previous way to launch Gitaly with just `gitaly `. We // may want to deprecate this eventually. - Action: serveAction, - HideHelpCommand: true, + Action: serveAction, Commands: []*cli.Command{ newServeCommand(), newCheckCommand(), diff --git a/internal/cli/gitaly/serve.go b/internal/cli/gitaly/serve.go index 9a1489eeec..56ff5c84e4 100644 --- a/internal/cli/gitaly/serve.go +++ b/internal/cli/gitaly/serve.go @@ -71,9 +71,8 @@ func newServeCommand() *cli.Command { UsageText: `gitaly serve Example: gitaly serve gitaly.config.toml`, - Description: "Launch the Gitaly server daemon.", - Action: serveAction, - HideHelpCommand: true, + Description: "Launch the Gitaly server daemon.", + Action: serveAction, } } diff --git a/internal/cli/gitaly/subcmd_check.go b/internal/cli/gitaly/subcmd_check.go index 5c1a9e6fc7..d0e7b7e1f9 100644 --- a/internal/cli/gitaly/subcmd_check.go +++ b/internal/cli/gitaly/subcmd_check.go @@ -24,10 +24,9 @@ func newCheckCommand() *cli.Command { UsageText: `gitaly check Example: gitaly check gitaly.config.toml`, - Description: "Check that the internal Gitaly API is accessible.", - ArgsUsage: "", - Action: checkAction, - HideHelpCommand: true, + Description: "Check that the internal Gitaly API is accessible.", + ArgsUsage: "", + Action: checkAction, } } diff --git a/internal/cli/gitaly/subcmd_configuration.go b/internal/cli/gitaly/subcmd_configuration.go index 6e5a2d702f..27ffc5d33f 100644 --- a/internal/cli/gitaly/subcmd_configuration.go +++ b/internal/cli/gitaly/subcmd_configuration.go @@ -11,14 +11,9 @@ const validationErrorCode = 2 func newConfigurationCommand() *cli.Command { return &cli.Command{ - Name: "configuration", - Usage: "run configuration-related commands", - Description: `Run commands related to Gitaly configuration. - -Provides the following subcommand: - -- validate`, - HideHelpCommand: true, + Name: "configuration", + Usage: "run configuration-related commands", + Description: "Run commands related to Gitaly configuration.", Subcommands: []*cli.Command{ { Name: "validate", diff --git a/internal/cli/gitaly/subcmd_git.go b/internal/cli/gitaly/subcmd_git.go index 256f6125c9..eba927916c 100644 --- a/internal/cli/gitaly/subcmd_git.go +++ b/internal/cli/gitaly/subcmd_git.go @@ -36,8 +36,7 @@ without understanding the implications of doing so. Modifying Gitaly's state may lead to violating Gitaly's invariants, and lead to unavailability or data loss. ===============`, - Action: gitAction, - HideHelpCommand: true, + Action: gitAction, Flags: []cli.Flag{ gitalyConfigFlag(), }, diff --git a/internal/cli/gitaly/subcmd_hooks.go b/internal/cli/gitaly/subcmd_hooks.go index 9b81003f35..3ff29d5566 100644 --- a/internal/cli/gitaly/subcmd_hooks.go +++ b/internal/cli/gitaly/subcmd_hooks.go @@ -25,13 +25,10 @@ const ( func newHooksCommand() *cli.Command { return &cli.Command{ - Name: "hooks", - Usage: "manage Git hooks", - UsageText: "gitaly hooks set", - Description: `Manage hooks for a Git repository. - -Provides the "set" subcommand.`, - HideHelpCommand: true, + Name: "hooks", + Usage: "manage Git hooks", + UsageText: "gitaly hooks set", + Description: "Manage hooks for a Git repository.", Subcommands: []*cli.Command{ { Name: "set", diff --git a/internal/cli/praefect/main.go b/internal/cli/praefect/main.go index ccb919eb70..538d39bccc 100644 --- a/internal/cli/praefect/main.go +++ b/internal/cli/praefect/main.go @@ -51,8 +51,7 @@ func NewApp() *cli.App { // // The 'DefaultCommand: "serve"' setting can't be used here because it won't be // possible to invoke sub-command not yet registered. - Action: serveAction, - HideHelpCommand: true, + Action: serveAction, Commands: []*cli.Command{ newServeCommand(), newConfigurationCommand(), diff --git a/internal/cli/praefect/serve.go b/internal/cli/praefect/serve.go index a0bc86bb38..ff9de7615e 100644 --- a/internal/cli/praefect/serve.go +++ b/internal/cli/praefect/serve.go @@ -47,8 +47,7 @@ func newServeCommand() *cli.Command { Description: `Launch the Praefect server daemon. Example: praefect --config praefect.config.toml serve`, - Action: serveAction, - HideHelpCommand: true, + Action: serveAction, Before: func(context *cli.Context) error { if context.Args().Present() { return unexpectedPositionalArgsError{Command: context.Command.Name} diff --git a/internal/cli/praefect/subcmd_accept_dataloss.go b/internal/cli/praefect/subcmd_accept_dataloss.go index 6228940a0c..f32afd8abd 100644 --- a/internal/cli/praefect/subcmd_accept_dataloss.go +++ b/internal/cli/praefect/subcmd_accept_dataloss.go @@ -19,7 +19,6 @@ storages that contain replicas of the repository are scheduled to make them cons authoritative physical storage. Example: praefect --config praefect.config.toml accept-dataloss --virtual-storage default --repository --authoritative-storage `, - HideHelpCommand: true, Flags: []cli.Flag{ &cli.StringFlag{ Name: paramVirtualStorage, diff --git a/internal/cli/praefect/subcmd_check.go b/internal/cli/praefect/subcmd_check.go index 5d85136002..f1951f60f3 100644 --- a/internal/cli/praefect/subcmd_check.go +++ b/internal/cli/praefect/subcmd_check.go @@ -19,7 +19,6 @@ func newCheckCommand(checkFuncs []service.CheckFunc) *cli.Command { Description: `Run Praefect startup checks. Example: praefect --config praefect.config.toml check`, - HideHelpCommand: true, Flags: []cli.Flag{ &cli.BoolFlag{ Name: "q", diff --git a/internal/cli/praefect/subcmd_configuration.go b/internal/cli/praefect/subcmd_configuration.go index 54b425ae87..b0d618f4ea 100644 --- a/internal/cli/praefect/subcmd_configuration.go +++ b/internal/cli/praefect/subcmd_configuration.go @@ -6,14 +6,9 @@ const configurationCmdName = "configuration" func newConfigurationCommand() *cli.Command { return &cli.Command{ - Name: configurationCmdName, - Usage: "manage configuration", - Description: `Manage Praefect configuration. - -Provides the following subcommand: - -- validate`, - HideHelpCommand: true, + Name: configurationCmdName, + Usage: "manage configuration", + Description: "Manage Praefect configuration.", Subcommands: []*cli.Command{ newConfigurationValidateCommand(), }, diff --git a/internal/cli/praefect/subcmd_configuration_validate.go b/internal/cli/praefect/subcmd_configuration_validate.go index 949f297b5e..07a39f8a7f 100644 --- a/internal/cli/praefect/subcmd_configuration_validate.go +++ b/internal/cli/praefect/subcmd_configuration_validate.go @@ -21,8 +21,7 @@ Applies validation rules to Praefect configuration provided on stdin and returns errors in JSON format on stdout. Example: praefect configuration validate < praefect.config.toml`, - HideHelpCommand: true, - Action: configurationValidateAction, + Action: configurationValidateAction, } } diff --git a/internal/cli/praefect/subcmd_configuration_validate_test.go b/internal/cli/praefect/subcmd_configuration_validate_test.go index 94ba135d8e..6c0e0a81d6 100644 --- a/internal/cli/praefect/subcmd_configuration_validate_test.go +++ b/internal/cli/praefect/subcmd_configuration_validate_test.go @@ -76,6 +76,9 @@ DESCRIPTION: Example: praefect configuration validate < praefect.config.toml +COMMANDS: + help, h Shows a list of commands or help for one command + OPTIONS: --help, -h show help `, diff --git a/internal/cli/praefect/subcmd_dataloss.go b/internal/cli/praefect/subcmd_dataloss.go index e2fa1e5ea0..5354cc979a 100644 --- a/internal/cli/praefect/subcmd_dataloss.go +++ b/internal/cli/praefect/subcmd_dataloss.go @@ -31,8 +31,7 @@ For each unavailable repository with potential data loss, the output lists: - Any out-of-date Gitaly nodes (outdated storages). Example: praefect --config praefect.config.toml dataloss`, - HideHelpCommand: true, - Action: datalossAction, + Action: datalossAction, Flags: []cli.Flag{ &cli.StringFlag{ Name: paramVirtualStorage, diff --git a/internal/cli/praefect/subcmd_dial_nodes.go b/internal/cli/praefect/subcmd_dial_nodes.go index 7c2bda57ea..1db7f13f6c 100644 --- a/internal/cli/praefect/subcmd_dial_nodes.go +++ b/internal/cli/praefect/subcmd_dial_nodes.go @@ -18,8 +18,7 @@ Diagnoses connection problems with Gitaly or Praefect. Sources connection inform configuration file, and then dials and health checks the nodes. Example: praefect --config praefect.config.toml dial-nodes`, - HideHelpCommand: true, - Action: dialNodesAction, + Action: dialNodesAction, Flags: []cli.Flag{ &cli.DurationFlag{ Name: "timeout", diff --git a/internal/cli/praefect/subcmd_list_storages.go b/internal/cli/praefect/subcmd_list_storages.go index c2b89202ca..91df4eb709 100644 --- a/internal/cli/praefect/subcmd_list_storages.go +++ b/internal/cli/praefect/subcmd_list_storages.go @@ -26,8 +26,7 @@ If the virtual-storage flag: - Is not specified, lists physical storages for all virtual storages. Example: praefect --config praefect.config.toml list-storages --virtual-storage default`, - HideHelpCommand: true, - Action: listStoragesAction, + Action: listStoragesAction, Flags: []cli.Flag{ &cli.StringFlag{ Name: paramVirtualStorage, diff --git a/internal/cli/praefect/subcmd_list_untracked_repositories.go b/internal/cli/praefect/subcmd_list_untracked_repositories.go index af356deba1..cf4f129d47 100644 --- a/internal/cli/praefect/subcmd_list_untracked_repositories.go +++ b/internal/cli/praefect/subcmd_list_untracked_repositories.go @@ -38,8 +38,7 @@ Examples: - praefect --config praefect.config.toml list-untracked-repositories - praefect --config praefect.config.toml list-untracked-repositories --older-than 1s`, - HideHelpCommand: true, - Action: listUntrackedRepositoriesAction, + Action: listUntrackedRepositoriesAction, Flags: []cli.Flag{ &cli.StringFlag{ Name: "delimiter", diff --git a/internal/cli/praefect/subcmd_metadata.go b/internal/cli/praefect/subcmd_metadata.go index 44c7ef8293..728bfd1547 100644 --- a/internal/cli/praefect/subcmd_metadata.go +++ b/internal/cli/praefect/subcmd_metadata.go @@ -31,8 +31,7 @@ Examples: - praefect --config praefect.config.toml metadata --repository-id 1 - praefect --config praefect.config.toml metadata --virtual-storage default --relative-path `, - HideHelpCommand: true, - Action: metadataAction, + Action: metadataAction, Flags: []cli.Flag{ &cli.Int64Flag{ Name: "repository-id", diff --git a/internal/cli/praefect/subcmd_remove_repository.go b/internal/cli/praefect/subcmd_remove_repository.go index 9fa906d430..0c4ce56452 100644 --- a/internal/cli/praefect/subcmd_remove_repository.go +++ b/internal/cli/praefect/subcmd_remove_repository.go @@ -39,8 +39,7 @@ Example: praefect --config praefect.config.toml remove-repository --virtual-stor - (Optional) Replicas of the repository on all physical storages. By default, runs in dry-run mode to check if the repository exists in the Praefect database.`, - HideHelpCommand: true, - Action: removeRepositoryAction, + Action: removeRepositoryAction, Flags: []cli.Flag{ &cli.StringFlag{ Name: paramVirtualStorage, diff --git a/internal/cli/praefect/subcmd_set_replication_factor.go b/internal/cli/praefect/subcmd_set_replication_factor.go index fa1d41800d..9af9577940 100644 --- a/internal/cli/praefect/subcmd_set_replication_factor.go +++ b/internal/cli/praefect/subcmd_set_replication_factor.go @@ -37,8 +37,7 @@ The authoritative physical storage is never unassigned because it: - Is the first storage that is assigned when setting a replication factor for a repository. Example: praefect --config praefect.config.toml set-replication-factor --virtual-storage default --repository --replication-factor 3`, - HideHelpCommand: true, - Action: setReplicationFactorAction, + Action: setReplicationFactorAction, Flags: []cli.Flag{ &cli.StringFlag{ Name: paramVirtualStorage, diff --git a/internal/cli/praefect/subcmd_sql_migrate.go b/internal/cli/praefect/subcmd_sql_migrate.go index a98b14aa9d..325d8aec08 100644 --- a/internal/cli/praefect/subcmd_sql_migrate.go +++ b/internal/cli/praefect/subcmd_sql_migrate.go @@ -23,8 +23,7 @@ func newSQLMigrateCommand() *cli.Command { Description: "The sql-migrate subcommand applies outstanding migrations to the configured database.\n" + "The subcommand doesn't fail if database has migrations unknown to the version of Praefect you're using.\n" + "To make the subcommand fail on unknown migrations, use the 'ignore-unknown' flag.", - HideHelpCommand: true, - Action: sqlMigrateAction, + Action: sqlMigrateAction, Flags: []cli.Flag{ &cli.BoolFlag{ Name: "ignore-unknown", diff --git a/internal/cli/praefect/subcmd_sql_migrate_down.go b/internal/cli/praefect/subcmd_sql_migrate_down.go index 4c643cc540..88ce8c5b67 100644 --- a/internal/cli/praefect/subcmd_sql_migrate_down.go +++ b/internal/cli/praefect/subcmd_sql_migrate_down.go @@ -17,8 +17,7 @@ func newSQLMigrateDownCommand() *cli.Command { Usage: "apply revert SQL migrations", Description: "The sql-migrate-down subcommand applies revert migrations to the configured database.\n" + "It accepts a single argument - amount of migrations to revert.", - HideHelpCommand: true, - Action: sqlMigrateDownAction, + Action: sqlMigrateDownAction, Flags: []cli.Flag{ &cli.BoolFlag{ Name: "f", diff --git a/internal/cli/praefect/subcmd_sql_migrate_status.go b/internal/cli/praefect/subcmd_sql_migrate_status.go index 45bdd80973..2c205dae74 100644 --- a/internal/cli/praefect/subcmd_sql_migrate_status.go +++ b/internal/cli/praefect/subcmd_sql_migrate_status.go @@ -17,8 +17,7 @@ func newSQLMigrateStatusCommand() *cli.Command { Usage: "show applied database migrations", Description: "The commands prints a table of the migration identifiers applied to the database\n" + "with the timestamp for each when it was applied.", - HideHelpCommand: true, - Action: sqlMigrateStatusAction, + Action: sqlMigrateStatusAction, Before: func(ctx *cli.Context) error { if ctx.Args().Present() { _ = cli.ShowSubcommandHelp(ctx) diff --git a/internal/cli/praefect/subcmd_sql_ping.go b/internal/cli/praefect/subcmd_sql_ping.go index 3811c8739f..67e3733735 100644 --- a/internal/cli/praefect/subcmd_sql_ping.go +++ b/internal/cli/praefect/subcmd_sql_ping.go @@ -12,11 +12,10 @@ const sqlPingCmdName = "sql-ping" func newSQLPingCommand() *cli.Command { return &cli.Command{ - Name: sqlPingCmdName, - Usage: "check reachability of the database", - Description: "The subcommand checks if the database configured in the configuration file is reachable", - HideHelpCommand: true, - Action: sqlPingAction, + Name: sqlPingCmdName, + Usage: "check reachability of the database", + Description: "The subcommand checks if the database configured in the configuration file is reachable", + Action: sqlPingAction, Before: func(appCtx *cli.Context) error { if appCtx.Args().Present() { _ = cli.ShowSubcommandHelp(appCtx) diff --git a/internal/cli/praefect/subcmd_track_repositories.go b/internal/cli/praefect/subcmd_track_repositories.go index bde162108a..5805b5c5ac 100644 --- a/internal/cli/praefect/subcmd_track_repositories.go +++ b/internal/cli/praefect/subcmd_track_repositories.go @@ -35,8 +35,7 @@ func newTrackRepositoriesCommand() *cli.Command { "If -replicate-immediately is used, the command will attempt to replicate the repositories\n" + "to the secondaries. Otherwise, replication jobs will be created and will be executed\n" + "eventually by Praefect itself.\n", - HideHelpCommand: true, - Action: trackRepositoriesAction, + Action: trackRepositoriesAction, Flags: []cli.Flag{ &cli.BoolFlag{ Name: "replicate-immediately", diff --git a/internal/cli/praefect/subcmd_track_repository.go b/internal/cli/praefect/subcmd_track_repository.go index d433f23929..ab6326fa16 100644 --- a/internal/cli/praefect/subcmd_track_repository.go +++ b/internal/cli/praefect/subcmd_track_repository.go @@ -37,8 +37,7 @@ func newTrackRepositoryCommand() *cli.Command { "the repository to the secondaries. The command is blocked until the\n" + "replication finishes. Otherwise, replication jobs will be created and will " + "be executed eventually by Praefect in the background.\n", - HideHelpCommand: true, - Action: trackRepositoryAction, + Action: trackRepositoryAction, Flags: []cli.Flag{ &cli.StringFlag{ Name: paramVirtualStorage, diff --git a/internal/cli/praefect/subcmd_verify.go b/internal/cli/praefect/subcmd_verify.go index 6c5da4a56c..8b32a80cea 100644 --- a/internal/cli/praefect/subcmd_verify.go +++ b/internal/cli/praefect/subcmd_verify.go @@ -32,8 +32,7 @@ Examples: - praefect --config praefect.config.toml verify --repository-id 1 - praefect --config praefect.config.toml verify --virtual-storage default - praefect --config praefect.config.toml verify --virtual-storage default --storage `, - HideHelpCommand: true, - Action: verifyAction, + Action: verifyAction, Flags: []cli.Flag{ &cli.Int64Flag{ Name: "repository-id", diff --git a/tools/test-boot/main.go b/tools/test-boot/main.go index a9739b00b7..2b78a5f5b0 100644 --- a/tools/test-boot/main.go +++ b/tools/test-boot/main.go @@ -184,10 +184,9 @@ func testBoot(appCtx *cli.Context) error { func main() { app := cli.App{ - Name: "test-boot", - Usage: "smoke-test the bootup process of Gitaly", - Action: testBoot, - HideHelpCommand: true, + Name: "test-boot", + Usage: "smoke-test the bootup process of Gitaly", + Action: testBoot, Flags: []cli.Flag{ &cli.BoolFlag{ Name: "bundled-git", -- GitLab