124 lines
3.7 KiB
Bash
124 lines
3.7 KiB
Bash
#!/bin/bash
|
|
|
|
#####################################################################
|
|
# Substitutes the given environment variables in the given files.
|
|
# Parameters:
|
|
# $1: Comma-delimited list of file paths
|
|
# $2: Comma-delimited list of environment variables
|
|
# $3: Absolute path to nginx html directory (optional)
|
|
# $4: Should restart nginx (optional)
|
|
#####################################################################
|
|
|
|
echo 'Substituting environment variables...'
|
|
num_args=0
|
|
|
|
# The first parameter is a comma-delimited list of paths to files which should be substituted
|
|
if [[ -z $1 ]]; then
|
|
echo 'ERROR: No target files given.'
|
|
exit 1
|
|
else
|
|
num_args=1
|
|
fi
|
|
|
|
# The second parameter is a comma-delimited list of environment variable names
|
|
if [[ -z $2 ]]; then
|
|
echo 'ERROR: No environment variables given.'
|
|
exit 1
|
|
else
|
|
num_args=2
|
|
fi
|
|
|
|
# The third parameter is the absolute path to the nginx html directory
|
|
if [[ -z $3 ]]; then
|
|
echo '' # It's optional. Don't print anything.
|
|
else
|
|
num_args=3
|
|
fi
|
|
|
|
# The fourth parameter, if 'true', is whether we should reload nginx
|
|
if [[ -z $4 ]]; then
|
|
echo '' # It's optional. Don't print anything.
|
|
else
|
|
num_args=4
|
|
fi
|
|
|
|
# Find & replace BASE_HREF in all files in the nginx html directory
|
|
if [[ "$2" == *"BASE_HREF"* ]] && [[ "$2" == *"DEPLOY_URL"* ]]; then
|
|
# Add trailing slash to $BASE_HREF if needed
|
|
length=${#BASE_HREF}
|
|
last_char=${BASE_HREF:length-1:1}
|
|
[[ $last_char != "/" ]] && BASE_HREF="$BASE_HREF/"; :
|
|
|
|
# Add trailing slash to $DEPLOY_URL if needed
|
|
length=${#DEPLOY_URL}
|
|
last_char=${DEPLOY_URL:length-1:1}
|
|
[[ $last_char != "/" ]] && DEPLOY_URL="$DEPLOY_URL/"; :
|
|
|
|
# The third parameter is the absolute path to the nginx html directory
|
|
if [[ $num_args -ge 3 ]]; then
|
|
# Replace all instances of __REPLACE_ME_WITH_BASE_HREF__ with $BASE_HREF
|
|
find "$3" \( -type d -name .git -prune \) -o -type f -print0 | \
|
|
xargs -0 sed -i 's@__REPLACE_ME_WITH_BASE_HREF__@'"$BASE_HREF"'@g'
|
|
|
|
echo 'Replacing base href...'
|
|
# Wait a few seconds in case find | sed needs more time
|
|
sleep 3
|
|
|
|
# Replace all instances of __REPLACE_ME_WITH_DEPLOY_URL__ with $DEPLOY_URL
|
|
find "$3" \( -type d -name .git -prune \) -o -type f -print0 | \
|
|
xargs -0 sed -i 's@__REPLACE_ME_WITH_DEPLOY_URL__@'"$DEPLOY_URL"'@g'
|
|
|
|
echo 'Replacing deploy url...'
|
|
# Wait a few seconds in case find | sed needs more time
|
|
sleep 3
|
|
fi
|
|
fi
|
|
|
|
# Convert "VAR1,VAR2,VAR3,..." to "\$VAR1 \$VAR2 \$VAR3 ..."
|
|
env_list="\\\$${2//,/ \\\$}" # "\" and "$" are escaped as "\\" and "\$"
|
|
for file_path in ${1//,/ }
|
|
do
|
|
echo "replacing environment variables in $file_path"
|
|
|
|
# Replace strings in the given file(s) in env_list
|
|
envsubst "$env_list" < "$file_path" > "$file_path".tmp && mv "$file_path".tmp "$file_path"
|
|
|
|
echo '...'
|
|
# Wait a second in case envsubst needs more time
|
|
sleep 1
|
|
|
|
# If this is the nginx default.conf file, replace double slashes with single slashes
|
|
if [[ $file_path == *"/default.conf"* ]]; then
|
|
sed -i -e 's@//@/@g' "$file_path"
|
|
fi
|
|
done
|
|
|
|
echo 'Finished substituting environment variables.'
|
|
for env_var in ${2//,/ }
|
|
do
|
|
echo "$env_var = ${!env_var}"
|
|
done
|
|
|
|
# Reload nginx
|
|
if [ $num_args -ge 4 ] && [ "$4" == "true" ]; then
|
|
# Check to see if nginx command is available
|
|
if hash nginx 2> /dev/null; then
|
|
# Check to see if nginx is already running
|
|
if [ -e /var/run/nginx.pid ]; then
|
|
echo "nginx is currently running. Reloading nginx..."
|
|
exec nginx -s reload
|
|
echo "nginx reloaded."
|
|
else
|
|
echo "nginx is not yet running. Starting nginx..."
|
|
exec nginx -g 'daemon off;'
|
|
echo "nginx started."
|
|
fi
|
|
else
|
|
echo "nginx command not found on this system."
|
|
fi
|
|
fi
|
|
|
|
# Execute all other commands with parameters
|
|
num_args=$((num_args + 1))
|
|
exec "${@:num_args}"
|