contrib/build.sh
#!/bin/sh
set -eu
info() {
printf '\033[32m%s\033[0m\n' "$*"
}
if [ -e .env ]; then
default_compose_project_name=shellspec
while read -r line; do
case $line in (COMPOSE_PROJECT_NAME=*)
default_compose_project_name=''
esac
done < .env
if [ "$default_compose_project_name" ]; then
: "${COMPOSE_PROJECT_NAME:=$default_compose_project_name}"
export COMPOSE_PROJECT_NAME
fi
fi
target=${3:-}
export DOCKERFILE_BASE AUTHORS
DOCKERFILE_BASE="$(dirname "$1")/"
AUTHORS="$(git config user.name) <$(git config user.email)>"
# Emulate Docker Hub environment variables
export DOCKERFILE_PATH DOCKER_TAG IMAGE_NAME SOURCE_COMMIT
DOCKERFILE_PATH=$(basename "$1")
DOCKER_TAG=${3:-latest}
IMAGE_NAME=$2:$DOCKER_TAG
SOURCE_COMMIT=$(git rev-parse HEAD)
test="docker-compose${target:+.}$target.test.yml"
docker-compose -f ".dockerhub/$test" up --build --abort-on-container-exit
case $1 in
/*) DOCKERFILE_PATH=$1 ;;
*) DOCKERFILE_PATH=$PWD/$1 ;;
esac
cd .dockerhub
if [ "$target" ]; then
hooks/build --target "$target"
else
hooks/build
fi
size=$(docker inspect -f "{{.Size}}" "$IMAGE_NAME")
if [ "$size" -le $((1024 * 1024)) ]; then
size="$(echo "scale=2; $size / 1024" | bc) KB"
else
size="$(echo "scale=2; $size / 1024 / 1024" | bc) MB"
fi
labels=$(
#shellcheck disable=SC2016
format='{{range $k, $v := .Config.Labels}}{{printf "%s: %s\n" $k $v}}{{end}}'
#shellcheck disable=SC2005
echo "$(docker inspect -f "$format" "$IMAGE_NAME")"
)
info "============================================================"
info "Build succeeded: $IMAGE_NAME (size: $size)"
info "------------------------------------------------------------"
echo "$labels"
info "============================================================"