v3.0.0 "The Great Overhaul"
===================================================================== Notice the major version change which comes with breaking changes to 2.x! Reconstructs "library" functions for both python and zsh scwrypts, with changes to virtualenv naming conventions (you'll need to refresh all virtualenv with the appropriate scwrypt). --- Changes ------------------------------ - changed a naming convention across zsh scripts, particularly removing underscores where there is no need to avoid naming clash (e.g. 'zsh/lib/utils/io.zsh' renames '__STATUS' to 'STATUS') - moved clients reliant on py.lib.http to the py.lib.http module - python scripts now rely on py.lib.scwrypts.execute - updated package.json in zx scripts to include `type = module` - 'scwrypts --list' commandline argument now includes additional relevant data for each scwrypt - environment variables no longer add themselves to be staged in the '.env.template' --- New Features ------------------------- - new 'use' syntax for disjoint import within zsh scripts; took me a very long time to convince myself this would be necessary - introduced scwrypt "groups" to allow portable module creation; (i.e. ability add your own scripts from another repo!) - py.lib.scwrypts.io provides a combined IO stream for quick, hybrid use of input/output files and stdin/stdout - py.lib.fzf provides a wrapper to provide similar functionality to zsh/utils/io.zsh including fzf_(head|tail) - improved efficiency of various scwrypts; notably reducing runtime of scwrypts/environment sync - improved scwrypts CLI by adding new options for exact scwrypt matching, better filtering, and prettier/more-detailed interfaces --- New Scripts -------------------------- - py/twilio ) basic SMS integration with twilio - send-sms - py/directus ) interactive directus GET query - get-items - py/discord ) post message to discord channel or webhook - post-message
This commit is contained in:
@@ -27,7 +27,7 @@ Command | Description
|
||||
You can make a child environment by naming an environment `<parent-name>.<child-name>`.
|
||||
Children inherit all parent-set values, and **parent-set values overwrite child-set values**.
|
||||
Remember that synchronize runs *every time you edit an environment*, so changes propagate to children immediately.
|
||||
Inherited values are denoted by `# inherited from <parent-name>` in the environment file.
|
||||
Inherited values are denoted by `# from <parent-name>` in the environment file.
|
||||
|
||||
Nested children will inherit values from all parents.
|
||||
|
||||
|
@@ -1,4 +0,0 @@
|
||||
_DEPENDENCIES+=()
|
||||
_REQUIRED_ENV+=()
|
||||
source ${0:a:h}/../common.zsh
|
||||
#####################################################################
|
51
zsh/scwrypts/configure
vendored
51
zsh/scwrypts/configure
vendored
@@ -1,37 +1,36 @@
|
||||
#!/bin/zsh
|
||||
_DEPENDENCIES+=()
|
||||
_REQUIRED_ENV+=()
|
||||
source ${0:a:h}/common.zsh
|
||||
DEPENDENCIES+=()
|
||||
REQUIRED_ENV+=()
|
||||
|
||||
use scwrypts/meta
|
||||
|
||||
CHECK_ENVIRONMENT
|
||||
#####################################################################
|
||||
|
||||
[ ! -f $SCWRYPTS_CONFIG_PATH/config ] && {
|
||||
__STATUS 'first-time setup detected; creating local configuration override...'
|
||||
touch $SCWRYPTS_CONFIG_PATH/config \
|
||||
&& __SUCCESS 'created!' \
|
||||
|| __FAIL 1 "unable to create config at '$SCWRYPTS_CONFIG_PATH/config'"
|
||||
{
|
||||
echo '#'
|
||||
echo '# configuration for scwrypts'
|
||||
echo '#'
|
||||
sed -n '1d; /^###/q; p' $SCWRYPTS_ROOT/global/config.zsh | sed '$d'
|
||||
} > $SCWRYPTS_CONFIG_PATH/config
|
||||
USER_CONFIG_OVERRIDES="$SCWRYPTS_CONFIG_PATH/config.zsh"
|
||||
|
||||
__EDIT $SCWRYPTS_CONFIG_PATH/config
|
||||
[ ! -f "$USER_CONFIG_OVERRIDES" ] && {
|
||||
STATUS 'first-time setup detected; creating local configuration override...'
|
||||
cp "$DEFAULT_CONFIG" "$USER_CONFIG_OVERRIDES"
|
||||
|
||||
__STATUS 'attempting to build virtual environments'
|
||||
__RUN_SCWRYPT zsh/scwrypts/virtualenv/update-all \
|
||||
&& __SUCCESS 'finished updating virtualenvs' \
|
||||
|| __WARNING 'unable to create one or more virtualenv (see above)' \
|
||||
EDIT $USER_CONFIG_OVERRIDES
|
||||
|
||||
STATUS 'attempting first-time build for virtual environments'
|
||||
SCWRYPTS__RUN --name scwrypts/virtualenv/update-all --group scwrypts --type zsh \
|
||||
&& SUCCESS 'finished updating virtualenvs' \
|
||||
|| WARNING 'unable to create one or more virtualenv (see above)' \
|
||||
;
|
||||
|
||||
__REMINDER
|
||||
__REMINDER 'use "zsh/scwrypts/virtualenv/update-all" to update environments'
|
||||
__REMINDER '(equivalent to "npm install" or "pip install -r requirements.txt")'
|
||||
__REMINDER
|
||||
REMINDER '
|
||||
in the future, you can use the following scwrypt to update required virtual
|
||||
environments (equivalent to "npm install" or "pip install -r requirements"):
|
||||
|
||||
scwrypts --name scwrypts/virtualenv/update-all --group scwrypts --type zsh
|
||||
'
|
||||
} || {
|
||||
__EDIT $SCWRYPTS_CONFIG_PATH/config
|
||||
EDIT "$USER_CONFIG_OVERRIDES"
|
||||
}
|
||||
|
||||
|
||||
__SUCCESS 'saved new configuration'
|
||||
__REMINDER 'changes which affect the hot-key plugin will require a ZSHRC reload'
|
||||
SUCCESS 'saved new configuration'
|
||||
REMINDER 'changes which affect the hot-key plugin will require a ZSHRC reload'
|
||||
|
@@ -1,14 +0,0 @@
|
||||
_DEPENDENCIES+=()
|
||||
_REQUIRED_ENV+=()
|
||||
source ${0:a:h}/../common.zsh
|
||||
#####################################################################
|
||||
|
||||
_SORT_ENV() {
|
||||
local ENV_FILE="$1"
|
||||
|
||||
_SED -i "/^# /d; /^$/d" "$ENV_FILE"
|
||||
_SED -i "s/^[A-Z]/export &/; s/^[^#=]\\+$/&=/" "$ENV_FILE"
|
||||
LC_COLLATE=C sort -uo "$ENV_FILE" "$ENV_FILE"
|
||||
}
|
||||
|
||||
_SED() { sed --follow-symlinks $@; }
|
@@ -1,37 +1,33 @@
|
||||
#!/bin/zsh
|
||||
_DEPENDENCIES+=()
|
||||
_REQUIRED_ENV+=()
|
||||
source ${0:a:h}/common.zsh
|
||||
DEPENDENCIES+=()
|
||||
REQUIRED_ENV+=()
|
||||
|
||||
use scwrypts/environment-files
|
||||
|
||||
CHECK_ENVIRONMENT
|
||||
#####################################################################
|
||||
|
||||
__PROMPT 'choose an environment to copy'
|
||||
TEMPLATE_ENV_NAME=$(__SELECT_ENV)
|
||||
[ ! $TEMPLATE_ENV_NAME ] && __ABORT
|
||||
PROMPT 'choose an environment to copy'
|
||||
TEMPLATE_ENV_NAME=$(SCWRYPTS__SELECT_ENV)
|
||||
[ ! $TEMPLATE_ENV_NAME ] && ABORT
|
||||
|
||||
__STATUS "selected '$TEMPLATE_ENV_NAME'"
|
||||
STATUS "selected '$TEMPLATE_ENV_NAME'"
|
||||
|
||||
__PROMPT 'enter new environment name'
|
||||
ENV_NAME=$(echo '' | __FZF_HEAD 'new environment')
|
||||
[ ! $ENV_NAME ] && __ABORT
|
||||
PROMPT 'enter new environment name'
|
||||
ENV_NAME=$(echo '' | FZF_HEAD 'new environment')
|
||||
[ ! $ENV_NAME ] && ABORT
|
||||
|
||||
TEMPLATE_ENV_FILE=$(__GET_ENV_FILE $TEMPLATE_ENV_NAME)
|
||||
ENV_FILE=$(__GET_ENV_FILE $ENV_NAME)
|
||||
TEMPLATE_ENV_FILE=$(SCWRYPTS__GET_ENV_FILE $TEMPLATE_ENV_NAME 2>/dev/null)
|
||||
ENV_FILE=$(SCWRYPTS__GET_ENV_FILE $ENV_NAME)
|
||||
|
||||
[ -f "$ENV_FILE" ] && __FAIL 2 "'$ENV_NAME' already exists"
|
||||
[ -f "$ENV_FILE" ] && FAIL 2 "'$ENV_NAME' already exists"
|
||||
|
||||
__STATUS "creating environment '$ENV_NAME'"
|
||||
cp "$TEMPLATE_ENV_FILE" "$ENV_FILE" \
|
||||
&& __SUCCESS "created '$ENV_NAME'" \
|
||||
|| __FAIL 3 "unable to create '$ENV_NAME'"
|
||||
STATUS "creating environment '$ENV_NAME'"
|
||||
cat "$TEMPLATE_ENV_FILE" \
|
||||
| sed 's/ from.*//' \
|
||||
> "$ENV_FILE" \
|
||||
&& SCWRYPTS__RUN --name scwrypts/environment/synchronize --group scwrypts --type zsh -- --no-prompt \
|
||||
&& SUCCESS "created '$ENV_NAME'" \
|
||||
|| FAIL 3 "something went wrong creating '$ENV_NAME'"
|
||||
|
||||
__STATUS 'stripping inherited values'
|
||||
_SED -i 's/ # inherited from.*$//' "$ENV_FILE" 2>/dev/null
|
||||
|
||||
__RUN_SCWRYPT zsh/scwrypts/environment/synchronize -- --no-prompt \
|
||||
|| __FAIL 4 'failed to run environment sync'
|
||||
|
||||
__RUN_SCWRYPT zsh/scwrypts/environment/edit -- $ENV_NAME \
|
||||
|| __FAIL 4 'failed to edit new environment'
|
||||
;
|
||||
|
||||
__SUCCESS "finished copy environment '$TEMPLATE_ENV_NAME > $ENV_NAME'"
|
||||
SUCCESS "finished copy environment '$TEMPLATE_ENV_NAME > $ENV_NAME'"
|
||||
|
@@ -1,25 +1,28 @@
|
||||
#!/bin/zsh
|
||||
_DEPENDENCIES+=()
|
||||
_REQUIRED_ENV+=()
|
||||
source ${0:a:h}/common.zsh
|
||||
DEPENDENCIES+=()
|
||||
REQUIRED_ENV+=()
|
||||
|
||||
use scwrypts/environment-files
|
||||
|
||||
CHECK_ENVIRONMENT
|
||||
#####################################################################
|
||||
|
||||
__PROMPT 'choose an environment to delete'
|
||||
ENV_NAME=$(__SELECT_ENV)
|
||||
[ ! $ENV_NAME ] && __ABORT
|
||||
PROMPT 'choose an environment to delete'
|
||||
ENV_NAME=$(SCWRYPTS__SELECT_ENV)
|
||||
[ ! $ENV_NAME ] && ABORT
|
||||
|
||||
ENV_FILE=$(__GET_ENV_FILE $ENV_NAME)
|
||||
ENV_FILE=$(SCWRYPTS__GET_ENV_FILE $ENV_NAME)
|
||||
|
||||
__STATUS "preparing to remove '$ENV_NAME'"
|
||||
STATUS "preparing to remove '$ENV_NAME'"
|
||||
|
||||
__WARNING
|
||||
__WARNING "the '$ENV_NAME' environment will be removed"
|
||||
__WARNING 'configured options and stored credentials will be lost forever'
|
||||
__WARNING
|
||||
WARNING "
|
||||
the '$ENV_NAME' environment will be removed
|
||||
configured options and stored credentials will be lost forever
|
||||
"
|
||||
|
||||
__yN 'continue?' || __ABORT
|
||||
yN 'continue?' || ABORT
|
||||
|
||||
__STATUS "removing environment"
|
||||
STATUS "removing environment"
|
||||
rm "$ENV_FILE" \
|
||||
&& __SUCCESS "removed '$ENV_NAME'" \
|
||||
|| __FAIL 3 "unable to remove '$ENV_FILE'; is it protected?"
|
||||
&& SUCCESS "removed '$ENV_NAME'" \
|
||||
|| FAIL 3 "unable to remove '$ENV_FILE'; is it protected?"
|
||||
|
@@ -1,7 +1,10 @@
|
||||
#!/bin/zsh
|
||||
_DEPENDENCIES+=()
|
||||
_REQUIRED_ENV+=()
|
||||
source ${0:a:h}/common.zsh
|
||||
DEPENDENCIES+=()
|
||||
REQUIRED_ENV+=()
|
||||
|
||||
use scwrypts/environment-files
|
||||
|
||||
CHECK_ENVIRONMENT
|
||||
#####################################################################
|
||||
|
||||
[ $1 ] && ENV_NAME="$1"
|
||||
@@ -9,34 +12,23 @@ source ${0:a:h}/common.zsh
|
||||
[ ! $1 ] && {
|
||||
[ $SCWRYPTS_ENV ] \
|
||||
&& ENV_NAME=$SCWRYPTS_ENV \
|
||||
|| ENV_NAME=$(__SELECT_OR_CREATE_ENV)
|
||||
|| ENV_NAME=$(SCWRYPTS__SELECT_OR_CREATE_ENV)
|
||||
}
|
||||
[ ! $ENV_NAME ] && __ABORT
|
||||
[ ! $ENV_NAME ] && ABORT
|
||||
|
||||
ENV_FILE=$(__GET_ENV_FILE $ENV_NAME)
|
||||
[ ! -f $ENV_FILE ] && {
|
||||
__STATUS "Creating '$ENV_NAME'..." \
|
||||
&& cp $__ENV_TEMPLATE $ENV_FILE \
|
||||
&& __RUN_SCWRYPT zsh/scwrypts/environment/synchronize -- --no-prompt \
|
||||
&& __SUCCESS "created '$ENV_NAME'" \
|
||||
|| { __ERROR "failed to create '$ENV_FILE'"; exit 1; }
|
||||
ENV_FILE=$(SCWRYPTS__GET_ENV_FILE $ENV_NAME 2>/dev/null)
|
||||
[ ! -f "$ENV_FILE" ] && {
|
||||
STATUS "Creating '$ENV_NAME'..." \
|
||||
&& touch "$ENV_FILE" \
|
||||
&& SCWRYPTS__RUN --name scwrypts/environment/synchronize --group scwrypts --type zsh -- --no-prompt \
|
||||
&& SUCCESS "created '$ENV_NAME'" \
|
||||
|| { ERROR "failed to create '$ENV_FILE'"; exit 1; }
|
||||
}
|
||||
|
||||
__EDIT $ENV_FILE
|
||||
_SORT_ENV $ENV_FILE
|
||||
EDIT $ENV_FILE
|
||||
|
||||
while read line
|
||||
do
|
||||
ENV_VAR=$(echo "$line" | _SED 's/=.*$//; s/^export //')
|
||||
grep -q "$ENV_VAR" $__ENV_TEMPLATE || {
|
||||
((NEW_VAR+=1))
|
||||
echo "export $ENV_VAR=" >> $__ENV_TEMPLATE
|
||||
__STATUS "detected new variable '$ENV_VAR'"
|
||||
}
|
||||
done < $ENV_FILE
|
||||
|
||||
__RUN_SCWRYPT zsh/scwrypts/environment/synchronize -- --no-prompt \
|
||||
|| __FAIL 4 'failed to run environment sync' \
|
||||
SCWRYPTS__RUN --name scwrypts/environment/synchronize --group scwrypts --type zsh -- --no-prompt \
|
||||
|| FAIL 4 'failed to run environment sync' \
|
||||
;
|
||||
|
||||
__SUCCESS "environment '$ENV_NAME' successfully modified"
|
||||
SUCCESS "environment '$ENV_NAME' successfully modified"
|
||||
|
@@ -1,7 +1,8 @@
|
||||
#!/bin/zsh
|
||||
_DEPENDENCIES+=()
|
||||
_REQUIRED_ENV+=()
|
||||
source ${0:a:h}/common.zsh
|
||||
#!/bin/zsh
|
||||
DEPENDENCIES+=()
|
||||
REQUIRED_ENV+=()
|
||||
|
||||
CHECK_ENVIRONMENT
|
||||
#####################################################################
|
||||
|
||||
__CHECK_REQUIRED_ENV $@
|
||||
|
@@ -1,154 +1,170 @@
|
||||
#!/bin/zsh
|
||||
_DEPENDENCIES+=()
|
||||
_REQUIRED_ENV+=()
|
||||
source ${0:a:h}/common.zsh
|
||||
#!/bin/zsh
|
||||
DEPENDENCIES+=()
|
||||
REQUIRED_ENV+=()
|
||||
|
||||
use scwrypts/environment-files
|
||||
|
||||
CHECK_ENVIRONMENT
|
||||
#####################################################################
|
||||
|
||||
_SYNCHRONIZE() {
|
||||
SYNCHRONIZE() {
|
||||
while [[ $# -gt 0 ]]
|
||||
do
|
||||
case $1 in
|
||||
--no-prompt ) SLIENT=1; shift 1 ;;
|
||||
|
||||
* ) __WARNING "argument '$1' not recognized"
|
||||
* ) WARNING "argument '$1' not recognized"
|
||||
shift 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
local TEMPLATE_FILE
|
||||
[ ! $SLIENT ] && {
|
||||
__yN 'change the template before sync?' && __EDIT $__ENV_TEMPLATE
|
||||
yN 'change the template(s) before sync?' && {
|
||||
EDIT $(
|
||||
for TEMPLATE_FILE in $(SCWRYPTS__GET_ENV_TEMPLATE_FILES)
|
||||
do
|
||||
[ -f "$TEMPLATE_FILE" ] && echo "$TEMPLATE_FILE"
|
||||
[ -f "$TEMPLATE_FILE.descriptions" ] && echo "$TEMPLATE_FILE.descriptions"
|
||||
done
|
||||
)
|
||||
}
|
||||
|
||||
for TEMPLATE_FILE in $(SCWRYPTS__GET_ENV_TEMPLATE_FILES)
|
||||
do
|
||||
{
|
||||
echo '#!/bin/zsh'
|
||||
cat "$TEMPLATE_FILE" \
|
||||
| sed '
|
||||
/__[a-z_]\+=$/d;
|
||||
/^#/d; /^$/d;
|
||||
s/^[A-Z]/export &/; s/^[^#=]\\+$/&=/;
|
||||
' \
|
||||
| LC_COLLATE=C sort -u
|
||||
} > "$TEMPLATE_FILE.temp"
|
||||
mv "$TEMPLATE_FILE.temp" "$TEMPLATE_FILE"
|
||||
done
|
||||
}
|
||||
|
||||
_SORT_ENV "$__ENV_TEMPLATE"
|
||||
_SED -i '/__[a-z_]\+=$/d' "$__ENV_TEMPLATE"
|
||||
git add $__ENV_TEMPLATE >/dev/null 2>&1
|
||||
local ENVIRONMENTS ENVIRONMENT_FILES
|
||||
local FILE NAME ENVIRONMENT_FILE
|
||||
|
||||
ENVIRONMENTS=$(__GET_ENV_NAMES | sort -r)
|
||||
ENVIRONMENTS=($(SCWRYPTS__GET_ENV_NAMES | sort -r))
|
||||
ENVIRONMENT_FILES=($(
|
||||
for NAME in ${ENVIRONMENTS[@]}
|
||||
do
|
||||
SCWRYPTS__GET_ENV_FILE $NAME
|
||||
done
|
||||
))
|
||||
|
||||
_CLEAR_INHERITED_VARIABLES
|
||||
_INSERT_NEW_VARIABLES
|
||||
_REMOVE_OLD_VARIABLES
|
||||
_SORT_AND_CASCADE
|
||||
_ADD_DESCRIPTIONS
|
||||
STATUS 'generating working environment files...'
|
||||
for FILE in ${ENVIRONMENT_FILES[@]}
|
||||
do
|
||||
GENERATE_TEMP_ENVIRONMENT_FILE "$FILE"
|
||||
done
|
||||
|
||||
__SUCCESS 'finished sync!'
|
||||
STATUS 'cascading environment values to children...'
|
||||
for NAME in ${ENVIRONMENTS[@]}
|
||||
do
|
||||
CASCADE_ENVIRONMENT $NAME
|
||||
done
|
||||
|
||||
STATUS 'cleaning up working space...'
|
||||
for FILE in ${ENVIRONMENT_FILES[@]}
|
||||
do
|
||||
CLEANUP_ENVIRONMENT_FILE "$FILE"
|
||||
done
|
||||
SUCCESS 'finished sync!'
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
|
||||
_CLEAR_INHERITED_VARIABLES() {
|
||||
for ENV_NAME in $(echo $ENVIRONMENTS)
|
||||
do
|
||||
ENV_FILE=$(__GET_ENV_FILE $ENV_NAME)
|
||||
_SED -i 's/ # inherited from.*//' "$ENV_FILE"
|
||||
done
|
||||
}
|
||||
|
||||
_INSERT_NEW_VARIABLES() {
|
||||
__STATUS 'inserting new environment variables...'
|
||||
|
||||
local ENV_NAME ENV_FILE line
|
||||
while read line
|
||||
do
|
||||
for ENV_NAME in $(echo $ENVIRONMENTS)
|
||||
do
|
||||
ENV_FILE=$(__GET_ENV_FILE $ENV_NAME)
|
||||
grep -q "$line" $ENV_FILE || {
|
||||
echo $line >> $ENV_FILE && __STATUS "added '$line' to '$ENV_NAME'"
|
||||
}
|
||||
done
|
||||
done < <(_SED -n '/^./p' "$__ENV_TEMPLATE")
|
||||
}
|
||||
|
||||
_REMOVE_OLD_VARIABLES() {
|
||||
__STATUS 'removing old environment variables...'
|
||||
|
||||
local ENV_NAME ENV_FILE line
|
||||
for ENV_NAME in $(echo $ENVIRONMENTS)
|
||||
do
|
||||
ENV_FILE=$(__GET_ENV_FILE $ENV_NAME)
|
||||
while read line
|
||||
do
|
||||
ENV_VAR=$(echo "$line" | _SED 's/=.*/=/')
|
||||
echo $ENV_VAR | grep -q '__[a-z_]\+=' && continue
|
||||
|
||||
grep -q "$ENV_VAR" "$__ENV_TEMPLATE" || {
|
||||
_SED -i "\\%$ENV_VAR%d" "$ENV_FILE"
|
||||
echo "$ENV_VAR" | grep -qv '^#' \
|
||||
&& __WARNING "removed unwanted '$ENV_VAR' from '$ENV_NAME'"
|
||||
}
|
||||
done < $ENV_FILE
|
||||
done
|
||||
}
|
||||
|
||||
_SORT_AND_CASCADE() {
|
||||
local ENV_NAM ENV_FILE
|
||||
|
||||
for ENV_NAME in $(echo $ENVIRONMENTS)
|
||||
do
|
||||
ENV_FILE=$(__GET_ENV_FILE $ENV_NAME)
|
||||
_CASCADE_ENVIRONMENT $ENV_NAME
|
||||
done
|
||||
|
||||
for ENV_NAME in $(echo $ENVIRONMENTS)
|
||||
do
|
||||
ENV_FILE=$(__GET_ENV_FILE $ENV_NAME)
|
||||
_SORT_ENV "$ENV_FILE"
|
||||
done
|
||||
}
|
||||
|
||||
_CASCADE_ENVIRONMENT() {
|
||||
CASCADE_ENVIRONMENT() {
|
||||
local PARENT_NAME="$1"
|
||||
local PARENT_FILE=$(__GET_ENV_FILE $PARENT_NAME)
|
||||
local PARENT_FILE="$(SCWRYPTS__GET_ENV_FILE $PARENT_NAME).temp"
|
||||
|
||||
local CHILD_NAMES=$(echo $ENVIRONMENTS | grep "^$PARENT_NAME\\.")
|
||||
[ ! $CHILD_NAMES ] && return 0
|
||||
local CHILD_NAMES=($(echo $ENVIRONMENTS | sed 's/ \+/\n/g' |grep "^$PARENT_NAME\\."))
|
||||
[[ ${#CHILD_NAMES[@]} -eq 0 ]] && return 0
|
||||
|
||||
__STATUS "cascading '$PARENT_NAME' to children"
|
||||
for CHILD_NAME in $(echo $CHILD_NAMES)
|
||||
local PARENT_VARIABLES="$(READ_PARENT_VARIABLES "$PARENT_NAME" "$PARENT_FILE")"
|
||||
[ ! $PARENT_VARIABLES ] && return 0
|
||||
|
||||
local CHILD_NAME CHILD_FILE CONTENT
|
||||
for CHILD_NAME in ${CHILD_NAMES[@]}
|
||||
do
|
||||
__SUCCESS "detected child '$CHILD_NAME'"
|
||||
STATUS "propagating environment '$PARENT_NAME' to child '$CHILD_NAME'"
|
||||
CHILD_FILE="$(SCWRYPTS__GET_ENV_FILE $CHILD_NAME).temp"
|
||||
CONTENT=$(cat "$CHILD_FILE")
|
||||
echo "$PARENT_VARIABLES" | ADD_LINES
|
||||
echo "$CONTENT" > "$CHILD_FILE"
|
||||
done
|
||||
|
||||
local PARENT_VAR VAR_PATTERN CHILD_NAME CHILD_FILE
|
||||
|
||||
while read PARENT_VAR
|
||||
do
|
||||
VAR_PATTERN=$(echo "$PARENT_VAR" | _SED 's/=.*/=/; s/\//\/\//g')
|
||||
__STATUS "propagating '$(echo $VAR_PATTERN | _SED 's/^export \([^=]*\)=/\1/')' to children"
|
||||
|
||||
PARENT_VAR+=" # inherited from $PARENT_NAME"
|
||||
|
||||
for CHILD_NAME in $(echo $CHILD_NAMES)
|
||||
do
|
||||
CHILD_FILE=$(__GET_ENV_FILE $CHILD_NAME)
|
||||
|
||||
_SED -i "/^$VAR_PATTERN/d" "$CHILD_FILE"
|
||||
echo $PARENT_VAR >> "$CHILD_FILE"
|
||||
done
|
||||
done < <(_SED -n '/^[^#][^=]*=[^#]\+$/p' "$PARENT_FILE")
|
||||
|
||||
__SUCCESS "finished '$PARENT_NAME' propagation"
|
||||
}
|
||||
|
||||
_ADD_DESCRIPTIONS() {
|
||||
__STATUS 'updating descriptions'
|
||||
while read DESCRIPTION_LINE
|
||||
do
|
||||
ENV_VAR=$(echo $DESCRIPTION_LINE | _SED 's/ \+| .*$//')
|
||||
DESCRIPTION=$(echo $DESCRIPTION_LINE | _SED 's/^.* | //')
|
||||
for ENV_NAME in $(echo $ENVIRONMENTS)
|
||||
do
|
||||
_SED -i "/^export $ENV_VAR=/i # $DESCRIPTION" "$(__GET_ENV_FILE $ENV_NAME)"
|
||||
done
|
||||
done < <(_SED -n '/^[^ ]\+ \+| /p' "$__ENV_TEMPLATE.descriptions")
|
||||
|
||||
for ENV_NAME in $(echo $ENVIRONMENTS)
|
||||
do
|
||||
_SED -i "/^# /i \ " "$(__GET_ENV_FILE $ENV_NAME)"
|
||||
_SED -i "s/^ $//" "$(__GET_ENV_FILE $ENV_NAME)"
|
||||
done
|
||||
SUCCESS "finished '$PARENT_NAME' propagation"
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
_SYNCHRONIZE $@
|
||||
|
||||
GENERATE_TEMP_ENVIRONMENT_FILE() {
|
||||
local FILE="$1"
|
||||
local CONTENT=$(GENERATE_TEMPLATE)
|
||||
|
||||
READ_POPULATED_VARIABLES "$FILE" | ADD_LINES
|
||||
|
||||
echo "$CONTENT" > "$FILE.temp"
|
||||
}
|
||||
|
||||
ADD_LINES() {
|
||||
local LINE VARIABLE SHORT VALUE
|
||||
while read LINE
|
||||
do
|
||||
VARIABLE=$(echo $LINE | sed 's/=.*$//')
|
||||
echo $CONTENT | grep -qi "^$VARIABLE" || {
|
||||
echo $LINE | grep -qi '__[a-z_]\+=' || {
|
||||
WARNING "skipping variable $(echo $LINE | sed 's/^export //; s/=.*//')
|
||||
(must be included in a template before it can be added)"
|
||||
continue
|
||||
}
|
||||
SHORT=$(echo "$VARIABLE" | sed 's/__[a-z].*//')
|
||||
CONTENT=$(echo "$CONTENT" | sed "/^$SHORT/a $LINE")
|
||||
}
|
||||
|
||||
CONTENT=$(echo "$CONTENT" | sed "s%^$VARIABLE.*$%$LINE%")
|
||||
done
|
||||
}
|
||||
|
||||
READ_POPULATED_VARIABLES() {
|
||||
local FILE="$1"
|
||||
cat "$FILE" \
|
||||
| grep -v '^#' \
|
||||
| grep -v '=$' \
|
||||
| grep -v '^$' \
|
||||
| grep -v ' # from ' \
|
||||
| awk '/^[^=]+$/{printf "%s_____",$0;next}7' \
|
||||
| sed 's/\(_____\)\(export\)/\1\n\2/; s/\(_____\)$/\1\n/' \
|
||||
| sed 's/^.*_____.*$/_____&/' \
|
||||
| sed -z 's/[\n
|
||||
] *_____/_____/g' \
|
||||
| grep -v '^$' \
|
||||
;
|
||||
}
|
||||
|
||||
READ_PARENT_VARIABLES() {
|
||||
local PARENT_NAME="$1"
|
||||
local PARENT_FILE="$2"
|
||||
READ_POPULATED_VARIABLES "$PARENT_FILE" \
|
||||
| sed 's/_____/ /g; s/\s\+/ /g' \
|
||||
| sed 's/( /(/; s/ )/)/' \
|
||||
| sed "s/$/ # from $PARENT_NAME/" \
|
||||
| grep -v '__[a-z_]\+=' \
|
||||
;
|
||||
}
|
||||
|
||||
CLEANUP_ENVIRONMENT_FILE() {
|
||||
cat "$1.temp" \
|
||||
| sed 's/_____$//g; s/_____/\n/g' \
|
||||
> "$1"
|
||||
|
||||
rm "$1.temp"
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
|
@@ -1,21 +1,22 @@
|
||||
#!/bin/zsh
|
||||
_DEPENDENCIES+=()
|
||||
_REQUIRED_ENV+=()
|
||||
source ${0:a:h}/common.zsh
|
||||
DEPENDENCIES+=()
|
||||
REQUIRED_ENV+=()
|
||||
|
||||
CHECK_ENVIRONMENT
|
||||
#####################################################################
|
||||
|
||||
cd $SCWRYPTS_ROOT
|
||||
|
||||
__STATUS "Found $(ls $SCWRYPTS_LOG_PATH | wc -l) log files"
|
||||
__WARNING
|
||||
__WARNING 'this will permanently clear all local cloud script logs found in'
|
||||
__WARNING "'$SCWRYPTS_LOG_PATH'"
|
||||
__WARNING
|
||||
STATUS "Found $(ls $SCWRYPTS_LOG_PATH | wc -l) log files"
|
||||
WARNING "
|
||||
this will permanently clear all local cloud script logs found in
|
||||
'$SCWRYPTS_LOG_PATH'
|
||||
"
|
||||
|
||||
__yN 'continue?' || __ABORT
|
||||
yN 'continue?' || ABORT
|
||||
|
||||
__STATUS 'removing logfiles'
|
||||
STATUS 'removing logfiles'
|
||||
rm -rf $SCWRYPTS_LOG_PATH/* \
|
||||
&& __SUCCESS 'done' \
|
||||
|| { __ERROR 'failed :c'; exit 2; }\
|
||||
&& SUCCESS 'done' \
|
||||
|| { ERROR 'failed :c'; exit 2; }\
|
||||
;
|
||||
|
@@ -1,4 +0,0 @@
|
||||
_DEPENDENCIES+=()
|
||||
_REQUIRED_ENV+=()
|
||||
source ${0:a:h}/../common.zsh
|
||||
#####################################################################
|
@@ -1,14 +1,15 @@
|
||||
#!/bin/zsh
|
||||
_DEPENDENCIES+=()
|
||||
_REQUIRED_ENV+=()
|
||||
source ${0:a:h}/common.zsh
|
||||
DEPENDENCIES+=()
|
||||
REQUIRED_ENV+=()
|
||||
|
||||
CHECK_ENVIRONMENT
|
||||
#####################################################################
|
||||
|
||||
cd $SCWRYPTS_ROOT
|
||||
__PROMPT 'select a script log'
|
||||
LOG_FILE=$(ls -t $SCWRYPTS_LOG_PATH | __FZF 'logfile')
|
||||
[ ! $LOG_FILE ] && { __ERROR 'user abort'; exit 1; }
|
||||
PROMPT 'select a script log'
|
||||
LOG_FILE=$(ls -t $SCWRYPTS_LOG_PATH | FZF 'logfile')
|
||||
[ ! $LOG_FILE ] && { ERROR 'user abort'; exit 1; }
|
||||
|
||||
__STATUS 'opening logfile'
|
||||
__LESS "$SCWRYPTS_LOG_PATH/$LOG_FILE"
|
||||
__SUCCESS 'done'
|
||||
STATUS 'opening logfile'
|
||||
LESS "$SCWRYPTS_LOG_PATH/$LOG_FILE"
|
||||
SUCCESS 'done'
|
||||
|
@@ -1,124 +0,0 @@
|
||||
_DEPENDENCIES+=(
|
||||
virtualenv
|
||||
nodeenv
|
||||
)
|
||||
_REQUIRED_ENV+=()
|
||||
source ${0:a:h}/../common.zsh
|
||||
#####################################################################
|
||||
|
||||
__AVAILABLE_VIRTUALENVS=(python node)
|
||||
|
||||
#####################################################################
|
||||
|
||||
__REFRESH_VIRTUALENV() {
|
||||
local TYPE="$1"
|
||||
[ ! $TYPE ] && {
|
||||
__ERROR 'no virtualenv type specified'
|
||||
return 1
|
||||
}
|
||||
__STATUS "refreshing $TYPE virtual environment"
|
||||
__DELETE_VIRTUALENV $TYPE \
|
||||
&& __UPDATE_VIRTUALENV $TYPE \
|
||||
&& __SUCCESS 'successfully refreshed virtual environment' \
|
||||
|| { ERROR 'something went wrong during refresh (see above)'; return 1; } \
|
||||
;
|
||||
}
|
||||
|
||||
__UPDATE_VIRTUALENV() {
|
||||
local TYPE="$1"
|
||||
[ ! $TYPE ] && {
|
||||
__ERROR 'no virtualenv type specified'
|
||||
return 1
|
||||
}
|
||||
|
||||
local VIRTUALENV_PATH=$(__GET_VIRTUALENV_PATH $TYPE)
|
||||
|
||||
[ ! -d $VIRTUALENV_PATH ] && __CREATE_VIRTUALENV_$TYPE $VIRTUALENV_PATH
|
||||
|
||||
__STATUS "updating $TYPE virtual environment"
|
||||
|
||||
source $VIRTUALENV_PATH/bin/activate || {
|
||||
__ERROR 'failed to activate virtualenv; did create fail?'
|
||||
return 1
|
||||
}
|
||||
|
||||
cd $SCWRYPTS_ROOT
|
||||
local UPDATE_CODE=0
|
||||
case $TYPE in
|
||||
python ) cd py; pip install -r requirements.txt; UPDATE_CODE=$? ;;
|
||||
node ) cd zx; npm install ;;
|
||||
esac
|
||||
UPDATE_CODE=$?
|
||||
[[ $UPDATE_CODE -eq 0 ]] \
|
||||
&& __SUCCESS "$TYPE virtual environment up-to-date" \
|
||||
|| __ERROR "failed to update $TYPE virtual environment (see errors above)" \
|
||||
;
|
||||
|
||||
deactivate_node >/dev/null 2>&1
|
||||
deactivate >/dev/null 2>&1
|
||||
return $UPDATE_CODE
|
||||
}
|
||||
|
||||
__DELETE_VIRTUALENV() {
|
||||
local TYPE="$1"
|
||||
local VIRTUALENV_PATH="$(__GET_VIRTUALENV_PATH $TYPE)"
|
||||
|
||||
__STATUS "dropping $TYPE virtual environment artifacts"
|
||||
|
||||
[ ! -d $VIRTUALENV_PATH ] && {
|
||||
__SUCCESS "no $TYPE environment detected"
|
||||
return 0
|
||||
}
|
||||
|
||||
rm -rf $VIRTUALENV_PATH \
|
||||
&& __SUCCESS "succesfully cleaned up $TYPE virtual environment" \
|
||||
|| { __ERROR "unabled to remove '$VIRTUALENV_PATH'"; return 1; }
|
||||
}
|
||||
|
||||
__GET_VIRTUALENV_PATH() {
|
||||
local TYPE="$1"
|
||||
case $TYPE in
|
||||
python ) echo "$SCWRYPTS_VIRTUALENV_PATH/py" ;;
|
||||
node ) echo "$SCWRYPTS_VIRTUALENV_PATH/zx" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
|
||||
__CREATE_VIRTUALENV_python() {
|
||||
local VIRTUALENV_PATH="$1"
|
||||
|
||||
__STATUS 'creating python virtual environment'
|
||||
local PY PYTHON
|
||||
for PY in $(echo $__PREFERRED_PYTHON_VERSIONS)
|
||||
do
|
||||
which python$PY >/dev/null 2>&1 && {
|
||||
PYTHON=$(which python$PY)
|
||||
break
|
||||
}
|
||||
done
|
||||
[ ! $PYTHON ] && {
|
||||
__ERROR 'python>=3.9 not available; skipping python env'
|
||||
return 1
|
||||
}
|
||||
|
||||
__STATUS 'setting up virtualenv'
|
||||
virtualenv $VIRTUALENV_PATH --python="$PYTHON" \
|
||||
&& __SUCCESS 'python virtualenv created' \
|
||||
|| {
|
||||
__ERROR "unable to create '$VIRTUALENV_PATH' with '$PYTHON'"
|
||||
return 2
|
||||
}
|
||||
}
|
||||
|
||||
__CREATE_VIRTUALENV_node() {
|
||||
local VIRTUALENV_PATH="$1"
|
||||
|
||||
__STATUS 'setting up nodeenv'
|
||||
nodeenv $VIRTUALENV_PATH --node=$__NODE_VERSION \
|
||||
&& __SUCCESS 'node virtualenv created' \
|
||||
|| {
|
||||
__ERROR "unable to create '$VIRTUALENV_PATH' with '$__NODE_VERSION'"
|
||||
return 2
|
||||
}
|
||||
}
|
@@ -1,18 +1,30 @@
|
||||
#!/bin/zsh
|
||||
_DEPENDENCIES+=()
|
||||
_REQUIRED_ENV+=()
|
||||
source ${0:a:h}/common.zsh
|
||||
DEPENDENCIES+=()
|
||||
REQUIRED_ENV+=()
|
||||
|
||||
use scwrypts/virtualenv
|
||||
|
||||
CHECK_ENVIRONMENT
|
||||
#####################################################################
|
||||
|
||||
ENV_TYPE=$(echo $__AVAILABLE_VIRTUALENVS | sed 's/ \+/\n/' | __FZF 'select an environment to refresh')
|
||||
[ ! $ENV_TYPE ] && __ABORT
|
||||
while [[ $# -gt 0 ]]
|
||||
do
|
||||
case $1 in
|
||||
-g | --group ) ENV_GROUP="$2"; shift 1 ;;
|
||||
esac
|
||||
shift 1
|
||||
done
|
||||
|
||||
__REMINDER
|
||||
__REMINDER "this will permanently remove all artifacts for the scwrypts $ENV_TYPE environment"
|
||||
__REMINDER "(safe unless you have put something important in $(__GET_VIRTUALENV_PATH $ENV_TYPE))"
|
||||
__REMINDER
|
||||
[ ! $ENV_GROUP ] && ENV_GROUP=scwrypts
|
||||
|
||||
ENV_TYPE=$(echo $AVAILABLE_VIRTUALENVS | sed 's/ \+/\n/' | FZF 'select an environment to refresh')
|
||||
[ ! $ENV_TYPE ] && ABORT
|
||||
|
||||
__Yn "drop and recreate $ENV_TYPE virtual environment?" || __ABORT
|
||||
REMINDER "
|
||||
this will permanently remove all artifacts for the scwrypts $ENV_TYPE environment
|
||||
(safe unless you have put something important in $(GET_VIRTUALENV_PATH $ENV_GROUP $ENV_TYPE))
|
||||
"
|
||||
|
||||
__REFRESH_VIRTUALENV $ENV_TYPE
|
||||
Yn "drop and recreate $ENV_TYPE virtual environment?" || ABORT
|
||||
|
||||
REFRESH_VIRTUALENV $ENV_GROUP $ENV_TYPE
|
||||
|
@@ -1,18 +1,25 @@
|
||||
#!/bin/zsh
|
||||
_DEPENDENCIES+=()
|
||||
_REQUIRED_ENV+=()
|
||||
source ${0:a:h}/common.zsh
|
||||
echo hey
|
||||
DEPENDENCIES+=()
|
||||
REQUIRED_ENV+=()
|
||||
|
||||
use scwrypts/virtualenv
|
||||
|
||||
CHECK_ENVIRONMENT
|
||||
#####################################################################
|
||||
|
||||
__STATUS 'beginning update for all environments'
|
||||
STATUS 'beginning update for all environments'
|
||||
|
||||
FAILED_COUNT=0
|
||||
|
||||
for ENV_TYPE in $(echo $__AVAILABLE_VIRTUALENVS)
|
||||
for ENV_GROUP in ${SCWRYPTS_GROUPS[@]}
|
||||
do
|
||||
__UPDATE_VIRTUALENV $ENV_TYPE || ((FAILED_COUNT+=1))
|
||||
for ENV_TYPE in ${AVAILABLE_VIRTUALENVS[@]}
|
||||
do
|
||||
UPDATE_VIRTUALENV $ENV_GROUP $ENV_TYPE || ((FAILED_COUNT+=1))
|
||||
done
|
||||
done
|
||||
|
||||
[[ $FAILED_COUNT -eq 0 ]] \
|
||||
&& __SUCCESS 'all environments up-to-date' \
|
||||
|| __FAIL $FAILED_COUNT 'failed to update one or more environments'
|
||||
&& SUCCESS 'all environments up-to-date' \
|
||||
|| FAIL $FAILED_COUNT 'failed to update one or more environments'
|
||||
|
Reference in New Issue
Block a user