#!/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