#!/bin/bash

PWD=$(pwd)
PACKAGE=${PWD/${GOPATH}\/src\//}
BINARY=$(basename ${PACKAGE})

GIT_NAME=$(git config --get user.name)
GIT_MAIL=$(git config --get user.email)

if [ -e "${PWD}/Godeps/_workspace/src" ]; then
  OVERRIDE_GOPATH="/go:/go/src/${PACKAGE}/Godeps/_workspace"
fi

EXPOSE="EXPOSE"

while getopts ":e:t:v:" opt; do
  case $opt in
    e)
      EXPOSE="${EXPOSE} ${OPTARG}"
      ;;
    t)
      TIMEZONE=${OPTARG}
      ;;
    v)
      VOLUME="${VOLUME}, \"${OPTARG}\""
      ;;
    :)
      echo "Option -$OPTARG requires an argument." >&2
      exit 1
      ;;
  esac
done

# Header
cat <<EOF
FROM golang:alpine

LABEL maintainer "${GIT_NAME} <${GIT_MAIL}>"

EOF

# Support old (pre-1.6) Godep style
[ -z "${OVERRIDE_GOPATH}" ] || echo -e "ENV GOPATH ${OVERRIDE_GOPATH}\n"

# Allow setting timezone using `-t Europe/Berlin`
[ -z "${TIMEZONE}" ] || cat <<EOF
RUN set -ex \\
 && apk add --update tzdata \\
 && cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime \\
 && echo "${TIMEZONE}" > /etc/timezone \\
 && apk del --purge tzdata

EOF

# Build binary
cat <<EOF
ADD . /go/src/${PACKAGE}
WORKDIR /go/src/${PACKAGE}

RUN set -ex \\
 && apk add --update git ca-certificates \\
 && go install -ldflags "-X main.version=\$(git describe --tags || git rev-parse --short HEAD || echo dev)" \\
 && apk del --purge git

EOF

# Allow exposing ports using `-e 3000`
(test "EXPOSE" != "${EXPOSE}") && echo -e "${EXPOSE}\n"

# Allow
[ -z "${VOLUME}" ] || echo -e "VOLUME [${VOLUME/, /}]\n"

# Execution information
cat <<EOF
ENTRYPOINT ["/go/bin/${BINARY}"]
CMD ["--"]
EOF