#!/usr/bin/env bash

if [[ $# -lt 2 ]]; then
    echo "usage: $0 <app> <dokku-host> [forwarded-port]"
    exit 1
fi

set -eo pipefail
SELF=`which $0`; APP="$1"; TARGET="$2"; FORWARDED_PORT="$3"
REMOTE="dokku@$TARGET"
REPO="t-$(basename $APP)-$RANDOM"

TMP=$(mktemp -d -t "$TARGET.XXXXX")
trap "rm -rf $TMP" EXIT
rmdir $TMP && cp -r $(dirname $SELF)/$APP $TMP
cd $TMP
git init -q
git config user.email "robot@example.com"
git config user.name "Test Robot"
git remote add target $REMOTE:$REPO

[[ -f gitignore ]] && mv gitignore .gitignore
git add .

[[ -x pre-commit ]] && ./pre-commit $REMOTE $REPO
git commit -m 'initial commit'
git push target master

cleanup() {
	ssh $REMOTE delete $REPO || true
}

trap cleanup EXIT

if [[ ! -x post-deploy ]] || ./post-deploy $REMOTE $REPO $TARGET:80; then
	URL=$(ssh $REMOTE url $REPO)$FORWARDED_PORT

	for i in 2 4 8
	do
		sleep $i

		if ./check_deploy $URL $TARGET:80
		then
		    echo "----------------------------------------"
			echo "-----> Deploy SUCCESS ($APP)!" 
		    echo "----------------------------------------"
		    exit 0
		fi
	done

	ssh $REMOTE logs $REPO
fi

echo "----------------------------------------"
echo "-----> Deploy FAILED ($APP)!" 
echo "----------------------------------------"
exit 1
