#!/bin/bash

set -e

DOCKER_REPO=kluemicroservice/base
VERSION=$(print_version)

IS_DIRTY_CLONE=$(git status --short --porcelain | wc -l)
if [ "$IS_DIRTY_CLONE" -gt 0 ]; then
    echo "ERROR: this clone is not clean! Commit and re-run."
    exit 1
fi

ROOTDIR=$(git rev-parse --show-toplevel)
if [ "$PWD" != "$ROOTDIR" ]; then
    echo "ERROR: current dir is not the clone's root directory"
    exit 1
fi

DOCKERFILE_TEMPLATE=$(get_deploy_config_path)/Dockerfile.base.template
if [ ! -e "$DOCKERFILE_TEMPLATE" ]; then
    echo "ERROR: cannot find $DOCKERFILE_TEMPLATE"
    exit 1
fi

echo "=> Default Klue-microservice requirements"
mkdir -p docker
cat <<EOF > docker/requirements.txt
Klue-microservice
Klue-microservice-async
EOF

echo "=> Generating docker/Dockerfile"

cp requirements.txt docker/
cat $DOCKERFILE_TEMPLATE \
    | sed -e "s/<VERSION>/$VERSION/" \
    > docker/Dockerfile

# Remove image if it already exists
# TODO: make the cleanup optional, so it can be skipped if no changes to project files
IMAGE_ID=$(docker images --quiet ${DOCKER_REPO}:${VERSION})
if [ ! -z "$IMAGE_ID" ]; then
    echo "=> Deleting cached image"
    docker rmi -f $IMAGE_ID
fi

echo "=> Building docker image"
docker build -t ${DOCKER_REPO}:${VERSION} --rm docker

rm docker/Dockerfile
rm docker/requirements.txt

set +e
IS_LOGGEDIN=$(docker info | grep Username)
set -e
if [ -z "$IS_LOGGEDIN" ]; then
    echo "ERROR: please login to docker hub with 'docker login'"
    exit 1
fi

echo "=> Pushing to registry ${DOCKER_REPO}:${VERSION}"
docker push ${DOCKER_REPO}:${VERSION}

echo "=> Done."