-#!/bin/bash -e
+#!/usr/bin/env bash
+
+set -ueo pipefail
+
+VERBOSE=${VERBOSE:-}
+lastCleverActivity=""
+timeout=2300 # 100 seconds less than the Ansible tasks' timeout
+startTime=$(date +%s)
+
+function cleverActivity {
+ lastCleverActivity=$(clever activity)
+}
+
+function ensure {
+ local lastReturnCode="$?"
+
+ VERBOSE=true
+ verbose
+
+ if isNotTimeout
+ then
+ if [ "$lastReturnCode" == "0" ]
+ then
+ echo "✓ Deployment done."
+ else
+ echo "✗ Deployment failed!"
+ fi
+ else
+ echo "⁈ Deployment timeout... Please check clever logs"
+ exit 1
+ fi
+}
+
+function isNotTimeout {
+ [ $(($(date +%s) - startTime)) -lt $timeout ]
+}
+
+trap ensure EXIT ERR
function deploying {
checkStatus "$1" "IN PROGRESS"
}
function inactive {
- local commit="$1"
- [[ "$(clever activity | grep "$commit" | grep "DEPLOY" | wc -l)" == "0" ]]
+ checkStatus "$1" "" "-v"
}
function checkStatus {
local commit="$1"
local status="$2"
- [[ "$(clever activity | grep "$commit" | grep "${status}\s\+DEPLOY" | wc -l)" == "1" ]]
+
+ cleverActivity
+ echo "${lastCleverActivity}" | tail -n1 | grep ${3:+ "${3}"} -q -E "${status}.*DEPLOY.*${commit}"
+}
+
+function verbose {
+ if [ -n "${VERBOSE}" ]; then
+ echo -e "\\nLast clever activity:"
+ echo -e "${lastCleverActivity}\\n"
+ fi
}
function check {
- local timeout=600 # 10 minutes
local commit="$1"
local samplingTime=5
- echo "Waiting for deployment start..."
- while inactive "$commit" -a $timeout -gt 0
+ echo "️▫ Waiting for deployment to start..."
+ while inactive "$commit" && isNotTimeout
do
+ verbose
sleep $samplingTime
- let "timeout-=$samplingTime"
done
# Wait for completion
- echo "Deployment in progress..."
- while deploying "$commit" -a $timeout -gt 0
+ echo "▪ Deployment in progress..."
+ while deploying "$commit" && isNotTimeout
do
+ verbose
sleep $samplingTime
- let "timeout-=$samplingTime"
done
- if [ $samplingTime -eq 0 ]
- then
- echo "Timeout"
- fi
-
deployed "$commit"
}
git --git-dir="$chdir" rev-parse HEAD
}
-check "$(getHeadRev "$@")"
+workdir="$(pwd)"
+check "$(getHeadRev "${workdir}")"