=====================================================================

Finally decided to port personal scripts into a standalone library.

--- Release Notes ------------------------

- added support for python, zsh, and zx scripts
- added support for "interactive" scripts which drop the user to a REPL
- added support for passing arguments to commands
- added support for python/node virtualenv management through scwrypts
- added contributing and usage docs
- updated zsh plugin to write commands to history
- licensed under GPLv3

--- New Scripts --------------------------

zsh/scwrypts )
  - configure
  - environment/copy
  - environment/delete
  - environment/edit
  - environment/synchronize
  - logs/clear
  - logs/view

zsh )
  - aws/ecr/login
  - aws/efs/mount
  - aws/efs/unmount
  - aws/route53/backup
  - aws/s3/media-sync/pull
  - aws/s3/media-sync/push

python )
  - redis/interactive
This commit is contained in:
2022-04-28 16:09:23 -06:00
commit bffd64051c
63 changed files with 2131 additions and 0 deletions

7
zsh/utils/credits.zsh Normal file
View File

@ -0,0 +1,7 @@
__CREDITS() {
local COMMAND="$1"
cd $SCWRYPTS_ROOT
cat ./**/README.md \
| grep 'Generic Badge' \
| sed -n "s/.*Generic Badge.*-$COMMAND-.*(/(/p"
}

View File

@ -0,0 +1,45 @@
__CHECK_DEPENDENCIES() {
local DEPENDENCY
for DEPENDENCY in $*
do
__CHECK_DEPENDENCY $DEPENDENCY || ((__DEPENDENCY_ERROR+=1))
done
__CHECK_COREUTILS || ((__DEPENDENCY_ERROR+=$?))
return $__DEPENDENCY_ERROR
}
__CHECK_DEPENDENCY() {
local DEPENDENCY="$1"
[ ! $DEPENDENCY ] && return 1
command -v $DEPENDENCY >/dev/null 2>&1 || {
__ERROR "'$1' required but not installed. $(__CREDITS $1)"
return 1
}
}
__CHECK_COREUTILS() {
local COREUTILS=(awk find grep sed)
local MISSING_DEPENDENCY_COUNT=0
local NON_GNU_DEPENDENCY_COUNT=0
local UTIL
for UTIL in $(echo $COREUTILS)
do
__CHECK_DEPENDENCY $UTIL || { ((MISSING_DEPENDENCY_COUNT+=1)); continue; }
$UTIL --version 2>&1 | grep -q 'GNU' || {
__WARNING "non-GNU version of $UTIL detected"
((NON_GNU_DEPENDENCY_COUNT+=1))
}
done
[[ $NON_GNU_DEPENDENCY_COUNT -gt 0 ]] && {
__WARNING 'scripts rely on GNU coreutils; functionality may be limited'
__IS_MACOS && __REMINDER 'GNU coreutils can be installed and linked through Homebrew'
}
return $MISSING_DEPENDENCY_COUNT
}

45
zsh/utils/environment.zsh Normal file
View File

@ -0,0 +1,45 @@
__CHECK_ENV_VARS() {
local OPTIONAL=0
[[ $1 =~ ^--optional$ ]] && { shift 1; OPTIONAL=1; }
local VAR_NAME
for VAR_NAME in $*
do
__CHECK_ENV_VAR $VAR_NAME $OPTIONAL || ((__ENVIRONMENT_ERROR+=1))
done
return $__ENVIRONMENT_ERROR
}
__CHECK_ENV_VAR() {
local NAME="$1"
local OPTIONAL="$2"
local DEFAULT_VALUE="$3"
local VALUE=$(eval echo '$'$NAME)
[ $VALUE ] && return 0
local LINE="export $NAME="
local TEMPLATE="$SCWRYPTS_ROOT/.template.env"
grep -q -- "^$LINE" "$TEMPLATE" || {
__STATUS 'staging new variable in template'
echo "$LINE" >> "$TEMPLATE" \
&& NOPROMPT=1 $SCWRYPTS_ROOT/zsh/scwrypts/environment/synchronize \
&& git add $TEMPLATE >/dev/null 2>&1 \
&& __SUCCESS "staged '$NAME'" \
|| {
__WARNING "failed to stage '$NAME'"
__REMINDER "add/commit '$NAME' to template manually"
}
}
[ $OPTIONAL ] && {
__ERROR "'$NAME' required"
return 1
} || {
[ $DEFAULT_VALUE ] && $NAME="$DEFAULT_VALUE"
return 0
}
}

44
zsh/utils/io.zsh Normal file
View File

@ -0,0 +1,44 @@
__ERROR() { echo "\\033[1;31mERROR ✖ : $@\\033[0m" >&2; }
__SUCCESS() { echo "\\033[1;32mSUCCESS ✔ : $@\\033[0m" >&2; }
__WARNING() { echo "\\033[1;33mWARNING  : $@\\033[0m" >&2; }
__STATUS() { echo "\\033[1;34mSTATUS : $@\\033[0m" >&2; }
__REMINDER() { echo "\\033[1;35mREMINDER  : $@\\033[0m" >&2; }
__PROMPT() {
echo "\\033[1;36mPROMPT  : $@\\033[0m" >&2
printf "\\033[1;36mUSER  : \\033[0m" >&2
}
__Yn() {
__PROMPT "$@ [Yn]"
local Yn; __READ -k Yn; echo
[[ $Yn =~ [nN] ]] && return 1 || return 0
}
__yN() {
__PROMPT "$@ [yN]"
local yN; __READ -k yN; echo
[[ $yN =~ [yY] ]] && return 0 || return 1
}
__FAIL() { __ERROR "${@:2}"; exit $1; }
__ABORT() { __FAIL 69 'user abort'; }
#####################################################################
__GETSUDO() {
echo "\\033[1;36mPROMPT  : checking sudo password...\\033[0m" >&2
sudo echo hi >/dev/null 2>&1 </dev/tty \
&& __SUCCESS '...authenticated!' \
|| { __ERROR 'failed :c'; return 1; }
}
__LESS() { less -R $@ </dev/tty >/dev/tty; }
__FZF() { fzf -i --height=30% --layout=reverse --prompt "$@ : "; }
__FZF_HEAD() { fzf -i --height=30% --layout=reverse --print-query --prompt "$@ : " | head -n1; }
__FZF_TAIL() { fzf -i --height=30% --layout=reverse --print-query --prompt "$@ : " | tail -n1; }
__READ() { read $@ </dev/tty; }
__EDIT() { $EDITOR $@ </dev/tty >/dev/tty; }

12
zsh/utils/os.zsh Normal file
View File

@ -0,0 +1,12 @@
__IS_MACOS() { uname -s | grep -q 'Darwin'; }
__OPEN() {
local OPEN=''
{
command -v xdg-open && OPEN=xdg-open
command -v open && OPEN=open
} >/dev/null 2>&1
[ ! $OPEN ] && { __ERROR 'unable to detect default open command (e.g. xdg-open)'; return 1 }
$OPEN $@
}