83 lines
1.6 KiB
Bash
Executable File
83 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Determine if it is Mac OS and switch to use gxargs instead
|
|
CMD=xargs
|
|
if [ $(which system_profiler) ]; then
|
|
CMD=gxargs
|
|
fi
|
|
|
|
# Bring in the variables from SOLUTION file, supporting
|
|
# nested substitution
|
|
. SOLUTION
|
|
. MANIFEST
|
|
|
|
VARS=($(sed -nE "s,(^[^#][^=]*).*$,\1,pg" SOLUTION))
|
|
VARS+=($(sed -nE "s,(^[^#][^=]*).*$,\1,pg" MANIFEST))
|
|
for var in ${VARS[@]}; do
|
|
export ${var}
|
|
done
|
|
|
|
# Build a SHELL-FORMAT value to pass to envsubst.
|
|
# Only those variables matched in SHELL-FORMAT will
|
|
# be escaped by envsubst.
|
|
ENV=''
|
|
for var in ${VARS[@]}; do
|
|
ENV=${ENV}'$'${var}
|
|
done
|
|
|
|
# Remove the Dockerfile if it exists; should check
|
|
# if it is clean first, and abort if not.
|
|
#
|
|
[ -e Dockerfile ] && rm Dockerfile
|
|
|
|
cat << EOM > Dockerfile
|
|
#
|
|
# DO NOT EDIT THIS DOCKERFILE
|
|
#
|
|
# This file is auto-generated via scripts/build-dockerfile
|
|
# by using environment substitution while concatenating the
|
|
# contents of templates/*, and then adding the contents
|
|
# of Dockerfile.solution
|
|
#
|
|
# Most solution specific changes should be isolated in
|
|
# Dockerfile.solution. After making changes, you can
|
|
# then re-run scripts/build-dockerfile
|
|
#
|
|
EOM
|
|
|
|
for snippet in templates/??-*.in; do
|
|
cat << EOM >> Dockerfile
|
|
|
|
#
|
|
# Template from templates/${snippet}
|
|
#
|
|
EOM
|
|
envsubst ${ENV} < $snippet >> Dockerfile
|
|
done
|
|
|
|
cat << EOM >> Dockerfile
|
|
|
|
#
|
|
# Solution begins here (from Dockerfile.solution)
|
|
#
|
|
EOM
|
|
|
|
envsubst ${ENV} < Dockerfile.solution >> Dockerfile
|
|
|
|
cat << EOM >> Dockerfile
|
|
|
|
#
|
|
# Standard ending begins here (from templates/ending.in)
|
|
#
|
|
EOM
|
|
|
|
envsubst ${ENV} < templates/ending.in >> Dockerfile
|
|
|
|
cat << EOM
|
|
|
|
Dockerfile has been updated.
|
|
|
|
To build the image, you can run scripts/build-images
|
|
|
|
EOM
|