diff --git a/plugins/kubectl/driver/kubectl.driver.zsh b/plugins/kubectl/driver/kubectl.driver.zsh index b78523f..bad83d3 100644 --- a/plugins/kubectl/driver/kubectl.driver.zsh +++ b/plugins/kubectl/driver/kubectl.driver.zsh @@ -171,7 +171,7 @@ _SCWRYPTS_KUBECTL_DRIVER() { [ $NAMESPACE ] && CLI_ARGS+=(--namespace $NAMESPACE) [[ $VERBOSE -eq 1 ]] && { - INFO " + REMINDER " context '$CONTEXT' namespace '$NAMESPACE' environment '$SCWRYPTS_ENV' @@ -180,7 +180,7 @@ _SCWRYPTS_KUBECTL_DRIVER() { STATUS "running $CLI ${CLI_ARGS[@]} ${USER_ARGS[@]}" } || { [[ $(_SCWRYPTS_KUBECTL_SETTINGS get context) =~ ^show$ ]] && { - INFO "$SCWRYPTS_ENV.$SUBSESSION : $CLI ${CLI_ARGS[@]} ${USER_ARGS[@]}" + REMINDER "$SCWRYPTS_ENV.$SUBSESSION : $CLI ${CLI_ARGS[@]} ${USER_ARGS[@]}" } } $CLI ${CLI_ARGS[@]} ${USER_ARGS[@]} diff --git a/plugins/kubectl/lib/kubectl.module.zsh b/plugins/kubectl/lib/kubectl.module.zsh index 3456452..b47d2ae 100644 --- a/plugins/kubectl/lib/kubectl.module.zsh +++ b/plugins/kubectl/lib/kubectl.module.zsh @@ -112,8 +112,8 @@ KUBECTL__SERVE() { SERVICE_PASSWORD="$(KUBECTL__GET_SERVICE_PASSWORD)" KUBECTL__SERVICE_PARSE - INFO "attempting to serve ${NAMESPACE}/${SERVICE_NAME}:${SERVICE_PORT}" - [ $SERVICE_PASSWORD ] && INFO "password : $SERVICE_PASSWORD" + REMINDER "attempting to serve ${NAMESPACE}/${SERVICE_NAME}:${SERVICE_PORT}" + [ $SERVICE_PASSWORD ] && REMINDER "password : $SERVICE_PASSWORD" KUBECTL port-forward service/$SERVICE_NAME $SERVICE_PORT } diff --git a/scwrypts b/scwrypts index 0fdf4a9..a716af4 100755 --- a/scwrypts +++ b/scwrypts @@ -1,12 +1,17 @@ #!/bin/zsh - export EXECUTION_DIR=$(pwd) source "$(dirname $(readlink -f "$0"))/zsh/lib/import.driver.zsh" || exit 42 - ##################################################################### () { cd "$SCWRYPTS_ROOT__scwrypts" GIT_SCWRYPTS() { git -C "$SCWRYPTS_ROOT__scwrypts" $@; } + + local INSTALLATION_TYPE + [ ! -d "$SCWRYPTS_ROOT__scwrypts/.git" ] && [ ! -f "$SCWRYPTS_ROOT__scwrypts/.git" ] \ + && INSTALLATION_TYPE=$(cat "$SCWRYPTS_ROOT__scwrypts/MANAGED_BY" 2>/dev/null) \ + || INSTALLATION_TYPE=manual \ + ; + local ERRORS=0 local USAGE=' usage: scwrypts [...options...] [...patterns...] -- [...script options...] @@ -22,10 +27,10 @@ source "$(dirname $(readlink -f "$0"))/zsh/lib/import.driver.zsh" || exit 42 -y, --yes auto-accept all [yn] prompts through current scwrypt -e, --env set environment; overwrites SCWRYPTS_ENV -n shorthand for "--log-level 0" - -v, --log-level [0-4] set scwrypts log level to one of the following: + -v, --log-level [0-4] set incremental scwrypts log level to one of the following: 0 : only command output and critical failures; skips logfile - 1 : add success / failure messages - 2 : include status update messages + 1 : include success / failure messages + 2 : include status update messages 3 : (default) include warning messages 4 : include debug messages @@ -81,30 +86,51 @@ source "$(dirname $(readlink -f "$0"))/zsh/lib/import.driver.zsh" || exit 42 ;; --version ) - echo scwrypts $(GIT_SCWRYPTS describe --tags) + case $INSTALLATION_TYPE in + manual ) echo "scwrypts $(GIT_SCWRYPTS describe --tags) (via GIT)" ;; + * ) echo scwrypts $(cat "$SCWRYPTS_ROOT__scwrypts/VERSION") ;; + esac return 0 ;; --update ) - GIT_SCWRYPTS fetch --quiet origin main - GIT_SCWRYPTS fetch --quiet origin main --tags - local SYNC_STATUS=$? - - GIT_SCWRYPTS diff --exit-code origin/main -- . >/dev/null 2>&1 - local DIFF_STATUS=$? - - [[ $SYNC_STATUS -eq 0 ]] && [[ $DIFF_STATUS -eq 0 ]] && { - SUCCESS 'already up-to-date with origin/main' - } || { - GIT_SCWRYPTS rebase --autostash origin/main \ - && SUCCESS 'up-to-date with origin/main' \ - && GIT_SCWRYPTS log -n1 \ - || { - GIT_SCWRYPTS rebase --abort - ERROR 'unable to update scwrypts; please try manual upgrade' - REMINDER "installation in '$(pwd)'" + case $INSTALLATION_TYPE in + aur ) + SCWRYPTS_LOG_LEVEL=3 REMINDER " + This installation is built from the AUR. Update through 'makepkg' or use + your preferred AUR package management tool (e.g. 'yay -Syu scwrypts') + " + ;; + + manual ) + GIT_SCWRYPTS fetch --quiet origin main + GIT_SCWRYPTS fetch --quiet origin main --tags + local SYNC_STATUS=$? + + GIT_SCWRYPTS diff --exit-code origin/main -- . >/dev/null 2>&1 + local DIFF_STATUS=$? + + [[ $SYNC_STATUS -eq 0 ]] && [[ $DIFF_STATUS -eq 0 ]] && { + SUCCESS 'already up-to-date with origin/main' + } || { + GIT_SCWRYPTS rebase --autostash origin/main \ + && SUCCESS 'up-to-date with origin/main' \ + && GIT_SCWRYPTS log -n1 \ + || { + GIT_SCWRYPTS rebase --abort + ERROR 'unable to update scwrypts; please try manual upgrade' + REMINDER "installation in '$SCWRYPTS_ROOT__scwrypts'" + } } - } + ;; + + * ) + SCWRYPTS_LOG_LEVEL=3 REMINDER " + This is a managed installation of scwrypts. Please update through your + system package manager. + " + ;; + esac return 0 ;; @@ -292,30 +318,32 @@ source "$(dirname $(readlink -f "$0"))/zsh/lib/import.driver.zsh" || exit 42 [ ! $SUBSCWRYPT ] && export SUBSCWRYPT=0 - [[ $SUBSCWRYPT -eq 0 ]] && [[ $ENV_NAME =~ prod ]] && [[ $SCWRYPTS_LOG_LEVEL -gt 0 ]] && { - STATUS "on '$ENV_NAME'; checking diff against origin/main" + [[ $INSTALLATION_TYPE =~ ^manual$ ]] && { + [[ $SUBSCWRYPT -eq 0 ]] && [[ $ENV_NAME =~ prod ]] && [[ $SCWRYPTS_LOG_LEVEL -gt 0 ]] && { + STATUS "on '$ENV_NAME'; checking diff against origin/main" - local WARNING_MESSAGE + local WARNING_MESSAGE - [ ! $WARNING_MESSAGE ] && { - GIT_SCWRYPTS fetch --quiet origin main \ - || WARNING_MESSAGE='I am unable to verify your scwrypts version' - } + [ ! $WARNING_MESSAGE ] && { + GIT_SCWRYPTS fetch --quiet origin main \ + || WARNING_MESSAGE='I am unable to verify your scwrypts version' + } - [ ! $WARNING_MESSAGE ] && { - GIT_SCWRYPTS diff --exit-code origin/main -- . >/dev/null 2>&1 \ - || WARNING_MESSAGE='your scwrypts is currently out-of-date' - } + [ ! $WARNING_MESSAGE ] && { + GIT_SCWRYPTS diff --exit-code origin/main -- . >/dev/null 2>&1 \ + || WARNING_MESSAGE='your scwrypts is currently out-of-date' + } - [ $WARNING_MESSAGE ] && { - [[ $SCWRYPTS_LOG_LEVEL -lt 3 ]] && { - REMINDER "you are running in ${__BRIGHT_RED}production${__BRIGHT_MAGENTA} and $WARNING_MESSAGE" - } || { - GIT_SCWRYPTS diff --exit-code origin/main -- . >&2 - WARNING "you are trying to run in ${__BRIGHT_RED}production${__YELLOW} but $WARNING_MESSAGE (relevant diffs and errors above)" - yN 'continue?' || { - REMINDER "you can use 'scwrypts --update' to quickly update scwrypts to latest" - ABORT + [ $WARNING_MESSAGE ] && { + [[ $SCWRYPTS_LOG_LEVEL -lt 3 ]] && { + REMINDER "you are running in ${__BRIGHT_RED}production${__BRIGHT_MAGENTA} and $WARNING_MESSAGE" + } || { + GIT_SCWRYPTS diff --exit-code origin/main -- . >&2 + WARNING "you are trying to run in ${__BRIGHT_RED}production${__YELLOW} but $WARNING_MESSAGE (relevant diffs and errors above)" + yN 'continue?' || { + REMINDER "you can use 'scwrypts --update' to quickly update scwrypts to latest" + ABORT + } } } } @@ -368,6 +396,7 @@ source "$(dirname $(readlink -f "$0"))/zsh/lib/import.driver.zsh" || exit 42 ##################################################################### ### run the scwrypt ################################################# ##################################################################### + set -o pipefail { [ $HEADER ] && echo $HEADER diff --git a/scwrypts.plugin.zsh b/scwrypts.plugin.zsh index 0480f66..3f5c573 100644 --- a/scwrypts.plugin.zsh +++ b/scwrypts.plugin.zsh @@ -1,8 +1,16 @@ +##################################################################### + +command -v scwrypts &>/dev/null || { + echo 'scwrypts is required in your PATH in order to use the zsh plugins; skipping' >&2 + return 0 +} + NO_EXPORT_CONFIG=1 source "${0:a:h}/zsh/lib/import.driver.zsh" || return 42 ##################################################################### + SCWRYPTS__ZSH_PLUGIN() { - local SCWRYPT_SELECTION=$(SCWRYPTS__GET_AVAILABLE_SCWRYPTS | FZF 'select a script' --header-lines 1) + local SCWRYPT_SELECTION=$(scwrypts --list | FZF 'select a script' --header-lines 1) local NAME local TYPE local GROUP @@ -22,8 +30,10 @@ 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 SCWRYPT_SELECTION=$(scwrypts --list | FZF 'select a script' --header-lines 1) + echo $SCWRYPT_SELECTION >&2 local NAME local TYPE local GROUP @@ -32,7 +42,7 @@ SCWRYPTS__ZSH_BUILDER_PLUGIN() { SCWRYPTS__SEPARATE_SCWRYPT_SELECTION $SCWRYPT_SELECTION - scwrypts --name $NAME --group $GROUP --type $TYPE -- --help >&2 || { + scwrypts -n --name $NAME --group $GROUP --type $TYPE -- --help >&2 || { zle accept-line return 0 } @@ -49,6 +59,7 @@ zle -N scwrypts-builder SCWRYPTS__ZSH_BUILDER_PLUGIN bindkey $SCWRYPTS_BUILDER_SHORTCUT scwrypts-builder ##################################################################### + SCWRYPTS__ZSH_PLUGIN_ENV() { local RESET='reset' local SELECTED=$(\ diff --git a/zsh/lib/config.zsh b/zsh/lib/config.zsh index d236a6c..108460f 100644 --- a/zsh/lib/config.zsh +++ b/zsh/lib/config.zsh @@ -7,6 +7,8 @@ [ ! $SCWRYPTS_ROOT ] && [ -d /usr/share/scwrypts ] \ && SCWRYPTS_ROOT=/usr/share/scwrypts +export SCWRYPTS_ROOT__scwrypts="$SCWRYPTS_ROOT" + ##################################################################### DEFAULT_CONFIG="$SCWRYPTS_ROOT/zsh/lib/config.user.zsh" @@ -35,8 +37,7 @@ export \ SCWRYPTS_OUTPUT_PATH \ ; -SCWRYPTS_GROUPS+=(scwrypts) # 'scwrypts' group is required! -SCWRYPTS_GROUPS=($(echo $SCWRYPTS_GROUPS | sed 's/\s\+/\n/g' | sort -u)) +SCWRYPTS_GROUPS=(scwrypts $(echo $SCWRYPTS_GROUPS | sed 's/\s\+/\n/g' | sort -u)) source "$SCWRYPTS_ROOT/zsh/lib/config.group.zsh" \ || FAIL 69 'failed to set up scwrypts group; aborting' diff --git a/zsh/lib/scwrypts/run.module.zsh b/zsh/lib/scwrypts/run.module.zsh index eb2b44f..2fc96b1 100644 --- a/zsh/lib/scwrypts/run.module.zsh +++ b/zsh/lib/scwrypts/run.module.zsh @@ -119,6 +119,27 @@ SCWRYPTS__GET_RUNSTRING__zsh() { || SCWRYPT_FILENAME="$GROUP_PATH/$SCWRYPT_TYPE/$SCWRYPT_NAME" \ ; + SCWRYPTS__GET_RUNSTRING__zsh__generic "$SCWRYPT_FILENAME" + return 0 +} + +SCWRYPTS__GET_RUNSTRING__zsh__generic() { + # boilerplate to allow + # - multiflag splitting (e.g. -abc = -a -b -c) + # - help flag injection (e.g. -h | --help) + # - default USAGE definition (allows USAGE__options style usage definition) + # - required MAIN() function wrapping + # + # this is available automatically in SCWRYPTS_GROUP declaration contexts + # (e.g. my-group.scwrypts.zsh) + local ZSH_FILENAME="$1" + [ $ZSH_FILENAME ] || { + ERROR ' + to use SCWRYPTS__GET_RUNSTRING__zsh__generic, you must provide a + ZSH_FILENAME (arg $1) where the MAIN function is defined + ' + return 1 + } printf " source '$SCWRYPT_FILENAME' CHECK_ENVIRONMENT @@ -154,22 +175,6 @@ SCWRYPTS__GET_RUNSTRING__zsh() { done MAIN \${MAIN_ARGS[@]} } " - - - return 0 -} - -SCWRYPTS__GET_RUNSTRING__zsh_v3() { - WARNING "scwrypts zsh/v3 runstrings are now deprecated; please update to scwrypts v4 format" - - __CHECK_DEPENDENCY zsh || return 1 - - [ $(eval echo '$SCWRYPTS_TYPE__'$SCWRYPT_GROUP) ] \ - && echo "source $GROUP_PATH/$SCWRYPT_NAME" \ - || echo "source $GROUP_PATH/$SCWRYPT_TYPE/$SCWRYPT_NAME" \ - ; - - return 0 } SCWRYPTS__GET_RUNSTRING__py() { diff --git a/zsh/lib/utils/io.fzf.zsh b/zsh/lib/utils/io.fzf.zsh index 672663b..8427557 100644 --- a/zsh/lib/utils/io.fzf.zsh +++ b/zsh/lib/utils/io.fzf.zsh @@ -40,18 +40,3 @@ FZF_USER_INPUT() { # allow user to type custom answers; reconfirm if ambiguous w echo $FZF_OUTPUT [ $FZF_OUTPUT ] } - -##################################################################### -### vvv DEPRECATED vvv ############################################## -##################################################################### - -FZF_HEAD() { # prefer user input over selected - WARNING 'FZF_HEAD is deprecated and will be unavailable in v4.2; please switch to FZF_USER_INPUT (drop-in fix!)' - FZF $@ --print-query | sed '/^$/d' | head -n1; -} -FZF_TAIL() { # prefer selected over user input - WARNING 'FZF_TAIL is deprecated and will be unavailable in v4.2; please switch to FZF_USER_INPUT (drop-in fix!)' - FZF $@ --print-query | sed '/^$/d' | tail -n1; -} - -#####################################################################