From eb46ec54bec44579c94418de56d9956f78451bc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Batuhan=20Apayd=C4=B1n?= Date: Mon, 4 Oct 2021 12:24:44 +0300 Subject: [PATCH] feat: auto-completion support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Batuhan Apaydın Co-authored-by: Furkan Türkal Co-authored-by: Erkan Zileli --- cmd/cosign/cli/commands.go | 1 + cmd/cosign/cli/completion.go | 71 ++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 cmd/cosign/cli/completion.go diff --git a/cmd/cosign/cli/commands.go b/cmd/cosign/cli/commands.go index f501f4bf1e0b..d9b4f4d02781 100644 --- a/cmd/cosign/cli/commands.go +++ b/cmd/cosign/cli/commands.go @@ -77,6 +77,7 @@ func New() *cobra.Command { addInitialize(cmd) addPIVTool(cmd) addVersion(cmd) + addCompletion(cmd) return cmd } diff --git a/cmd/cosign/cli/completion.go b/cmd/cosign/cli/completion.go new file mode 100644 index 000000000000..10802730ae45 --- /dev/null +++ b/cmd/cosign/cli/completion.go @@ -0,0 +1,71 @@ +// +// Copyright 2021 The Sigstore Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package cli + +import ( + "os" + + "github.com/spf13/cobra" +) + +func addCompletion(topLevel *cobra.Command) { + completionCmd := &cobra.Command{ + Use: "completion [bash|zsh|fish|powershell]", + Short: "Generate completion script", + Long: `To load completions: +Bash: + $ source <(cosign completion bash) + # To load completions for each session, execute once: + # Linux: + $ cosign completion bash > /etc/bash_completion.d/cosign + # macOS: + $ cosign completion bash > /usr/local/etc/bash_completion.d/cosign +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: + $ cosign completion zsh > "${fpath[1]}/_cosign" + # You will need to start a new shell for this setup to take effect. +fish: + $ cosign completion fish | source + # To load completions for each session, execute once: + $ cosign completion fish > ~/.config/fish/completions/cosign.fish +PowerShell: + PS> cosign completion powershell | Out-String | Invoke-Expression + # To load completions for every new session, run: + PS> cosign completion powershell > cosign.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": + cmd.Root().GenBashCompletion(os.Stdout) + case "zsh": + cmd.Root().GenZshCompletion(os.Stdout) + case "fish": + cmd.Root().GenFishCompletion(os.Stdout, true) + case "powershell": + cmd.Root().GenPowerShellCompletionWithDesc(os.Stdout) + } + }, + } + + topLevel.AddCommand(completionCmd) +}