Branch discovery and build polling
[releng/global-jjb.git] / shell / rtdv3.sh
index 3246767..7b4fef8 100644 (file)
 echo "---> rtdv3.sh"
 set -euo pipefail
 
+watchbuild(){
+  echo "INFO: Running build against branch $1"
+  local buildid
+  local result
+  buildid=$(lftools rtd project-build-trigger "$rtdproject" "$1" | jq '.build.id')
+
+  result=null
+  while [ $result == null ]; do
+    sleep 10
+    result=$(lftools rtd project-build-details "$rtdproject" "$buildid"  | jq '.success')
+    echo "INFO Current result of running build $result"
+    if [[ $result == failed ]]; then
+      echo "INFO: read the docs build completed with status: $result"
+      exit 1
+    fi
+  done
+  echo "INFO: read the docs build completed with status: $result"
+}
+
 project_dashed="${PROJECT////-}"
-umbrella="$(echo "$GERRIT_URL" | awk -F"." '{print $2}')"
+umbrella=$(echo "$GERRIT_URL" | awk -F'.' '{print $2}')
 if [[ "$SILO" == "sandbox" ]]; then
   rtdproject="$umbrella-$project_dashed-test"
 else
@@ -24,8 +43,8 @@ masterproject="$umbrella-$MASTER_RTD_PROJECT"
 
 echo "INFO:"
 echo "INFO: Project: $PROJECT"
-echo "INFO: Read the Docs Project: https://$rtdproject.readthedocs.io"
-echo "INFO: Read the Docs master Project: https://$masterproject.readthedocs.io"
+echo "INFO: Read the Docs Sub Project: https://$rtdproject.readthedocs.io"
+echo "INFO: Read the Docs Master Project: https://$masterproject.readthedocs.io"
 
 
 if [[ "$JOB_NAME" =~ "verify" ]]; then
@@ -38,7 +57,7 @@ echo "INFO: Verify job completed"
 fi
 
 if [[ "$JOB_NAME" =~ "merge" ]]; then
-echo "INFO: Running merge job"
+echo "INFO: Performing merge action"
 
   # This retuns null if project exists.
   project_exists=false
@@ -69,23 +88,64 @@ echo "INFO: Running merge job"
   if [[ "$rtdproject" != "$masterproject" ]]; then
     subproject_exists=false
     while read -r subproject; do
-        if [[ "$subproject" == "$rtdproject" ]]; then
-          subproject_exists=true
-          break
-        fi
+      if [[ "$subproject" == "$rtdproject" ]]; then
+        subproject_exists=true
+        break
+      fi
     done < <(lftools rtd subproject-list "$masterproject")
 
     if $subproject_exists; then
-      echo "INFO: subproject relationship already created"
+      echo "INFO: subproject $rtdproject relationship already created"
     else
-      echo "INFO: Need to create subproject relationship"
+      echo "INFO: Creating subproject relationship"
       lftools rtd subproject-create "$masterproject" "$rtdproject"
       echo "INFO sleeping for 10 seconds"
       sleep 10
     fi
   fi
 
-  # api v3 method does not update latest whith stream.
-  lftools rtd project-build-trigger "$rtdproject" "$STREAM"
-  lftools rtd project-build-trigger "$rtdproject" latest
+  # api v3 method does not update /latest/ when master is triggered.
+  # Also, when we build anything other than master we want to trigger /stable/ as well.
+  # allow projects to change their landing page from latest to branch_name
+
+  current_version="$(lftools rtd project-details "$rtdproject" | yq -r .default_version)"
+  if [[ -z ${DEFAULT_VERSION:-} ]]; then
+    echo "DEFAULT_VERSION (default-version) value cannot be empty"
+    exit 1
+  fi
+  default_version="${DEFAULT_VERSION}"
+
+  echo "INFO: current default version $current_version"
+  if [[ $current_version != "$default_version" ]]; then
+    echo "INFO: Setting rtd landing page to $default_version"
+    lftools rtd project-update "$rtdproject" default_version="$default_version"
+  fi
+
+  if [[ $GERRIT_BRANCH == "master" ]]; then
+    echo "INFO: triggering $rtdproject latest"
+    watchbuild latest
+  else
+
+    #read the docs only understands lower case branch names
+    branch=$(echo "$GERRIT_BRANCH" | tr '[:upper:]' '[:lower:]')
+    echo "INFO: Checking if read the docs has seen branch $branch"
+
+    #if this is 404. then run discover branch
+    if ! lftools rtd project-version-details "$rtdproject" "$branch" | jq '.active'; then
+      echo "INFO: read the docs has not seen branch $branch for project $rtdproject"
+      echo "INFO: triggering $rtdproject latest to instantiate new branch discovery"
+      watchbuild latest
+    fi
+
+    echo "INFO: triggering $rtdproject $branch"
+    watchbuild "$branch"
+
+    #Make newly discovered branches visible in the u/i
+    isactive=$(lftools rtd project-version-details "$rtdproject" "$branch" | jq '.active')
+    if [[ "$isactive" == false ]]; then
+      echo "INFO: Marking $branch as active for project $rtdproject"
+      lftools rtd project-version-update "$rtdproject" "$branch" true
+    fi
+
+  fi
 fi