Skip to content

Instantly share code, notes, and snippets.

@jackdpeterson
Last active September 29, 2018 08:33
Show Gist options
  • Save jackdpeterson/6242569429180f85e53f22df0fae6c05 to your computer and use it in GitHub Desktop.
Save jackdpeterson/6242569429180f85e53f22df0fae6c05 to your computer and use it in GitHub Desktop.
Dynamically load environment variables after webpack compiles JS using a bash script to replace the values
#!/usr/bin/env bash
## Given env.js that looks something like
#
# const env = {
# application_env : '~REACT_ENV_REPLACE_JS_APPLICATION_ENV~',
# };
# module.exports = env;
# And an environment variable of JS_APPLICATION_ENV=whateverItOughtToBe ... replace any occurrences on runtime (add to docker CMD)
#
####
INPUT_DIRECTORY=$1
APPLICABLE_ENV_VARS=$(printenv | grep "^JS_[a-zA-Z0-9\_+]*")
if [ ! -d ${INPUT_DIRECTORY} ]; then
echo >&2 "provided input directory not found."
exit 2
fi
JS_INPUT_FILES=$(ls ${INPUT_DIRECTORY}/ | grep "^.*\.js$");
INVALID_ENV_VAR=0
for CURRENT_ENV_VAR in ${APPLICABLE_ENV_VARS}; do
CURRENT_ENV_VAR_VALUE=$(echo ${CURRENT_ENV_VAR} | cut -d "=" -f2)
if [[ ${CURRENT_ENV_VAR_VALUE} =~ [\$|] ]]; then
echo >&2 "${CURRENT_ENV_VAR} contains a \$ or a | (pipe) character. Please escape it!! No manipulations have occurred."
INVALID_ENV_VAR=1
fi
done
if [ ${INVALID_ENV_VAR} -eq 1 ]; then
exit 2
else
echo "Environment variable values look safe. Proceeding with manipulating compiled JS."
fi
for CURRENT_ENV_VAR in ${APPLICABLE_ENV_VARS}; do
CURRENT_ENV_VAR_VALUE=$(echo ${CURRENT_ENV_VAR} | cut -d "=" -f2)
if [[ ${CURRENT_ENV_VAR_VALUE} =~ [\$|] ]]; then
echo >&2 "${CURRENT_ENV_VAR} contains a \$ or a | (pipe) character. Please escape it. This environment variable will be skipped,"
exit 2
fi
CURRENT_ENV_VAR_KEY=$(echo ${CURRENT_ENV_VAR} | cut -d "=" -f1)
SEARCH_PATTERN="~REACT_ENV_REPLACE_${CURRENT_ENV_VAR_KEY}~"
echo "Searching for: ${SEARCH_PATTERN} and replacing with: ${CURRENT_ENV_VAR_VALUE}"
for JS_INPUT_FILE in ${JS_INPUT_FILES}; do
echo "Looking at: ${JS_INPUT_FILE}"
JS_OUTPUT_FILE="adsf.out"
COMMAND_TO_EXECUTE="sed -i \"s|${SEARCH_PATTERN}|${CURRENT_ENV_VAR_VALUE}|g\" ${INPUT_DIRECTORY}/${JS_INPUT_FILE}"
echo ${COMMAND_TO_EXECUTE}
COMMAND_OUTPUT=$(eval ${COMMAND_TO_EXECUTE})
echo ${COMMAND_OUTPUT}
done
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment