shellspec/shellspec

View on GitHub
contrib/build.sh

Summary

Maintainability
Test Coverage
#!/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 "============================================================"