#!/bin/bash

MINKE_VERSION=“1.15.0”

DOCKER_SOCK=“/var/run/docker.sock:/var/run/docker.sock” NEW_UUID=$(base64 /dev/urandom | tr -d '/+' | head -c 32 | tr '[:upper:]' '[:lower:]') DOCKER_IMAGE=“nicholasjackson/minke:${MINKE_VERSION}” COMMAND=$* GEM_VOLUMES=“” SSH_AUTH=“”

# Forward keys to docker host if [[ $1 == “-A” || $2 == “-A” ]]; then

if [[ "${DOCKER_MACHINE}" != "" ]]; then
  # for docker machine
  SSH_SOCK=boot2docker.$$.ssh.socket
  docker-machine ssh ${DOCKER_MACHINE} -A -S $SSH_SOCK -M -f -n tail -f /dev/null
  AGENT_SOCK=$(docker-machine ssh ${DOCKER_MACHINE} -S $SSH_SOCK echo \$\(readlink -f \$SSH_AUTH_SOCK\))
  SSH_AUTH="-e AGENT_SOCK=${AGENT_SOCK} -e SSH_AUTH_SOCK=/ssh-agent/ssh.sock -v ${AGENT_SOCK}:/ssh-agent/ssh.sock"
fi

if [[ "${DOCKER_MACHINE}" == "" ]]; then
  SSH_AUTH="-e AGENT_SOCK=${SSH_AUTH_SOCK} -e SSH_AUTH_SOCK=/ssh-agent/ssh.sock -v ${SSH_AUTH_SOCK}:/ssh-agent/ssh.sock"
fi

echo "Forwarding SSH Keys: ${SSH_AUTH}"

fi

# Test if interactive terminal and set the flag

[ -t 1 ]

&& IT=“-it” || IT=“”

# Do we need to forward an ssh key for encrypt? MOUNT_VOLUME=“” while getopts 'Avm:v' flag; do

if [[ $flag == "m" ]]; then
  SSH_KEY="-v ${OPTARG}"
fi

done

if [[ $1 != generate* ]]; then

# Test if we need to mount any special volumes for paths specified in the Gemfile
while read -r line; do
              if [[ $line != \#* ]]; then
                      l=$(echo $line | sed "s/.*:path *=> *//" | sed "s/['|\"]\(.*\)['|\"]/\1/")
                      GEM_VOLUMES="${GEM_VOLUMES} -v $l:$l"
              fi
done < <(grep :path Gemfile)

DIR=$(dirname `pwd`)

DOCKER_RUN="docker run ${IT} --rm --net=minke_${NEW_UUID} ${SSH_AUTH} ${GEM_VOLUMES} ${SSH_KEY} -v ${DOCKER_SOCK} -v ${DIR}:${DIR} -e BUNDLE_PATH=${PWD}/vendor -e BUNDLE_JOBS=2 -e DOCKER_NETWORK=minke_${NEW_UUID} -w ${DIR}/_minke ${DOCKER_IMAGE} ${COMMAND}"

echo "Running command: minke ${COMMAND}"
id=$(docker network create minke_${NEW_UUID})
eval "${DOCKER_RUN}"
id=$(docker network rm minke_${NEW_UUID})

# Clean up socket
if [[ "${DOCKER_MACHINE}" != "" ]]; then
  docker-machine ssh default -S $SSH_SOCK -O exit
fi

fi

if [[ $1 = generate* ]]; then

DIR=$(pwd)
DOCKER_RUN="docker run --rm -v ${DOCKER_SOCK} -v ${DIR}:${DIR} -w ${DIR}:${DIR} ${DOCKER_IMAGE} ${COMMAND}"
eval "$DOCKER_RUN"

fi