v3.9.0
===================================================================== --- Changes ------------------------------ - scwrypts runner has new arguments -q/--quiet allows quiet-mode operation while still logging to logfiles -v/--verbose forces verbose mode --version longform required (-v is now for "verbose" mode) - scwrypts runner now auto-detects certain CLI usage, running in quiet, logged mode if pattern match successfully identifies a single scwrypt (or when using --name); use --verbose to override this behavior - 'k exec' no longer requires double '--' if a '--' comes after - old : k exec -it my-pod-0 -- -- /bin/sh + new : k exec -it my-pod-0 -- /bin/sh + still works : k -- exec -it my-pod-0 -- /bin/sh --- Bug Fixes ---------------------------- - fixed various plugins/kubectl auto-completion settings; arguments after '--' or profile number (e.g. 'k 1 get deployments') will now appropriately autocomplete in the indicated profile - helm template functions now work on related .tpl files as well (renders from chart root) - fixed some goofy UTF-8 icons in zsh/lib/utils/io --- New Features ------------------------- - (experimental) scwrypts zsh plugin for interactive command selection (like CTRL+SPACE), but allows you to build command arguments, providing help dialogue for the selected command --- New Scripts -------------------------- - zsh/misc/tally ) helps keep tally-counts of things; helpful when running long scripts "what iteration am I on"
This commit is contained in:
parent
72e831da33
commit
f3e70c61cb
@ -2,30 +2,45 @@
|
||||
command -v compdef >/dev/null 2>&1 || return 0
|
||||
#####################################################################
|
||||
|
||||
_k() {
|
||||
local C=$(k meta get context)
|
||||
local NS=$(k meta get namespace)
|
||||
for CLI in kubectl helm flux
|
||||
do
|
||||
eval "_${CLI[1]}() {
|
||||
local SUBSESSION=0
|
||||
echo \${words[2]} | grep -q '^[0-9]\\+$' && SUBSESSION=\${words[2]}
|
||||
|
||||
local KUBEWORDS=(kubectl)
|
||||
[ $C ] && KUBEWORDS+=(--context $C)
|
||||
[ $NS ] && KUBEWORDS+=(--namespace $NS)
|
||||
local PASSTHROUGH_WORDS=($CLI)
|
||||
[[ \$CURRENT -gt 2 ]] && echo \${words[2]} | grep -qv '^[0-9]\\+$' && {
|
||||
local KUBECONTEXT=\$(k \$SUBSESSION meta get context)
|
||||
local NAMESPACE=\$(k \$SUBSESSION meta get namespace)
|
||||
|
||||
words="$KUBEWORDS ${words[@]:1}"
|
||||
_kubectl
|
||||
}
|
||||
[ \$KUBECONTEXT ] \
|
||||
&& PASSTHROUGH_WORDS+=($([[ $CLI =~ ^helm$ ]] && echo '--kube-context' || echo '--context') \$KUBECONTEXT) \
|
||||
;
|
||||
[ \$NAMESPACE ] \
|
||||
&& PASSTHROUGH_WORDS+=(--namespace \$NAMESPACE) \
|
||||
;
|
||||
}
|
||||
|
||||
compdef _k k
|
||||
local DELIMIT_COUNT=0
|
||||
local WORD
|
||||
for WORD in \${words[@]:1}
|
||||
do
|
||||
case \$WORD in
|
||||
[0-9]* ) continue ;;
|
||||
-- )
|
||||
echo \$words | grep -q 'exec' && ((DELIMIT_COUNT+=1))
|
||||
[[ \$DELIMIT_COUNT -eq 0 ]] && ((DELIMIT_COUNT+=1)) && continue
|
||||
;;
|
||||
esac
|
||||
PASSTHROUGH_WORDS+=(\"\$WORD\")
|
||||
done
|
||||
|
||||
#####################################################################
|
||||
_h() {
|
||||
local C=$(k meta get context)
|
||||
local NS=$(k meta get namespace)
|
||||
echo \"\$words\" | grep -q '\\s\\+$' && PASSTHROUGH_WORDS+=(' ')
|
||||
|
||||
local KUBEWORDS=(kubectl)
|
||||
[ $C ] && KUBEWORDS+=(--context $C)
|
||||
[ $NS ] && KUBEWORDS+=(--namespace $NS)
|
||||
words=\"\$PASSTHROUGH_WORDS\"
|
||||
_$CLI
|
||||
}
|
||||
"
|
||||
|
||||
words="$KUBEWORDS ${words[@]:1}"
|
||||
_helm
|
||||
}
|
||||
compdef _h h
|
||||
compdef _${CLI[1]} ${CLI[1]}
|
||||
done
|
||||
|
@ -110,7 +110,11 @@ _SCWRYPTS_KUBECTL_DRIVER() {
|
||||
shift 1
|
||||
;;
|
||||
|
||||
-- ) shift 1; break ;;
|
||||
-- )
|
||||
echo $USER_ARGS | grep -q 'exec' && USER_ARGS+=(--)
|
||||
shift 1
|
||||
break
|
||||
;;
|
||||
|
||||
* )
|
||||
[ ! $CUSTOM_COMMAND ] && {
|
||||
|
175
run
175
run
@ -6,24 +6,35 @@ source "${0:a:h}/zsh/lib/import.driver.zsh" || exit 42
|
||||
|
||||
__RUN() {
|
||||
local USAGE='
|
||||
usage: scwrypts [OPTIONS ...] SCRIPT -- [SCRIPT OPTIONS ...]
|
||||
usage: scwrypts [... options ...] [patterns] -- [...script options...]
|
||||
|
||||
OPTIONS
|
||||
-g, --group <group-name> only use scripts from the indicated group
|
||||
-t, --type <type-name> only use scripts of the indicated type
|
||||
-m, --name <scwrypt-name> only run the script if there is an exact match
|
||||
(requires type and group)
|
||||
options:
|
||||
selection
|
||||
-m, --name <scwrypt-name> only run the script if there is an exact match
|
||||
(requires type and group)
|
||||
-g, --group <group-name> only use scripts from the indicated group
|
||||
-t, --type <type-name> only use scripts of the indicated type
|
||||
|
||||
-y, --yes auto-accept all [yn] prompts through current scwrypt
|
||||
-e, --env <env-name> set environment; overwrites SCWRYPTS_ENV
|
||||
-n, --no-log skip logging and run in quiet mode
|
||||
runtime
|
||||
-y, --yes auto-accept all [yn] prompts through current scwrypt
|
||||
-e, --env <env-name> set environment; overwrites SCWRYPTS_ENV
|
||||
-q, --quiet run in quiet mode
|
||||
-n, --no-log skip the log file and run in quiet mode
|
||||
-v, --verbose override quiet mode settings and print all debug dialogue
|
||||
|
||||
--update update scwrypts library to latest version
|
||||
--list-envs print out environment list and exit
|
||||
alternate commands
|
||||
-h, --help display this message and exit
|
||||
-l, --list print out command list and exit
|
||||
--list-envs print out environment list and exit
|
||||
--update update scwrypts library to latest version
|
||||
--version print out scwrypts version and exit
|
||||
|
||||
patterns:
|
||||
- a list of glob patterns to loose-match a scwrypt by name
|
||||
|
||||
-v, --version print out scwrypts version and exit
|
||||
-l, --list print out command list and exit
|
||||
-h, --help display this message and exit
|
||||
script options:
|
||||
- everything after "--" is forwarded to the scwrypt you run
|
||||
(usually "-- --help" will provide more information)
|
||||
'
|
||||
cd "$SCWRYPTS_ROOT"
|
||||
|
||||
@ -32,70 +43,29 @@ __RUN() {
|
||||
|
||||
local VARSPLIT SEARCH_GROUP SEARCH_TYPE SEARCH_NAME
|
||||
|
||||
local ALLOW_LOGFILE=1
|
||||
local VERBOSE=1
|
||||
|
||||
[ $CI ] && [ ! $SCWRYPTS_CI_FORCE_NON_VERBOSE ] && VERBOSE=2
|
||||
|
||||
local ERROR=0
|
||||
|
||||
while [[ $# -gt 0 ]]
|
||||
do
|
||||
case $1 in
|
||||
-t | --type )
|
||||
[ ! $2 ] && ERROR "missing value for argument $1" && break
|
||||
SEARCH_TYPE=$2
|
||||
shift 2
|
||||
;;
|
||||
-g | --group )
|
||||
[ ! $2 ] && ERROR "missing value for argument $1" && break
|
||||
SEARCH_GROUP=$2
|
||||
shift 2
|
||||
;;
|
||||
-m | --name )
|
||||
[ ! $2 ] && ERROR "missing value for argument $1" && break
|
||||
SEARCH_NAME=$2
|
||||
shift 2
|
||||
;;
|
||||
|
||||
-[a-z][a-z]* )
|
||||
VARSPLIT=$(echo "$1 " | sed 's/^\(-.\)\(.*\) /\1 -\2/')
|
||||
set -- $(echo " $VARSPLIT ") ${@:2}
|
||||
;;
|
||||
|
||||
-h | --help )
|
||||
USAGE
|
||||
-h | --help ) USAGE; return 0 ;;
|
||||
-l | --list ) SCWRYPTS__GET_AVAILABLE_SCWRYPTS; return 0 ;;
|
||||
--list-envs ) SCWRYPTS__GET_ENV_NAMES; return 0 ;;
|
||||
--version )
|
||||
echo scwrypts $(git -C "$SCWRYPTS__ROOT__scwrypts" describe --tags)
|
||||
return 0
|
||||
;;
|
||||
|
||||
-n | --no-log )
|
||||
[ ! $SUBSCWRYPT ] && SUBSCWRYPT=0
|
||||
shift 1
|
||||
;;
|
||||
|
||||
-y | --yes )
|
||||
export __SCWRYPTS_YES=1
|
||||
shift 1
|
||||
;;
|
||||
|
||||
-e | --env )
|
||||
[ ! $2 ] && ERROR "missing value for argument $1" && break
|
||||
[ ! $SUBSCWRYPTS ] \
|
||||
&& [ $ENV_NAME ] \
|
||||
&& WARNING 'overwriting session environment' \
|
||||
;
|
||||
|
||||
ENV_NAME="$2"
|
||||
STATUS "using CLI environment '$ENV_NAME'"
|
||||
shift 2
|
||||
;;
|
||||
-l | --list )
|
||||
SCWRYPTS__GET_AVAILABLE_SCWRYPTS
|
||||
return 0
|
||||
;;
|
||||
--list-envs )
|
||||
SCWRYPTS__GET_ENV_NAMES
|
||||
return 0
|
||||
;;
|
||||
-v | --version )
|
||||
echo scwrypts $(cd "$SCWRYPTS__ROOT__scwrypts"; git describe --tags)
|
||||
return 0
|
||||
;;
|
||||
--update )
|
||||
cd "$SCWRYPTS__ROOT__scwrypts"
|
||||
git fetch --quiet origin main
|
||||
@ -118,24 +88,53 @@ __RUN() {
|
||||
}
|
||||
return 0
|
||||
;;
|
||||
-- )
|
||||
shift 1
|
||||
break # pass arguments after '--' to the scwrypt
|
||||
;;
|
||||
--* )
|
||||
ERROR "unrecognized argument '$1'"
|
||||
|
||||
-m | --name )
|
||||
[ ! $2 ] && ERROR "missing value for argument $1" && break
|
||||
SEARCH_NAME=$2
|
||||
shift 1
|
||||
;;
|
||||
* )
|
||||
SEARCH_PATTERNS+=($1)
|
||||
|
||||
-g | --group )
|
||||
[ ! $2 ] && ERROR "missing value for argument $1" && break
|
||||
SEARCH_GROUP=$2
|
||||
shift 1
|
||||
;;
|
||||
|
||||
-t | --type )
|
||||
[ ! $2 ] && ERROR "missing value for argument $1" && break
|
||||
SEARCH_TYPE=$2
|
||||
shift 1
|
||||
;;
|
||||
|
||||
-y | --yes ) export __SCWRYPTS_YES=1 ;;
|
||||
-q | --quiet ) VERBOSE=0 ;;
|
||||
-n | --no-log ) VERBOSE=0 ; [ ! $SUBSCWRYPT ] && SUBSCWRYPT=0 ;;
|
||||
-v | --verbose ) VERBOSE=2 ;;
|
||||
|
||||
-e | --env )
|
||||
[ ! $2 ] && ERROR "missing value for argument $1" && break
|
||||
[ ! $SUBSCWRYPTS ] \
|
||||
&& [ $ENV_NAME ] \
|
||||
&& WARNING 'overwriting session environment' \
|
||||
;
|
||||
|
||||
ENV_NAME="$2"
|
||||
STATUS "using CLI environment '$ENV_NAME'"
|
||||
shift 1
|
||||
;;
|
||||
|
||||
|
||||
-- ) shift 1; break ;; # pass arguments after '--' to the scwrypt
|
||||
--* ) ERROR "unrecognized argument '$1'" ;;
|
||||
* ) SEARCH_PATTERNS+=($1) ;;
|
||||
esac
|
||||
shift 1
|
||||
done
|
||||
|
||||
[ $SEARCH_NAME ] && {
|
||||
[ ! $SEARCH_TYPE ] && ERROR '--name requires --type argument'
|
||||
[ ! $SEARCH_GROUP ] && ERROR '--name requires --group argument'
|
||||
[ $SEARCH_TYPE ] || ERROR '--name requires --type argument'
|
||||
[ $SEARCH_GROUP ] || ERROR '--name requires --group argument'
|
||||
}
|
||||
|
||||
CHECK_ERRORS
|
||||
@ -209,9 +208,12 @@ __RUN() {
|
||||
local TYPE="$SEARCH_TYPE"
|
||||
local GROUP="$SEARCH_GROUP"
|
||||
|
||||
[[ $(echo $SCWRYPTS_AVAILABLE | wc -l) -eq 2 ]] \
|
||||
&& SCWRYPT_SELECTION=$(echo $SCWRYPTS_AVAILABLE | tail -n1) \
|
||||
|| SCWRYPT_SELECTION=$(echo $SCWRYPTS_AVAILABLE | FZF "select a script to run" --header-lines 1)
|
||||
[[ $(echo $SCWRYPTS_AVAILABLE | wc -l) -eq 2 ]] && {
|
||||
SCWRYPT_SELECTION=$(echo $SCWRYPTS_AVAILABLE | tail -n1)
|
||||
[[ $VERBOSE -eq 2 ]] || VERBOSE=0
|
||||
} || {
|
||||
SCWRYPT_SELECTION=$(echo $SCWRYPTS_AVAILABLE | FZF "select a script to run" --header-lines 1)
|
||||
}
|
||||
[ $SCWRYPT_SELECTION ] || exit 2
|
||||
|
||||
SCWRYPTS__SEPARATE_SCWRYPT_SELECTION $SCWRYPT_SELECTION
|
||||
@ -254,7 +256,8 @@ __RUN() {
|
||||
|
||||
##########################################
|
||||
|
||||
[ ! $SUBSCWRYPT ] \
|
||||
: \
|
||||
&& [ ! $SUBSCWRYPT ] \
|
||||
&& [[ $ENV_NAME =~ prod ]] \
|
||||
&& { __VALIDATE_UPSTREAM_TIMELINE || ABORT; }
|
||||
|
||||
@ -268,6 +271,7 @@ __RUN() {
|
||||
local LOGFILE=$(__GET_LOGFILE)
|
||||
|
||||
local HEADER=$(
|
||||
[[ $VERBOSE -gt 0 ]] || return 0
|
||||
[ $SUBSCWRYPT ] && return 0
|
||||
echo '====================================================================='
|
||||
echo "script : $SCWRYPT_GROUP $SCWRYPT_TYPE $SCWRYPT_NAME"
|
||||
@ -289,14 +293,14 @@ __RUN() {
|
||||
|
||||
{
|
||||
[ $HEADER ] && echo $HEADER
|
||||
echo '\033[1;33m--- BEGIN OUTPUT -------------------------\033[0m'
|
||||
[[ $VERBOSE -gt 0 ]] && echo '\033[1;33m--- BEGIN OUTPUT -------------------------\033[0m'
|
||||
(eval "$RUN_STRING $(printf "%q " "$@")")
|
||||
EXIT_CODE=$?
|
||||
echo '\033[1;33m--- END OUTPUT ---------------------------\033[0m'
|
||||
[[ $VERBOSE -gt 0 ]] && echo '\033[1;33m--- END OUTPUT ---------------------------\033[0m'
|
||||
|
||||
[[ $EXIT_CODE -eq 0 ]] && EXIT_COLOR='32m' || EXIT_COLOR='31m'
|
||||
|
||||
echo "terminated with\\033[1;$EXIT_COLOR code $EXIT_CODE\\033[0m"
|
||||
[[ $VERBOSE -gt 0 ]] && echo "terminated with\\033[1;$EXIT_COLOR code $EXIT_CODE\\033[0m"
|
||||
} 2>&1 | tee --append "$LOGFILE"
|
||||
|
||||
exit $(\
|
||||
@ -338,10 +342,9 @@ __VALIDATE_UPSTREAM_TIMELINE() {
|
||||
}
|
||||
|
||||
__GET_LOGFILE() {
|
||||
[ $SUBSCWRYPT ] \
|
||||
|| [[ $SCWRYPT_NAME =~ scwrypts/logs ]] \
|
||||
|| [[ $SCWRYPT_NAME =~ interactive ]] \
|
||||
&& return 0
|
||||
[ $SUBSCWRYPT ] && return 0
|
||||
[[ $SCWRYPT_NAME =~ scwrypts/logs ]] && return 0
|
||||
[[ $SCWRYPT_NAME =~ interactive ]] && return 0
|
||||
|
||||
echo "$SCWRYPTS_LOG_PATH/$(echo $GROUP/$TYPE/$NAME | sed 's/^\.\///; s/\//\%/g').log"
|
||||
}
|
||||
|
@ -6,7 +6,7 @@ SCWRYPTS__ZSH_PLUGIN() {
|
||||
local NAME
|
||||
local TYPE
|
||||
local GROUP
|
||||
zle clear-command-line
|
||||
LBUFFER= RBUFFER=
|
||||
[ ! $SCWRYPT_SELECTION ] && { zle accept-line; return 0; }
|
||||
|
||||
SCWRYPTS__SEPARATE_SCWRYPT_SELECTION $SCWRYPT_SELECTION
|
||||
@ -14,13 +14,40 @@ SCWRYPTS__ZSH_PLUGIN() {
|
||||
which scwrypts >/dev/null 2>&1\
|
||||
&& RBUFFER="scwrypts" || RBUFFER="$SCWRYPTS_ROOT/scwrypts"
|
||||
|
||||
RBUFFER+=" --name $NAME --group $GROUP --type $TYPE"
|
||||
RBUFFER+=" --name $NAME --group $GROUP --type $TYPE --verbose"
|
||||
zle accept-line
|
||||
}
|
||||
|
||||
zle -N scwrypts SCWRYPTS__ZSH_PLUGIN
|
||||
bindkey $SCWRYPTS_SHORTCUT scwrypts
|
||||
|
||||
#####################################################################
|
||||
SCWRYPTS__ZSH_BUILDER_PLUGIN() {
|
||||
local SCWRYPT_SELECTION=$(SCWRYPTS__GET_AVAILABLE_SCWRYPTS | FZF 'select a script' --header-lines 1)
|
||||
local NAME
|
||||
local TYPE
|
||||
local GROUP
|
||||
LBUFFER= RBUFFER=
|
||||
[ ! $SCWRYPT_SELECTION ] && { zle accept-line; return 0; }
|
||||
|
||||
SCWRYPTS__SEPARATE_SCWRYPT_SELECTION $SCWRYPT_SELECTION
|
||||
|
||||
scwrypts --name $NAME --group $GROUP --type $TYPE -- --help >&2 || {
|
||||
zle accept-line
|
||||
return 0
|
||||
}
|
||||
echo
|
||||
|
||||
zle reset-prompt
|
||||
which scwrypts >/dev/null 2>&1\
|
||||
&& LBUFFER="scwrypts" || LBUFFER="$SCWRYPTS_ROOT/scwrypts"
|
||||
|
||||
LBUFFER+=" --name $NAME --group $GROUP --type $TYPE -- "
|
||||
}
|
||||
|
||||
zle -N scwrypts-builder SCWRYPTS__ZSH_BUILDER_PLUGIN
|
||||
bindkey $SCWRYPTS_BUILDER_SHORTCUT scwrypts-builder
|
||||
|
||||
#####################################################################
|
||||
SCWRYPTS__ZSH_PLUGIN_ENV() {
|
||||
local RESET='reset'
|
||||
|
@ -7,8 +7,9 @@ SCWRYPTS_GROUPS=()
|
||||
SCWRYPTS_CONFIG_PATH="$HOME/.config/scwrypts"
|
||||
SCWRYPTS_DATA_PATH="$HOME/.local/share/scwrypts"
|
||||
|
||||
SCWRYPTS_SHORTCUT=' |