===================================================================== Big day! V4 is finally live. This INCLUDES some BREAKING CHANGES to ZSH TYPE scwrypts! Please refer to the readme for upgrade details (more specifically docs/upgrade/v3-to-v4.md) Upgrade is SUPER EASY, so please take the time to do so. --- New Features ---------------------------------------------------- - zsh type scwrypts have an upgraded runstring to improve context setup and simplicity to the scwrypt-writer - scwrypts now publishes the package (scwrypts) to PyPi; this provides a simple way to invoke scwrypts from python-based environments as well as the entire scwrypts python library suite pip install scwrypts - scwrypts now publishes the package (scwrypts) to npm; this provides a simple way to invoke scwrypts from nodesjs environments npm install scwrypts --- Bug Fixes ------------------------------------------------------- - scwrypts runner prompts which use the zshbuiltin "read" now appropriately read input from tty, pipe, files, and user input - virtualenv refresh now loads and prepares the scwrypts virtual environments correctly --- Changes --------------------------------------------------------- - created the (-v, --log-level) scwrypts arguments as improvements of and replacements to the --verbose and --no-log flags - (-n) is now an alias for (--log-level 0) - (--no-log) is the same as (-n) for compatibility, but will be removed in 4.2 - zsh/lib/utils/io print functions now *interact with log-level* various log levels will now only display the appropriate console prints for the specified log level - zsh/lib/utils/io:INFO has been renamed to DEBUG to align with log-level output; please use DEBUG for debug messages and REMINDER for important user messages - created zsh/lib/utils/io:FZF_USER_INPUT as a *drop-in replacement* for the confusing FZF_HEAD and FZF_TAIL commands. Update by literally changing any instances of FZF_HEAD or FZF_TAIL with FZF_USER_INPUT - FZF_HEAD and FZF_TAIL will be removed in 4.2 - zsh/lib/utils/io:READ (and other zshbuiltin/read-based prompts) now accept a --force-user-input flag in case important checks should require an admin's approval. This flag will ensure that piped input and the `scwrypts -y` flag are ignored for the single prompt. - zsh/lib/utils/color has been updated to use color names which match the ANSI color names - zsh/hello-world has been reduced to a minimal example; this is to emphasize ease-of-use with v4 - zsh/sanity-check is a scwrypts/run testing helper and detailed starting reference (helpful since hello-world is now minimal) - various refactor, updates, and improvements to the scwrypts runner - migrated all zsh scwrypts and plugins to use v4 runner syntax - zsh - plugins/kubectl - plugins/ci - refactored py/lib into py/lib/scwrypts (PyPi)
191 lines
5.2 KiB
Bash
191 lines
5.2 KiB
Bash
#####################################################################
|
|
|
|
DEPENDENCIES+=()
|
|
REQUIRED_ENV+=()
|
|
|
|
use scwrypts/environment-files
|
|
|
|
#####################################################################
|
|
|
|
SCWRYPTS__GET_AVAILABLE_SCWRYPTS() {
|
|
local TYPE_COLOR='\033[0;37m'
|
|
local GROUP GROUP_PATH GROUP_COLOR LOOKUP_PIDS=()
|
|
{
|
|
echo 'NAME^TYPE^GROUP'
|
|
for GROUP in ${SCWRYPTS_GROUPS}
|
|
do
|
|
GROUP_PATH=$(eval echo '$SCWRYPTS_ROOT__'$GROUP)
|
|
GROUP_COLOR=$(eval echo '$SCWRYPTS_COLOR__'$GROUP)
|
|
|
|
GROUP_TYPE=$(eval echo '$SCWRYPTS_TYPE__'$GROUP)
|
|
[ $GROUP_TYPE ] && MINDEPTH=1 && GROUP_TYPE="$GROUP_TYPE\\/" || MINDEPTH=2
|
|
|
|
command -v SCWRYPTS__LIST_AVAILABLE_SCWRYPTS__$GROUP >/dev/null 2>&1 \
|
|
&& LOOKUP=SCWRYPTS__LIST_AVAILABLE_SCWRYPTS__$GROUP \
|
|
|| LOOKUP=SCWRYPTS__LIST_AVAILABLE_SCWRYPTS__scwrypts \
|
|
;
|
|
|
|
{
|
|
$LOOKUP \
|
|
| sed "s|\\([^/]*\\)/\(.*\)$|$(printf $__COLOR_RESET)\\2^$(printf $TYPE_COLOR)\\1^$(printf $GROUP_COLOR)$GROUP$(printf $__COLOR_RESET)|" \
|
|
} &
|
|
LOOKUP_PIDS+=($!)
|
|
done
|
|
for p in ${LOOKUP_PIDS[@]}; do wait $p; done
|
|
} | column -t -s '^'
|
|
}
|
|
|
|
SCWRYPTS__SEPARATE_SCWRYPT_SELECTION() {
|
|
set -- $(echo $@ | sed -e 's/\x1b\[[0-9;]*m//g')
|
|
while [[ $# -gt 0 ]]
|
|
do
|
|
[ ! $NAME ] && NAME=$1 && shift 1 && continue
|
|
[ ! $TYPE ] && TYPE=$1 && shift 1 && continue
|
|
[ ! $GROUP ] && GROUP=$1 && shift 1 && continue
|
|
shift 1
|
|
done
|
|
}
|
|
|
|
SCWRYPTS__LIST_AVAILABLE_SCWRYPTS__scwrypts() {
|
|
# implementation should output lines of the following format:
|
|
# "${SCWRYPT_TYPE}/${SCWRYPT_NAME}"
|
|
cd "$GROUP_PATH"
|
|
find . -mindepth $MINDEPTH -type f -executable \
|
|
| grep -v '\.git' \
|
|
| grep -v 'node_modules' \
|
|
| sed "s/^\\.\\///; s/\\.[^.]*$//; s/^/$GROUP_TYPE/" \
|
|
| grep -v '^plugins/' \
|
|
;
|
|
}
|
|
|
|
SCWRYPTS__GET_RUNSTRING() {
|
|
local GROUP_PATH=$(eval echo '$SCWRYPTS_ROOT__'$SCWRYPT_GROUP)
|
|
local RUNSTRING
|
|
|
|
[ $SCWRYPT_NAME ] && [ $SCWRYPT_TYPE ] && [ $SCWRYPT_GROUP ] || {
|
|
ERROR 'missing required information to get runstring'
|
|
return 1
|
|
}
|
|
|
|
[ $ENV_REQUIRED ] && [[ $ENV_REQUIRED -eq 1 ]] && [ ! $ENV_NAME ] && {
|
|
ERROR 'missing required information to get runstring'
|
|
return 1
|
|
}
|
|
|
|
[ ! $RUNSTRING ] && typeset -f SCWRYPTS__GET_RUNSTRING__${SCWRYPT_GROUP}__${SCWRYPT_TYPE} >/dev/null 2>&1 && {
|
|
RUNSTRING=$(SCWRYPTS__GET_RUNSTRING__${SCWRYPT_GROUP}__${SCWRYPT_TYPE})
|
|
[ ! $RUNSTRING ] && {
|
|
ERROR "SCWRYPTS__GET_RUNSTRING__${SCWRYPT_GROUP}__${SCWRYPT_TYPE} error"
|
|
return 2
|
|
}
|
|
}
|
|
|
|
[ ! $RUNSTRING ] && typeset -f SCWRYPTS__GET_RUNSTRING__${SCWRYPT_TYPE} >/dev/null 2>&1 && {
|
|
RUNSTRING=$(SCWRYPTS__GET_RUNSTRING__${SCWRYPT_TYPE})
|
|
[ ! $RUNSTRING ] && {
|
|
ERROR "SCWRYPTS__GET_RUNSTRING__${SCWRYPT_TYPE} error"
|
|
return 3
|
|
}
|
|
}
|
|
|
|
[ ! $RUNSTRING ] && {
|
|
ERROR "type ${SCWRYPT_TYPE} (group ${SCWRYPT_GROUP}) has no supported runstring generator"
|
|
return 4
|
|
}
|
|
|
|
RUNSTRING="SCWRYPTS_ENV=$ENV_NAME; $RUNSTRING"
|
|
RUNSTRING="source $SCWRYPTS_ROOT/zsh/lib/import.driver.zsh; $RUNSTRING"
|
|
|
|
local _VIRTUALENV=$(eval echo '$SCWRYPTS_VIRTUALENV_PATH__'$SCWRYPT_GROUP'/$SCWRYPT_TYPE/bin/activate')
|
|
[ -f $_VIRTUALENV ] && RUNSTRING="source $_VIRTUALENV; $RUNSTRING"
|
|
|
|
local G SCWRYPTSENV
|
|
for G in ${SCWRYPTS__GROUPS[@]}
|
|
do
|
|
SCWRYPTSENV="$SCWRYPTS_ENV_PATH/$G/$ENV_NAME"
|
|
[ -f $SCWRYPTSENV ] && RUNSTRING="source $SCWRYPTSENV; $RUNSTRING"
|
|
done
|
|
|
|
echo "$RUNSTRING"
|
|
}
|
|
|
|
SCWRYPTS__GET_RUNSTRING__zsh() {
|
|
__CHECK_DEPENDENCY zsh || return 1
|
|
|
|
local SCWRYPT_FILENAME
|
|
|
|
[ $(eval echo '$SCWRYPTS_TYPE__'$SCWRYPT_GROUP) ] \
|
|
&& SCWRYPT_FILENAME="$GROUP_PATH/$SCWRYPT_NAME" \
|
|
|| SCWRYPT_FILENAME="$GROUP_PATH/$SCWRYPT_TYPE/$SCWRYPT_NAME" \
|
|
;
|
|
|
|
printf "
|
|
source '$SCWRYPT_FILENAME'
|
|
CHECK_ENVIRONMENT
|
|
ERRORS=0
|
|
|
|
export USAGE=\"
|
|
usage: -
|
|
|
|
args: -
|
|
|
|
options: -
|
|
-h, --help display this message and exit
|
|
|
|
description: -
|
|
\"
|
|
|
|
[ ! \$USAGE__usage ] && export USAGE__usage='[...options...]'
|
|
|
|
() {
|
|
local MAIN_ARGS=()
|
|
local VARSPLIT
|
|
while [[ \$# -gt 0 ]]
|
|
do
|
|
case \$1 in
|
|
-[a-z][a-z]* )
|
|
VARSPLIT=\$(echo \"\$1 \" | sed 's/^\\\\(-.\\\\)\\\\(.*\\\\) /\\\\1 -\\\\2/')
|
|
set -- throw-away \$(echo \" \$VARSPLIT \") \${@:2}
|
|
;;
|
|
-h | --help ) USAGE; exit 0 ;;
|
|
* ) MAIN_ARGS+=(\$1) ;;
|
|
esac
|
|
shift 1
|
|
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() {
|
|
__CHECK_DEPENDENCY python || return 1
|
|
CURRENT_PYTHON_VERSION=$(python --version | sed 's/^[^0-9]*\(3\.[^.]*\).*$/\1/')
|
|
echo $SCWRYPTS_PREFERRED_PYTHON_VERSIONS__scwrypts | grep -q $CURRENT_PYTHON_VERSION || {
|
|
WARNING "only tested on the following python versions: $(printf ', %s.x' ${SCWRYPTS_PREFERRED_PYTHON_VERSIONS__scwrypts[@]} | sed 's/^, //')"
|
|
WARNING 'compatibility may vary'
|
|
}
|
|
|
|
echo "cd $GROUP_PATH; python -m $(echo $SCWRYPT_TYPE/$SCWRYPT_NAME | sed 's/\//./g; s/\.py$//; s/\.\.//')"
|
|
}
|
|
|
|
SCWRYPTS__GET_RUNSTRING__zx() {
|
|
__CHECK_DEPENDENCY zx || return 1
|
|
|
|
echo "export FORCE_COLOR=3; cd $GROUP_PATH; ./$SCWRYPT_TYPE/$SCWRYPT_NAME.js"
|
|
}
|