From 14b0aabb0b3bb8145ad0a5a3ae3683e3d1bc331d Mon Sep 17 00:00:00 2001 From: Ben McClelland Date: Sat, 4 Apr 2026 16:35:48 -0700 Subject: [PATCH] feat: add cli option to generate shell auto completion The urfave/cli/v2 has built-in auto-completion support for bash. This enables generating the auto completions with a cli option that can be added to environment setup scripts. Also adding some distro support scripts for rpm and deb for the auto completion setup. To enable auto completion in zsh, this still needs to be added to user .zshrc: fpath=(/usr/share/zsh/site-functions $fpath) autoload -Uz compinit && compinit Fixes #2015 --- .goreleaser.yaml | 19 +++++++++++++++++++ cmd/versitygw/main.go | 3 ++- extra/versitygw.fish | 6 ++++++ extra/versitygw.sh | 20 ++++++++++++++++++++ extra/versitygw.zsh | 13 +++++++++++++ 5 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 extra/versitygw.fish create mode 100644 extra/versitygw.sh create mode 100644 extra/versitygw.zsh diff --git a/.goreleaser.yaml b/.goreleaser.yaml index b0f36b3a..5bc85da8 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -121,6 +121,25 @@ nfpms: file_info: mode: 0700 + - src: extra/versitygw.sh + dst: /etc/profile.d/versitygw.sh + packager: rpm + + - src: extra/versitygw.sh + dst: /etc/bash_completion.d/versitygw.sh + packager: deb + + - src: extra/versitygw.zsh + dst: /usr/share/zsh/site-functions/_versitygw + packager: rpm + + - src: extra/versitygw.zsh + dst: /usr/share/zsh/vendor-completions/_versitygw + packager: deb + + - src: extra/versitygw.fish + dst: /usr/share/fish/vendor_completions.d/versitygw.fish + # yaml-language-server: $schema=https://goreleaser.com/static/schema.json diff --git a/cmd/versitygw/main.go b/cmd/versitygw/main.go index 0e05ca72..8dec6490 100644 --- a/cmd/versitygw/main.go +++ b/cmd/versitygw/main.go @@ -146,7 +146,8 @@ func main() { func initApp() *cli.App { return &cli.App{ - Usage: "Versity S3 Gateway", + EnableBashCompletion: true, + Usage: "Versity S3 Gateway", Description: `The Versity S3 Gateway is an S3 protocol translator that allows an S3 client to access the supported backend storage as if it was a native S3 service. VersityGW is an open-source project licensed under the Apache 2.0 License. The diff --git a/extra/versitygw.fish b/extra/versitygw.fish new file mode 100644 index 00000000..60c9a6cf --- /dev/null +++ b/extra/versitygw.fish @@ -0,0 +1,6 @@ +# Fish completion for versitygw +function __versitygw_complete + set -l cmd (commandline -opc) + eval $cmd --generate-bash-completion +end +complete -f -c versitygw -a '(__versitygw_complete)' diff --git a/extra/versitygw.sh b/extra/versitygw.sh new file mode 100644 index 00000000..fecea92f --- /dev/null +++ b/extra/versitygw.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Bash completion for versitygw +[ -n "$BASH_VERSION" ] || return 0 + +_cli_bash_autocomplete() { + if [[ "${COMP_WORDS[0]}" != "source" ]]; then + local cur opts + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + if [[ "$cur" == "-"* ]]; then + opts=$( ${COMP_WORDS[@]:0:$COMP_CWORD} ${cur} --generate-bash-completion ) + else + opts=$( ${COMP_WORDS[@]:0:$COMP_CWORD} --generate-bash-completion ) + fi + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi +} + +complete -o bashdefault -o default -o nospace -F _cli_bash_autocomplete versitygw diff --git a/extra/versitygw.zsh b/extra/versitygw.zsh new file mode 100644 index 00000000..9d207470 --- /dev/null +++ b/extra/versitygw.zsh @@ -0,0 +1,13 @@ +#compdef versitygw +_versitygw() { + local -a opts + local cur + cur=${words[-1]} + if [[ "$cur" == "-"* ]]; then + opts=("${(@f)$(${words[1,-2]} ${cur} --generate-bash-completion)}") + else + opts=("${(@f)$(${words[1,-2]} --generate-bash-completion)}") + fi + _describe 'versitygw' opts +} +_versitygw