Skip to content

Commit

Permalink
upload-to-squad.sh: add retry to help success rate for uploading
Browse files Browse the repository at this point in the history
when the uploading fails.

Signed-off-by: Yongqin Liu <[email protected]>
  • Loading branch information
liuyq committed Dec 12, 2024
1 parent 978d12e commit dbf36ee
Showing 1 changed file with 32 additions and 16 deletions.
48 changes: 32 additions & 16 deletions automated/utils/upload-to-squad.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,30 @@ ATTACHMENT=""
ARTIFACTORIAL_URL=""
CURL_VERBOSE_FLAG=""
FAILURE_RETURN_VALUE=0
RETRY_COUNT=5
RETRY_INTERVAL=30

usage() {
echo "Usage: $0 [-a <attachment>] [-u <artifactorial_url>] [-v] [-r]" 1>&2
echo "Usage: $0 [-a <attachment>] [-u <artifactorial_url>] [-c <retry_count>] [-i <retry_interval>] [-v] [-r]" 1>&2
echo " -a attachment Path to the file to upload" 1>&2
echo " -u squad_url SQUAD_URL where the attachment will be uploaded to" 1>&2
echo " This script will try to fetch the SQUAD_ARCHIVE_SUBMIT_TOKEN" 1>&2
echo " token from (lava_test_dir)/secrets or environments for the upload." 1>&2
echo " -c retry_count How many times to try when the uploading failed" 1>&2
echo " -i retry_interval The interval between the re-tries." 1>&2
echo " -v Pass -v (verbose) flag to curl for debugging." 1>&2
echo " -r Report failure. If the upload fails and this flag is set, the script will exit" 1>&2
echo " with return value 1. If the upload is skipped (no URL or no token found)," 1>&2
echo " this script will still return 0." 1>&2
exit 1
}

while getopts ":a:u:vr" opt; do
while getopts ":a:u:c:i:vr" opt; do
case "${opt}" in
a) ATTACHMENT="${OPTARG}" ;;
u) ARTIFACTORIAL_URL="${OPTARG}" ;;
c) RETRY_COUNT="${OPTARG}" ;;
i) RETRY_INTERVAL="${OPTARG}" ;;
v) CURL_VERBOSE_FLAG="-v" ;;
r) FAILURE_RETURN_VALUE=1 ;;
*) usage ;;
Expand Down Expand Up @@ -50,24 +56,34 @@ if command -v lava-test-reference > /dev/null 2>&1; then
echo "test-attachment skip"
command -v lava-test-case > /dev/null 2>&1 && lava-test-case "test-attachment" --result "skip"
exit 0
else
# return is the squad testrun id
return=$(curl ${CURL_VERBOSE_FLAG} --header "Auth-Token: ${SQUAD_ARCHIVE_SUBMIT_TOKEN}" --form "attachment=@${ATTACHMENT}" "${ARTIFACTORIAL_URL}")
fi

attachmentBasename="$(basename "${ATTACHMENT}")"
if echo "${return}" | grep -E "^[0-9]+$"; then
# ARTIFACTORIAL_URL will be in the format like this:
# https://qa-reports.linaro.org/api/submit/squad_group/squad_project/squad_build/environment
url_squad=$(echo "${ARTIFACTORIAL_URL}"|sed 's|/api/submit/.*||')
url_uploaded="${url_squad}/api/testruns/${return}/attachments/?filename=${attachmentBasename}"
lava-test-reference "test-attachment" --result "pass" --reference "${url_uploaded}"
else
echo "test-attachment fail"
# Re-run the upload for 5 times with the interval of 30 seconds when it fails
i=1
while [ $i -le "${RETRY_COUNT}" ]; do
# return is the squad testrun id
return=$(curl ${CURL_VERBOSE_FLAG} --header "Auth-Token: ${SQUAD_ARCHIVE_SUBMIT_TOKEN}" --form "attachment=@${ATTACHMENT}" "${ARTIFACTORIAL_URL}")

if echo "${return}" | grep -E "^[0-9]+$"; then
# ARTIFACTORIAL_URL will be in the format like this:
# https://qa-reports.linaro.org/api/submit/squad_group/squad_project/squad_build/environment
url_squad=$(echo "${ARTIFACTORIAL_URL}"|sed 's|/api/submit/.*||')
url_uploaded="${url_squad}/api/testruns/${return}/attachments/?filename=${attachmentBasename}"
lava-test-reference "test-attachment" --result "pass" --reference "${url_uploaded}"
break
fi
# still print the output every time for investigation purpose
echo "Expected one SQUAD testrun id returend, but curl returned \"${return}\"."
command -v lava-test-case > /dev/null 2>&1 && lava-test-case "test-attachment" --result "fail"
exit "${FAILURE_RETURN_VALUE}"
fi
if [ $i -eq "${RETRY_COUNT}" ]; then
echo "test-attachment fail"
command -v lava-test-case > /dev/null 2>&1 && lava-test-case "test-attachment" --result "fail"
exit "${FAILURE_RETURN_VALUE}"
else
sleep "${RETRY_INTERVAL}"
fi
i=$((i + 1))
done
else
echo "test-attachment skip"
command -v lava-test-case > /dev/null 2>&1 && lava-test-case "test-attachment" --result "skip"
Expand Down

0 comments on commit dbf36ee

Please sign in to comment.