# This bash file is intended to be used for docker images.  To use this file
# just create your own bash file in which you define the APPNAME var and the
# copy_release_files() function which copies all the files needed in the
# distribution in ${ROOT}. At a minimum, copy_release_files() must place
# a 'Dockerfile' file immediately under ${ROOT}. Then source this file after
# those definitions. The resulting docker image will be uploaded to the Google
# Container registry.
#
# PROJECT
# -------
# If PROJECT is set then it is used as the default GCE project for the Google
# Container Registry. This value defaults to 'skia-public'. The project must
# have Google Container Registry activated.
#
# TAG
# ---
# If TAG is set then it is used as the tag for the docker image, otherwise a
# unique tag is generated from the time/date, user, git hash and repo state.
#
# SKIP_UPLOAD
# -----------
# If SKIP_UPLOAD is set then do not push the image to the container registry.
# This is useful when developing locally and needing to rapidly iterate on
# the image.
#
# SKIP_BUILD
# -----------
# If SKIP_BUILD is set then do not run docker on the ROOT directory. This also
# skips the upload step since nothing will have been built. Useful for Louhi
# steps.
#
# ROOT
# ----
# If ROOT is not set then it will be set to a temp directory that is created,
# otherewise ROOT is presumed to exist.

set -e

# Useful variables used by build_* scripts.
INSTALL="install -D --verbose --backup=none"
INSTALL_DIR="install -d --verbose --backup=none"
REL=$(dirname "$BASH_SOURCE")

if [ -z "$ROOT" ]; then
  ROOT=`mktemp -d`
fi
mkdir -p ${ROOT}
PROJECT="${PROJECT:-skia-public}"

# Calculate the tag.
if [ -z "$TAG" ]; then
  # If the format of this ever changes then please also update k8s_checker/main.go
  TAG=`${REL}/release_tag.sh`
fi

copy_release_files

if [ -z "$SKIP_BUILD" ]; then
docker build -t ${APPNAME} ${ROOT}

  if [ -z "$SKIP_UPLOAD" ]; then
    docker tag ${APPNAME} gcr.io/${PROJECT}/${APPNAME}:${TAG}
    docker push gcr.io/${PROJECT}/${APPNAME}:${TAG}
    echo gcr.io/${PROJECT}/${APPNAME}:${TAG}
  fi
fi
