]> git.immae.eu Git - github/fretlink/ansible-clever.git/blobdiff - files/clever-wait-deploy.sh
deploy: revert back to git push + polling
[github/fretlink/ansible-clever.git] / files / clever-wait-deploy.sh
diff --git a/files/clever-wait-deploy.sh b/files/clever-wait-deploy.sh
new file mode 100755 (executable)
index 0000000..98c5c37
--- /dev/null
@@ -0,0 +1,80 @@
+#!/usr/bin/env bash
+
+set -ueo pipefail
+
+VERBOSE=${VERBOSE:-}
+lastCleverActivity=""
+
+function cleverActivity {
+  lastCleverActivity=$(clever activity)
+}
+
+function ensure {
+  if [ "$?" == "1" ]
+  then
+    echo "✗ Deployment failed!"
+  fi
+  VERBOSE=true
+  verbose
+}
+
+trap ensure EXIT ERR
+
+function deploying {
+  checkStatus "$1" "IN PROGRESS"
+}
+
+function deployed {
+  checkStatus "$1" "OK"
+}
+
+function inactive {
+  checkStatus "$1" "" "-v"
+}
+
+function checkStatus {
+  local commit="$1"
+  local status="$2"
+
+  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 commit="$1"
+  local samplingTime=5
+
+  echo "️▫ Waiting for deployment to start..."
+  while inactive "$commit"
+  do
+    verbose
+    sleep $samplingTime
+  done
+
+  # Wait for completion
+  echo "▪ Deployment in progress..."
+  while deploying "$commit"
+  do
+    verbose
+    sleep $samplingTime
+  done
+
+  deployed "$commit"
+  echo "✓ Deployment done."
+}
+
+function getHeadRev {
+  local chdir="$1/.git"
+
+  git --git-dir="$chdir" rev-parse HEAD
+}
+
+workdir="$(pwd)"
+check "$(getHeadRev "${workdir}")"