blob: abdd44896f1d7d3f30d8305820781f85f963aa9a [file] [log] [blame]
Arthur She8c3dac22024-01-15 20:13:40 -08001#!/bin/bash
Paul Sokolovsky98b66892024-11-28 18:47:41 +07002set -x
Arthur She8c3dac22024-01-15 20:13:40 -08003
4echo "########################################################################"
5echo " Gerrit Environment"
Paul Sokolovskyd7c18002024-11-28 14:57:32 +07006env | grep '^GERRIT'
Arthur She8c3dac22024-01-15 20:13:40 -08007echo "########################################################################"
8
Paul Sokolovsky98b66892024-11-28 18:47:41 +07009set -e
10
Paul Sokolovsky6338f102024-03-01 16:26:15 +070011if [ "${GERRIT_PROJECT}" == "TF-A/trusted-firmware-a" ]; then
12 # For real production project, non-sandbox run goes to production RTD project,
13 # while for sandbox run to a separate RTD project.
14 if [ "${SANDBOX_RUN}" == "false" ]; then
Paul Sokolovskyfb2d0402024-03-04 20:20:55 +070015 RTD_PROJECT="trustedfirmware-a"
Paul Sokolovsky6338f102024-03-01 16:26:15 +070016 RTD_WEBHOOK_URL="https://readthedocs.org/api/v2/webhook/trustedfirmware-a/87181/"
Paul Sokolovsky6338f102024-03-01 16:26:15 +070017 RTD_WEBHOOK_SECRET_KEY=${RTD_WEBHOOK_SECRET}
18 RTD_API_TOKEN=${RTD_API_TOKEN}
19 else
Paul Sokolovskyfb2d0402024-03-04 20:20:55 +070020 RTD_PROJECT="trustedfirmware-a-sandbox"
Paul Sokolovsky6338f102024-03-01 16:26:15 +070021 RTD_WEBHOOK_URL="https://readthedocs.org/api/v2/webhook/trustedfirmware-a-sandbox/263958/"
Paul Sokolovsky6338f102024-03-01 16:26:15 +070022 RTD_WEBHOOK_SECRET_KEY=${TFA_SANDBOX_RTD_WEBHOOK_SECRET}
23 RTD_API_TOKEN=${PFALCON_RTD_API_TOKEN}
24 fi
25elif [ "${GERRIT_PROJECT}" == "sandbox/pfalcon/trusted-firmware-a" ]; then
26 # For test project, both "production" and "sandbox" go to the same elsewhere project.
Paul Sokolovskyfb2d0402024-03-04 20:20:55 +070027 RTD_PROJECT="pfalcon-trustedfirmware-a-sandbox"
Paul Sokolovsky6338f102024-03-01 16:26:15 +070028 RTD_WEBHOOK_URL="https://readthedocs.org/api/v2/webhook/pfalcon-trustedfirmware-a-sandbox/263459/"
Paul Sokolovsky6338f102024-03-01 16:26:15 +070029 RTD_WEBHOOK_SECRET_KEY=${PFALCON_RTD_WEBHOOK_SECRET}
30 RTD_API_TOKEN=${PFALCON_RTD_API_TOKEN}
31else
32 echo "Unknown GERRIT_PROJECT: ${GERRIT_PROJECT}"
33 exit 1
34fi
35
Paul Sokolovskyfb2d0402024-03-04 20:20:55 +070036RTD_API="https://readthedocs.org/api/v3/projects/${RTD_PROJECT}"
Paul Sokolovsky6338f102024-03-01 16:26:15 +070037RTD_VER_API="${RTD_API}/versions"
Arthur She8c3dac22024-01-15 20:13:40 -080038
39new_tag=""
Paul Sokolovsky3cc00232024-03-04 20:43:23 +070040new_slug=""
Arthur She8c3dac22024-01-15 20:13:40 -080041refname=${GERRIT_REFNAME##*/}
42lts_branch=${refname}
Paul Sokolovsky07bd0952024-03-01 16:14:14 +070043if echo ${GERRIT_REFNAME} | grep -q "refs/tags/"; then
44 new_tag=${GERRIT_REFNAME#refs/tags/}
Paul Sokolovsky3cc00232024-03-04 20:43:23 +070045 # Convert tag to ReadTheDocs version slug
46 new_slug=$(echo ${new_tag} | tr '[A-Z]/' '[a-z]-')
Paul Sokolovsky07bd0952024-03-01 16:14:14 +070047 lts_branch=${refname%.*}
48fi
Arthur She8c3dac22024-01-15 20:13:40 -080049
Paul Sokolovsky98b66892024-11-28 18:47:41 +070050function rtd_rest_api() {
51 uri="$1"
52 jqfilt="$2"
53 resp=$(curl -s -H "Authorization: Token ${RTD_API_TOKEN}" "$uri")
54 echo $resp 1>&2
55 echo $resp | jq -r "$jqfilt"
56}
57
Arthur She8c3dac22024-01-15 20:13:40 -080058function activate_version() {
59 version=$1
Arthur Shec4b4b5e2024-02-09 21:28:27 -080060 max_retry_time=20
Arthur She8c3dac22024-01-15 20:13:40 -080061 retry=0
62
Arthur She0f2a83e2025-03-20 09:28:31 +080063 # Check whether we need to activate a tag or a branch. If it's a tag, create a branch variable
64 echo ${version} | grep -q "lts-v[0-9].*\.[0-9].*\.[0-9].*" && branch=${version%.*}
65
Arthur She9eb302e2024-04-09 21:50:20 -070066 ver_slug=$(curl -s -H "Authorization: Token ${RTD_API_TOKEN}" ${RTD_VER_API}/${version}/ | \
67 jq -r '.slug')
Arthur She8c3dac22024-01-15 20:13:40 -080068
Arthur She9eb302e2024-04-09 21:50:20 -070069 while [ "${ver_slug}" != "${version}" ];
Arthur She8c3dac22024-01-15 20:13:40 -080070 do
Arthur Shec4b4b5e2024-02-09 21:28:27 -080071 [ ${retry} -gt ${max_retry_time} ] && break
72 sleep 30
Arthur She8c3dac22024-01-15 20:13:40 -080073 retry=$((retry+1))
Arthur She9eb302e2024-04-09 21:50:20 -070074 ver_slug=$(curl -s -H "Authorization: Token ${RTD_API_TOKEN}" ${RTD_VER_API}/${version}/ | \
75 jq -r '.slug')
Arthur She8c3dac22024-01-15 20:13:40 -080076 done
Arthur Shec4b4b5e2024-02-09 21:28:27 -080077
Arthur She0f2a83e2025-03-20 09:28:31 +080078 # activate and hide the branch
79 if [ -n "${branch}" ]; then
80 curl -s -X PATCH -H "Content-Type: application/json" -H "Authorization: Token ${RTD_API_TOKEN}" \
81 -d "{\"active\": true, \"hidden\": true}" ${RTD_VER_API}/${branch}/
82 fi
83
Arthur Shec4b4b5e2024-02-09 21:28:27 -080084 if [ ${retry} -le ${max_retry_time} ]; then
85 echo "Active new version: ${version}"
86 curl -s -X PATCH -H "Content-Type: application/json" -H "Authorization: Token ${RTD_API_TOKEN}" \
87 -d "{\"active\": true, \"hidden\": false}" ${RTD_VER_API}/${version}/
88 else
89 echo "RTD can not find the version: ${version}"
90 exit 1
91 fi
Arthur She8c3dac22024-01-15 20:13:40 -080092}
93
Paul Sokolovskyf1f68932024-03-01 16:37:41 +070094function wait_for_build() {
95 version=$1
Paul Sokolovsky2cac9b82024-03-18 15:17:08 +070096 retry=0
Paul Sokolovskyf1f68932024-03-01 16:37:41 +070097 while true; do
98 status=$(curl -s -H "Authorization: Token ${RTD_API_TOKEN}" "${RTD_API}/builds/" | \
99 jq -r ".results | map(select(.version==\"$version\")) | .[0].state.code")
100 echo $status
101 if [ "$status" == "finished" ]; then
102 break
103 fi
Paul Sokolovsky2cac9b82024-03-18 15:17:08 +0700104
105 retry=$((retry + 1))
106 if [ $retry -gt 40 ]; then
107 echo "Could not confirm that ReadTheDoc slug ${version} was built in the alloted time."
108 break
109 fi
110
Paul Sokolovskyae61e3e2024-03-18 19:45:10 +0700111 sleep 30
Paul Sokolovskyf1f68932024-03-01 16:37:41 +0700112 done
113}
114
Arthur She61a4ef92025-01-29 07:06:37 -0800115echo "Notifying ReadTheDocs of changes"
Arthur She0f2a83e2025-03-20 09:28:31 +0800116curl -s -X POST -H "Authorization: Token ${RTD_API_TOKEN}" ${RTD_VER_API}/${lts_branch}/builds/
Arthur She8c3dac22024-01-15 20:13:40 -0800117
118# Triggered by a new tag
119if [ -n "${new_tag}" ]; then
Paul Sokolovsky3cc00232024-03-04 20:43:23 +0700120 echo -e "\nNew release tag: ${new_tag}, slug: ${new_slug}"
Arthur She61a4ef92025-01-29 07:06:37 -0800121 # Hide the current active and visible version
Paul Sokolovsky98b66892024-11-28 18:47:41 +0700122 old_tags=$(rtd_rest_api "${RTD_VER_API}/?slug=${lts_branch}&type=tag&active=true" '.results | map(select(.hidden == false) | .slug) | .[]')
Arthur She8c3dac22024-01-15 20:13:40 -0800123 for t in ${old_tags};
124 do
Arthur She61a4ef92025-01-29 07:06:37 -0800125 echo "Hide old version: ${t}"
Arthur She8c3dac22024-01-15 20:13:40 -0800126 curl -s -X PATCH -H "Content-Type: application/json" -H "Authorization: Token ${RTD_API_TOKEN}" \
Paul Sokolovsky92151ad2024-02-26 12:38:32 +0700127 -d "{\"hidden\": true}" ${RTD_VER_API}/${t}/
Arthur She8c3dac22024-01-15 20:13:40 -0800128 done
129 # Active the new version
Paul Sokolovsky3cc00232024-03-04 20:43:23 +0700130 echo "Active new version: ${new_slug}"
131 activate_version ${new_slug}
Paul Sokolovskyaf1e5402024-03-17 18:08:43 +0700132
133 wait_for_build ${new_slug}
134 echo "Docs for the new release are available at: https://${RTD_PROJECT}.readthedocs.io/en/${new_slug}/"
Arthur She8c3dac22024-01-15 20:13:40 -0800135fi
136