image_build: Add new script that will reasonably robustly handle various operations to files.
This commit is contained in:
parent
7f1bec89de
commit
2f140b021a
1 changed files with 339 additions and 0 deletions
339
src/images_build.sh
Executable file
339
src/images_build.sh
Executable file
|
|
@ -0,0 +1,339 @@
|
|||
#!/bin/bash
|
||||
|
||||
[ "$(env | /bin/sed -r -e '/^(PWD|SHLVL|_)=/d')" ] && exec -c $0
|
||||
|
||||
###############################################################################
|
||||
# Variables
|
||||
###############################################################################
|
||||
|
||||
__ignore_variables='PWD
|
||||
SHLVL
|
||||
_
|
||||
OLDPWD'
|
||||
|
||||
########################################
|
||||
# Default Options
|
||||
########################################
|
||||
|
||||
__global_scale='40'
|
||||
|
||||
__PROCESS_JPEG=true
|
||||
__depends__PROCESS_JPEG=(JPEG_OPTIMIZE JPEG_RESCALE)
|
||||
__JPEG_OPTIMIZE=true
|
||||
__JPEG_RESCALE=true
|
||||
__depends__JPEG_RESCALE=(JPEG_SCALE JPEG_QUALITY)
|
||||
__JPEG_QUALITY=40
|
||||
__JPEG_SCALE="${__global_scale}"
|
||||
|
||||
__PROCESS_PNG=true
|
||||
__depends__PROCESS_PNG=(PNG_OPTIMIZE PNG_RESCALE)
|
||||
__PNG_OPTIMIZE=false
|
||||
__depends__PNG_OPTIMIZE=(PNG_EFFORT)
|
||||
__PNG_EFFORT=9
|
||||
__PNG_RESCALE=true
|
||||
__depends__PNG_RESCALE=(PNG_SCALE)
|
||||
__PNG_SCALE="${__global_scale}"
|
||||
|
||||
__ENVIRONMENT_LIST='JPEG_QUALITY
|
||||
JPEG_RESCALE
|
||||
JPEG_SCALE
|
||||
JPEG_OPTIMIZE
|
||||
PROCESS_JPEG
|
||||
PROCESS_PNG
|
||||
PNG_OPTIMIZE
|
||||
PNG_EFFORT
|
||||
PNG_RESCALE
|
||||
PNG_SCALE'
|
||||
|
||||
###############################################################################
|
||||
# Functions
|
||||
###############################################################################
|
||||
|
||||
########################################
|
||||
# __set_env <env file>
|
||||
########################################
|
||||
#
|
||||
# Set Environment
|
||||
# Sets the environment from a file
|
||||
#
|
||||
########################################
|
||||
|
||||
__set_env() {
|
||||
|
||||
while read -r __line; do
|
||||
__varname="$(sed 's/^/__/' <<<"${__line}")"
|
||||
export "${__line}=${!__varname}"
|
||||
done <<<"${__ENVIRONMENT_LIST}"
|
||||
|
||||
if [ "${#}" -gt 0 ]; then
|
||||
set -o allexport
|
||||
source "${1}"
|
||||
set +o allexport
|
||||
fi
|
||||
|
||||
while read -r __line; do
|
||||
if ! [ "${__line}" == "" ]; then
|
||||
unset "${__line}"
|
||||
fi
|
||||
done <<<"$(printenv | sed 's/^\([^=]*\)=.*/\1/' | grep -Fxv "${__ignore_variables}" | grep -Fxv "${__ENVIRONMENT_LIST}")"
|
||||
|
||||
__resolve_env
|
||||
|
||||
}
|
||||
|
||||
__resolve_env() {
|
||||
|
||||
__old_hash=""
|
||||
__current_hash="$(__hash_env)"
|
||||
|
||||
while [ "${__old_hash}" != "${__current_hash}" ]; do
|
||||
|
||||
while read -r __check_set; do
|
||||
if ! [ "${!__check_set}" == 'true' ]; then
|
||||
eval "__arr=\"\${__depends__${__check_set}[@]}\""
|
||||
for __item in ${__arr[@]}; do
|
||||
if [ "${!__item}" == 'true' ]; then
|
||||
export "${__item}"='false'
|
||||
fi
|
||||
done
|
||||
fi
|
||||
done < <(set | grep -e '^__depends__' | sed 's/^__depends__\([^=]*\)=.*/\1/')
|
||||
__old_hash="${__current_hash}"
|
||||
__current_hash="$(__hash_env)"
|
||||
|
||||
done
|
||||
|
||||
__need="$(
|
||||
{
|
||||
while read -r __check_set; do
|
||||
if [ "${!__check_set}" == 'true' ]; then
|
||||
eval "__arr=\"\${__depends__${__check_set}[@]}\""
|
||||
for item in ${__arr[@]}; do
|
||||
echo "${item}"
|
||||
done
|
||||
fi
|
||||
done < <(set | grep -e '^__depends__' | sed 's/^__depends__\([^=]*\)=.*/\1/')
|
||||
while read -r __item; do
|
||||
if [ "${!__item}" == 'true' ]; then
|
||||
echo "${__item}"
|
||||
fi
|
||||
done <<<"${__ENVIRONMENT_LIST}"
|
||||
} | sort | uniq
|
||||
)"
|
||||
|
||||
__does_not_exist="$(grep -Fxv "${__ENVIRONMENT_LIST}" <<<"${__need}")"
|
||||
if [ "${__does_not_exist}" != "" ]; then
|
||||
echo 'Error:'
|
||||
echo "${__does_not_exist}"
|
||||
echo 'Does not exist!
|
||||
'
|
||||
fi
|
||||
|
||||
while read -r __unset; do
|
||||
if [ "${__unset}" != "" ]; then
|
||||
unset "${__unset}"
|
||||
fi
|
||||
done < <(__print_env | sed -e 's/^\([^=]*\)=.*/\1/' | grep -Fxv "${__need}")
|
||||
|
||||
}
|
||||
|
||||
########################################
|
||||
# __print_env
|
||||
########################################
|
||||
#
|
||||
# Print Environment
|
||||
# Prints the environment
|
||||
#
|
||||
########################################
|
||||
|
||||
__print_env() {
|
||||
|
||||
printenv | grep -xvf <(sed 's|\(.*\)|^\1=.*|' <<<"${__ignore_variables}") | sort
|
||||
|
||||
}
|
||||
|
||||
########################################
|
||||
# __hash_env
|
||||
########################################
|
||||
#
|
||||
# Hash Environment
|
||||
# Hashes the environment
|
||||
#
|
||||
########################################
|
||||
|
||||
__hash_env() {
|
||||
|
||||
__print_env | md5sum - | sed 's/ .*//'
|
||||
|
||||
}
|
||||
|
||||
########################################
|
||||
# __clear_env
|
||||
########################################
|
||||
#
|
||||
# Clear Environment
|
||||
# Clears the environment
|
||||
#
|
||||
########################################
|
||||
|
||||
__clear_env() {
|
||||
|
||||
while read -r __var; do
|
||||
unset "${__var}"
|
||||
done <<<"${__ENVIRONMENT_LIST}"
|
||||
|
||||
}
|
||||
|
||||
########################################
|
||||
# __process <.env>
|
||||
########################################
|
||||
#
|
||||
# Process
|
||||
# Call this once situated in the correct
|
||||
# directory to process
|
||||
#
|
||||
########################################
|
||||
|
||||
__process() {
|
||||
|
||||
if [ "${PROCESS_JPEG}" == 'true' ]; then
|
||||
__process_generic_image jpeg
|
||||
fi
|
||||
|
||||
if [ "${PROCESS_PNG}" == 'true' ]; then
|
||||
__process_generic_image png
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
__find_jpeg() {
|
||||
find './src/' -type f \( -iname \*.jpg -o -iname \*.jpeg \)
|
||||
}
|
||||
|
||||
__find_png() {
|
||||
find './src/' -type f \( -iname \*.png \)
|
||||
}
|
||||
|
||||
__process_generic_image() {
|
||||
|
||||
while read -r __var; do
|
||||
#local "${__var}"
|
||||
if [ "${__var}" != "__PROCESS_${1^^}" ]; then
|
||||
eval "${__var#__}"='false'
|
||||
fi
|
||||
done < <(set | grep -E '^__PROCESS_' | sed 's/^\([^=]*\)=.*/\1/')
|
||||
|
||||
__resolve_env
|
||||
|
||||
"__find_${1}" | while read -r __source_file; do
|
||||
|
||||
__target="$(sed 's|^\./src/|./|' <<<"${__source_file}")"
|
||||
|
||||
if ! __check_file "${__source_file}"; then
|
||||
|
||||
echo "Processing: ${__target}"
|
||||
|
||||
echo "$(__hash_env)" >"$(__get_hash_file "${__source_file}")"
|
||||
|
||||
__target_dir="$(dirname "${__target}")"
|
||||
|
||||
mkdir -p "${__target_dir}"
|
||||
|
||||
if [ -e "${__target}" ]; then
|
||||
rm "${__target}"
|
||||
fi
|
||||
|
||||
if [ "${__JPEG_RESCALE}" == 'true' ]; then
|
||||
convert "${__source_file}" -quality "${JPEG_QUALITY}" -auto-orient -resize "${JPEG_SCALE}"% "${__target}"
|
||||
else
|
||||
cp "${__source_file}" "${__target}"
|
||||
fi
|
||||
|
||||
if [ "${__JPEG_OPTIMIZE}" == 'true' ]; then
|
||||
jpegoptim -s "${__target}" 1>/dev/null
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
__set_env './src/.env'
|
||||
|
||||
}
|
||||
|
||||
########################################
|
||||
# __get_hash_file <file>
|
||||
########################################
|
||||
#
|
||||
# Get Hash File
|
||||
# Returns the hash path for a given file
|
||||
#
|
||||
########################################
|
||||
|
||||
__get_hash_file() {
|
||||
echo "${1}.hash"
|
||||
}
|
||||
|
||||
########################################
|
||||
# __check_file <file>
|
||||
########################################
|
||||
#
|
||||
# Check File
|
||||
# Checks if a given file is current
|
||||
#
|
||||
########################################
|
||||
|
||||
__check_file() {
|
||||
|
||||
__hash_file="$(__get_hash_file "${1}")"
|
||||
|
||||
__target="$(sed 's|^\./src/|./|' <<<"${1}")"
|
||||
|
||||
if ! [ -e "${__target}" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ -e "${__hash_file}" ]; then
|
||||
__file_hash="$(cat "${__hash_file}")"
|
||||
if [ "${__file_hash}" == "$(__hash_env)" ]; then
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
return 1
|
||||
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
|
||||
{
|
||||
|
||||
pushd "$(dirname "$0")"
|
||||
|
||||
pushd ../
|
||||
|
||||
} &>/dev/null
|
||||
|
||||
###############################################################################
|
||||
|
||||
find './content/' -type f -iwholename '*/src/.env' | while read -r __file; do
|
||||
|
||||
__parent_directory="$(sed 's|src/.env$||' <<<"${__file}")"
|
||||
|
||||
__set_env "${__file}"
|
||||
|
||||
pushd "${__parent_directory}" &>/dev/null
|
||||
|
||||
__process "${__file}"
|
||||
|
||||
popd &>/dev/null
|
||||
|
||||
__clear_env
|
||||
|
||||
done
|
||||
|
||||
###############################################################################
|
||||
|
||||
popd &>/dev/null
|
||||
|
||||
exit
|
||||
Loading…
Add table
Reference in a new issue