#!/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