envsubst/entrypoint.bash (45 lines of code) (raw):
#!/usr/bin/env bash
set -eu -o pipefail
declare -a files
files_count=0
shell_format=
function usage() {
echo "usage: $0 [-e <env-file1>] file1 [file2...fileN]" >&2
echo " -h show this help screen" >&2
echo " -e add environment variables from this env file (can be specified multiple times)'" >&2
echo " -s specify shell-format given to envsubst command" >&2
exit 0
}
# Parse command line flags
while true; do
[[ $# == 0 ]] && break
case "${1}" in
-h|--help)
usage
;;
-e|--env)
[[ -z "${2}" ]] && usage
export $(grep -v '^#' ${2} | xargs)
shift 2
;;
-s|--shell-format)
[[ -z "${2}" ]] && usage
shell_format=${2}
shift 2
;;
*)
files[files_count]="${1}"
files_count=$(( files_count + 1 ))
shift
;;
esac
done
# Fail if no files/wildcards were provided
if [[ ${files_count} == 0 ]]; then
echo "Please specify list of files to pre-process" >&2
exit 1
fi
shopt -s globstar
# Iterate files/wildcards and pre-process them using envsubst
for f in $(ls ${files[*]}); do
echo "Pre-processing ${f}..." >&2
cat ${f} | envsubst ${shell_format:+"${shell_format}"} > ${f}.processed
mv ${f}.processed ${f}
done
exit 0