tf-a-lts-docs-watcher: Add tf-a-lts-docs-watcher job

Triggers whenever a code change is merged into the lts branch
or a lts tag is created of the TF-A repository. Executes a webhook
to trigger the ReadTheDocs service to build a fresh copy of the
documentation for one or more branches. [1]

[1]: https://linaro.atlassian.net/browse/TFC-511

Signed-off-by: Arthur She <arthur.she@linaro.org>
Change-Id: I9ab6cdd5240d81ebe0659231d7b7721181d0f700
diff --git a/scripts/tf-a-lts-docs-watcher.sh b/scripts/tf-a-lts-docs-watcher.sh
new file mode 100755
index 0000000..45f93f5
--- /dev/null
+++ b/scripts/tf-a-lts-docs-watcher.sh
@@ -0,0 +1,62 @@
+#!/bin/bash
+set -ex
+
+echo "########################################################################"
+echo "    Gerrit Environment"
+env |grep '^GERRIT'
+echo "########################################################################"
+
+RTD_WEBHOOK_URL="https://readthedocs.org/api/v2/webhook/trustedfirmware-a/87181/"
+RTD_VER_API="https://readthedocs.org/api/v3/projects/trustedfirmware-a/versions/"
+RTD_WEBHOOK_SECRET_KEY=${RTD_WEBHOOK_SECRET}
+RTD_API_TOKEN=${RTD_API_TOKEN}
+
+new_tag=""
+refname=${GERRIT_REFNAME##*/}
+lts_branch=${refname}
+echo ${GERRIT_REFNAME} | grep -q "refs\/tags\/" && lts_branch=${refname%.*} && new_tag=${refname}
+
+function activate_version() {
+    version=$1
+    retry=0
+
+    status=$(curl -s -X PATCH -H "Content-Type: application/json" -H "Authorization: Token ${RTD_API_TOKEN}" \
+                -d "{\"active\": true}" ${RTD_VER_API}/${version}/ | jq .detail)
+
+    while [ "${status}" = "\"Not found.\"" ];
+    do
+        [ ${retry} -gt 5 ] && echo "RTD can not find the version: ${new_tag}" && exit 1
+        sleep 10
+	    status=$(curl -s -X PATCH -H "Content-Type: application/json" -H "Authorization: Token ${RTD_API_TOKEN}" \
+                 -d "{\"active\": true}" ${RTD_VER_API}/${version}/ | jq .detail)
+        retry=$((retry+1))
+    done
+}
+
+echo "Notifying ReadTheDocs of changes on: ${lts_branch}"
+build_trigger=$(curl -s -X POST -d "branches=${lts_branch}" -d "token=${RTD_WEBHOOK_SECRET_KEY}" ${RTD_WEBHOOK_URL} | jq .build_triggered)
+if [ "${build_trigger}" = "false" ]; then
+	# The branch might be new and hasn't been known by RTD, or hasn't been activated, or both
+    # we can trigger a build for the master branch to update all versions
+	echo "The branch ${lts_branch} has not been activated! Activate it!"
+    curl -s -X POST -d "branches=master" -d "token=${RTD_WEBHOOK_SECRET_KEY}" ${RTD_WEBHOOK_URL}
+    activate_version ${lts_branch}
+fi
+
+# Triggered by a new tag
+if [ -n "${new_tag}" ]; then
+    echo -e "\nNew release tag: ${new_tag}"
+    # Hide the current active and unhidden tags
+    old_tags=$(curl -s -H "Authorization: Token ${RTD_API_TOKEN}" "${RTD_VER_API}/?slug=${lts_branch}&type=tag&active=true" | \
+    		   jq -r '.results | map(select(.hidden == false) | .verbose_name) | .[]')
+    for t in ${old_tags};
+    do
+        echo "Hide old tag: ${t}"
+        curl -s -X PATCH -H "Content-Type: application/json" -H "Authorization: Token ${RTD_API_TOKEN}" \
+        	 -d "{\"hidden\": true}" ${RTD_VER_API}/${t}/
+    done
+    # Active the new version
+    echo "Active new version: ${new_tag}"
+    activate_version ${new_tag}
+fi
+