diff --git a/internal/cli/completion.go b/internal/cli/completion.go new file mode 100644 index 000000000..f4a554b9f --- /dev/null +++ b/internal/cli/completion.go @@ -0,0 +1,82 @@ +package cli + +import ( + "os" + + "github.com/spf13/cobra" +) + +func completionCmd(cli *cli) *cobra.Command { + cmd := &cobra.Command{ + Use: "completion [bash|zsh|fish|powershell]", + Short: "generate completion script", + Long: `To load completions: + +Bash: + +$ source <(auth0 completion bash) + +# To load completions for each session, execute once: +Linux: + $ auth0 completion bash > /etc/bash_completion.d/auth0 +MacOS: + $ auth0 completion bash > /usr/local/etc/bash_completion.d/auth0 + +Zsh: + +# If shell completion is not already enabled in your environment you will need +# to enable it. You can execute the following once: + +$ echo "autoload -U compinit; compinit" >> ~/.zshrc + +# To load completions for each session, execute once: +$ auth0 completion zsh > "${fpath[1]}/_auth0" + +# You will need to start a new shell for this setup to take effect. + +Fish: + +$ auth0 completion fish | source + +# To load completions for each session, execute once: +$ auth0 completion fish > ~/.config/fish/completions/auth0.fish + +Powershell: + +PS> auth0 completion powershell | Out-String | Invoke-Expression + +# To load completions for every new session, run: +PS> auth0 completion powershell > auth0.ps1 +# and source this file from your powershell profile. +`, + DisableFlagsInUseLine: true, + ValidArgs: []string{"bash", "zsh", "fish", "powershell"}, + Args: cobra.ExactValidArgs(1), + Run: func(cmd *cobra.Command, args []string) { + switch args[0] { + case "bash": + err := cmd.Root().GenBashCompletion(os.Stdout) + if err != nil { + cli.renderer.Errorf(err.Error()) + } + case "zsh": + err := cmd.Root().GenZshCompletion(os.Stdout) + if err != nil { + cli.renderer.Errorf(err.Error()) + } + case "fish": + err := cmd.Root().GenFishCompletion(os.Stdout, true) + if err != nil { + cli.renderer.Errorf(err.Error()) + } + case "powershell": + err := cmd.Root().GenPowerShellCompletion(os.Stdout) + if err != nil { + cli.renderer.Errorf(err.Error()) + } + } + }, + } + + return cmd +} diff --git a/internal/cli/root.go b/internal/cli/root.go index f5ea1b149..5d30cff5d 100644 --- a/internal/cli/root.go +++ b/internal/cli/root.go @@ -58,6 +58,11 @@ func Execute() { rootCmd.AddCommand(rulesCmd(cli)) rootCmd.AddCommand(connectionsCmd(cli)) rootCmd.AddCommand(tryLoginCmd(cli)) + rootCmd.AddCommand(completionCmd(cli)) + + // TODO(cyx): backport this later on using latest auth0/v5. + // rootCmd.AddCommand(actionsCmd(cli)) + // rootCmd.AddCommand(triggersCmd(cli)) if err := rootCmd.ExecuteContext(context.TODO()); err != nil { cli.renderer.Errorf(err.Error())