Arthur She | 8c3dac2 | 2024-01-15 20:13:40 -0800 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | set -ex |
| 3 | |
| 4 | echo "########################################################################" |
| 5 | echo " Gerrit Environment" |
| 6 | env |grep '^GERRIT' |
| 7 | echo "########################################################################" |
| 8 | |
Paul Sokolovsky | 6338f10 | 2024-03-01 16:26:15 +0700 | [diff] [blame] | 9 | if [ "${GERRIT_PROJECT}" == "TF-A/trusted-firmware-a" ]; then |
| 10 | # For real production project, non-sandbox run goes to production RTD project, |
| 11 | # while for sandbox run to a separate RTD project. |
| 12 | if [ "${SANDBOX_RUN}" == "false" ]; then |
Paul Sokolovsky | fb2d040 | 2024-03-04 20:20:55 +0700 | [diff] [blame] | 13 | RTD_PROJECT="trustedfirmware-a" |
Paul Sokolovsky | 6338f10 | 2024-03-01 16:26:15 +0700 | [diff] [blame] | 14 | RTD_WEBHOOK_URL="https://readthedocs.org/api/v2/webhook/trustedfirmware-a/87181/" |
Paul Sokolovsky | 6338f10 | 2024-03-01 16:26:15 +0700 | [diff] [blame] | 15 | RTD_WEBHOOK_SECRET_KEY=${RTD_WEBHOOK_SECRET} |
| 16 | RTD_API_TOKEN=${RTD_API_TOKEN} |
| 17 | else |
Paul Sokolovsky | fb2d040 | 2024-03-04 20:20:55 +0700 | [diff] [blame] | 18 | RTD_PROJECT="trustedfirmware-a-sandbox" |
Paul Sokolovsky | 6338f10 | 2024-03-01 16:26:15 +0700 | [diff] [blame] | 19 | RTD_WEBHOOK_URL="https://readthedocs.org/api/v2/webhook/trustedfirmware-a-sandbox/263958/" |
Paul Sokolovsky | 6338f10 | 2024-03-01 16:26:15 +0700 | [diff] [blame] | 20 | RTD_WEBHOOK_SECRET_KEY=${TFA_SANDBOX_RTD_WEBHOOK_SECRET} |
| 21 | RTD_API_TOKEN=${PFALCON_RTD_API_TOKEN} |
| 22 | fi |
| 23 | elif [ "${GERRIT_PROJECT}" == "sandbox/pfalcon/trusted-firmware-a" ]; then |
| 24 | # For test project, both "production" and "sandbox" go to the same elsewhere project. |
Paul Sokolovsky | fb2d040 | 2024-03-04 20:20:55 +0700 | [diff] [blame] | 25 | RTD_PROJECT="pfalcon-trustedfirmware-a-sandbox" |
Paul Sokolovsky | 6338f10 | 2024-03-01 16:26:15 +0700 | [diff] [blame] | 26 | RTD_WEBHOOK_URL="https://readthedocs.org/api/v2/webhook/pfalcon-trustedfirmware-a-sandbox/263459/" |
Paul Sokolovsky | 6338f10 | 2024-03-01 16:26:15 +0700 | [diff] [blame] | 27 | RTD_WEBHOOK_SECRET_KEY=${PFALCON_RTD_WEBHOOK_SECRET} |
| 28 | RTD_API_TOKEN=${PFALCON_RTD_API_TOKEN} |
| 29 | else |
| 30 | echo "Unknown GERRIT_PROJECT: ${GERRIT_PROJECT}" |
| 31 | exit 1 |
| 32 | fi |
| 33 | |
Paul Sokolovsky | fb2d040 | 2024-03-04 20:20:55 +0700 | [diff] [blame] | 34 | RTD_API="https://readthedocs.org/api/v3/projects/${RTD_PROJECT}" |
Paul Sokolovsky | 6338f10 | 2024-03-01 16:26:15 +0700 | [diff] [blame] | 35 | RTD_VER_API="${RTD_API}/versions" |
Arthur She | 8c3dac2 | 2024-01-15 20:13:40 -0800 | [diff] [blame] | 36 | |
| 37 | new_tag="" |
Paul Sokolovsky | 3cc0023 | 2024-03-04 20:43:23 +0700 | [diff] [blame] | 38 | new_slug="" |
Arthur She | 8c3dac2 | 2024-01-15 20:13:40 -0800 | [diff] [blame] | 39 | refname=${GERRIT_REFNAME##*/} |
| 40 | lts_branch=${refname} |
Paul Sokolovsky | 07bd095 | 2024-03-01 16:14:14 +0700 | [diff] [blame] | 41 | if echo ${GERRIT_REFNAME} | grep -q "refs/tags/"; then |
| 42 | new_tag=${GERRIT_REFNAME#refs/tags/} |
Paul Sokolovsky | 3cc0023 | 2024-03-04 20:43:23 +0700 | [diff] [blame] | 43 | # Convert tag to ReadTheDocs version slug |
| 44 | new_slug=$(echo ${new_tag} | tr '[A-Z]/' '[a-z]-') |
Paul Sokolovsky | 07bd095 | 2024-03-01 16:14:14 +0700 | [diff] [blame] | 45 | lts_branch=${refname%.*} |
| 46 | fi |
Arthur She | 8c3dac2 | 2024-01-15 20:13:40 -0800 | [diff] [blame] | 47 | |
| 48 | function activate_version() { |
| 49 | version=$1 |
Arthur She | c4b4b5e | 2024-02-09 21:28:27 -0800 | [diff] [blame] | 50 | max_retry_time=20 |
Arthur She | 8c3dac2 | 2024-01-15 20:13:40 -0800 | [diff] [blame] | 51 | retry=0 |
| 52 | |
Arthur She | c4b4b5e | 2024-02-09 21:28:27 -0800 | [diff] [blame] | 53 | ver_status=$(curl -s -H "Authorization: Token ${RTD_API_TOKEN}" ${RTD_VER_API}/${version}/ | \ |
| 54 | jq -r '.detail') |
Arthur She | 8c3dac2 | 2024-01-15 20:13:40 -0800 | [diff] [blame] | 55 | |
Arthur She | c4b4b5e | 2024-02-09 21:28:27 -0800 | [diff] [blame] | 56 | while [ "${ver_status}" == "Not found." ]; |
Arthur She | 8c3dac2 | 2024-01-15 20:13:40 -0800 | [diff] [blame] | 57 | do |
Arthur She | c4b4b5e | 2024-02-09 21:28:27 -0800 | [diff] [blame] | 58 | [ ${retry} -gt ${max_retry_time} ] && break |
| 59 | sleep 30 |
Arthur She | 8c3dac2 | 2024-01-15 20:13:40 -0800 | [diff] [blame] | 60 | retry=$((retry+1)) |
Arthur She | c4b4b5e | 2024-02-09 21:28:27 -0800 | [diff] [blame] | 61 | ver_status=$(curl -s -H "Authorization: Token ${RTD_API_TOKEN}" ${RTD_VER_API}/${version}/ | \ |
| 62 | jq -r '.detail') |
Arthur She | 8c3dac2 | 2024-01-15 20:13:40 -0800 | [diff] [blame] | 63 | done |
Arthur She | c4b4b5e | 2024-02-09 21:28:27 -0800 | [diff] [blame] | 64 | |
| 65 | if [ ${retry} -le ${max_retry_time} ]; then |
| 66 | echo "Active new version: ${version}" |
| 67 | curl -s -X PATCH -H "Content-Type: application/json" -H "Authorization: Token ${RTD_API_TOKEN}" \ |
| 68 | -d "{\"active\": true, \"hidden\": false}" ${RTD_VER_API}/${version}/ |
| 69 | else |
| 70 | echo "RTD can not find the version: ${version}" |
| 71 | exit 1 |
| 72 | fi |
Arthur She | 8c3dac2 | 2024-01-15 20:13:40 -0800 | [diff] [blame] | 73 | } |
| 74 | |
Paul Sokolovsky | f1f6893 | 2024-03-01 16:37:41 +0700 | [diff] [blame] | 75 | function wait_for_build() { |
| 76 | version=$1 |
Paul Sokolovsky | f1f6893 | 2024-03-01 16:37:41 +0700 | [diff] [blame] | 77 | while true; do |
| 78 | status=$(curl -s -H "Authorization: Token ${RTD_API_TOKEN}" "${RTD_API}/builds/" | \ |
| 79 | jq -r ".results | map(select(.version==\"$version\")) | .[0].state.code") |
| 80 | echo $status |
| 81 | if [ "$status" == "finished" ]; then |
| 82 | break |
| 83 | fi |
| 84 | sleep 10 |
| 85 | done |
| 86 | } |
| 87 | |
Arthur She | 8c3dac2 | 2024-01-15 20:13:40 -0800 | [diff] [blame] | 88 | echo "Notifying ReadTheDocs of changes on: ${lts_branch}" |
| 89 | build_trigger=$(curl -s -X POST -d "branches=${lts_branch}" -d "token=${RTD_WEBHOOK_SECRET_KEY}" ${RTD_WEBHOOK_URL} | jq .build_triggered) |
| 90 | if [ "${build_trigger}" = "false" ]; then |
Paul Sokolovsky | 92151ad | 2024-02-26 12:38:32 +0700 | [diff] [blame] | 91 | # The branch might be new and hasn't been known by RTD, or hasn't been activated, or both |
Arthur She | 4c341b2 | 2024-01-30 20:13:43 -0800 | [diff] [blame] | 92 | # we can trigger a build for the master branch to update all branches |
Paul Sokolovsky | 92151ad | 2024-02-26 12:38:32 +0700 | [diff] [blame] | 93 | echo "The branch ${lts_branch} is now! Activate and hide it!" |
Arthur She | 8c3dac2 | 2024-01-15 20:13:40 -0800 | [diff] [blame] | 94 | curl -s -X POST -d "branches=master" -d "token=${RTD_WEBHOOK_SECRET_KEY}" ${RTD_WEBHOOK_URL} |
| 95 | activate_version ${lts_branch} |
Arthur She | 4c341b2 | 2024-01-30 20:13:43 -0800 | [diff] [blame] | 96 | curl -s -X PATCH -H "Content-Type: application/json" -H "Authorization: Token ${RTD_API_TOKEN}" \ |
| 97 | -d "{\"hidden\": true}" ${RTD_VER_API}/${lts_branch}/ |
Arthur She | 8c3dac2 | 2024-01-15 20:13:40 -0800 | [diff] [blame] | 98 | fi |
| 99 | |
| 100 | # Triggered by a new tag |
| 101 | if [ -n "${new_tag}" ]; then |
Paul Sokolovsky | 3cc0023 | 2024-03-04 20:43:23 +0700 | [diff] [blame] | 102 | echo -e "\nNew release tag: ${new_tag}, slug: ${new_slug}" |
Arthur She | 8c3dac2 | 2024-01-15 20:13:40 -0800 | [diff] [blame] | 103 | # Hide the current active and unhidden tags |
| 104 | old_tags=$(curl -s -H "Authorization: Token ${RTD_API_TOKEN}" "${RTD_VER_API}/?slug=${lts_branch}&type=tag&active=true" | \ |
Paul Sokolovsky | a313830 | 2024-02-27 18:51:47 +0700 | [diff] [blame] | 105 | jq -r '.results | map(select(.hidden == false) | .slug) | .[]') |
Arthur She | 8c3dac2 | 2024-01-15 20:13:40 -0800 | [diff] [blame] | 106 | for t in ${old_tags}; |
| 107 | do |
| 108 | echo "Hide old tag: ${t}" |
| 109 | curl -s -X PATCH -H "Content-Type: application/json" -H "Authorization: Token ${RTD_API_TOKEN}" \ |
Paul Sokolovsky | 92151ad | 2024-02-26 12:38:32 +0700 | [diff] [blame] | 110 | -d "{\"hidden\": true}" ${RTD_VER_API}/${t}/ |
Arthur She | 8c3dac2 | 2024-01-15 20:13:40 -0800 | [diff] [blame] | 111 | done |
| 112 | # Active the new version |
Paul Sokolovsky | 3cc0023 | 2024-03-04 20:43:23 +0700 | [diff] [blame] | 113 | echo "Active new version: ${new_slug}" |
| 114 | activate_version ${new_slug} |
Paul Sokolovsky | af1e540 | 2024-03-17 18:08:43 +0700 | [diff] [blame^] | 115 | |
| 116 | wait_for_build ${new_slug} |
| 117 | echo "Docs for the new release are available at: https://${RTD_PROJECT}.readthedocs.io/en/${new_slug}/" |
Arthur She | 8c3dac2 | 2024-01-15 20:13:40 -0800 | [diff] [blame] | 118 | fi |
| 119 | |