blob: 08e2e3c8b5b96c7d364f6d43d875da21081c1413 [file] [log] [blame]
Milosz Wasilewski10438582020-12-03 11:36:21 +00001#!/bin/bash
2
Leonardo Sandoval9f159802021-01-20 16:47:25 -06003set -xe
Milosz Wasilewski10438582020-12-03 11:36:21 +00004
Leonardo Sandoval5a335662021-03-26 19:57:40 -06005# Wait for the LAVA job to finished
6# By default, timeout at 5400 secs (1.5 hours) and monitor every 60 seconds
7wait_lava_job() {
Paul Sokolovsky99eaff62023-01-25 19:41:23 +07008 set +x
Leonardo Sandoval5a335662021-03-26 19:57:40 -06009 local id=$1
10 local timeout="${2:-5400}"
11 local interval="${3:-60}"
12
13 (( t = timeout ))
14
15 while ((t > 0)); do
16 sleep $interval
Paul Sokolovsky99eaff62023-01-25 19:41:23 +070017 resilient_cmd lavacli jobs show $id | tee "${WORKSPACE}/lava-progress.show" | grep 'state *:'
18 set +x
Leonardo Sandoval5a335662021-03-26 19:57:40 -060019 if grep 'state.*: Finished' "${WORKSPACE}/lava-progress.show"; then
Paul Sokolovsky99eaff62023-01-25 19:41:23 +070020 set -x
21 cat "${WORKSPACE}/lava-progress.show"
Paul Sokolovskya153b602022-10-12 20:50:05 +030022 # finished
23 return 0
Leonardo Sandoval5a335662021-03-26 19:57:40 -060024 fi
25 ((t -= interval))
26 done
Paul Sokolovsky99eaff62023-01-25 19:41:23 +070027 set -x
28 cat "${WORKSPACE}/lava-progress.show"
29 echo "Timeout waiting for job to finish"
Paul Sokolovskya153b602022-10-12 20:50:05 +030030 # timeout
31 return 1
Leonardo Sandoval5a335662021-03-26 19:57:40 -060032}
33
Leonardo Sandovaleb94e912021-01-29 12:23:59 -060034# Run the given command passed through parameters, if fails, try
35# at most more N-times with a pause of M-seconds until success.
36resilient_cmd() {
Paul Sokolovsky99eaff62023-01-25 19:41:23 +070037 set +x
Leonardo Sandovaleb94e912021-01-29 12:23:59 -060038 local cmd="$*"
39 local max_wait=10
40 local sleep_body=2
41 local iter=0
42
Leonardo Sandovaleb94e912021-01-29 12:23:59 -060043 while true; do
44 if ${cmd}; then
Leonardo Sandovaleb94e912021-01-29 12:23:59 -060045 break
46 fi
47
48 sleep ${sleep_body}
49
50 iter=$(( iter + 1 ))
51 if [ ${iter} -ge ${max_wait} ]; then
Paul Sokolovsky99eaff62023-01-25 19:41:23 +070052 set -x
Leonardo Sandovaleb94e912021-01-29 12:23:59 -060053 return 1
54 fi
55 done
Paul Sokolovsky99eaff62023-01-25 19:41:23 +070056 set -x
Leonardo Sandovaleb94e912021-01-29 12:23:59 -060057 return 0
58}
59
Milosz Wasilewski10438582020-12-03 11:36:21 +000060ls -l ${WORKSPACE}
61
Leonardo Sandoval9f159802021-01-20 16:47:25 -060062if [ -n "${QA_SERVER_VERSION}" ]; then
63 if [ -n "${GERRIT_CHANGE_NUMBER}" ] && [ -n "${GERRIT_PATCHSET_NUMBER}" ]; then
Milosz Wasilewski10438582020-12-03 11:36:21 +000064 curl \
Paul Sokolovskya3ac1262022-07-08 16:03:48 +030065 --fail \
Milosz Wasilewski10438582020-12-03 11:36:21 +000066 --retry 4 \
67 -X POST \
68 --header "Auth-Token: ${QA_REPORTS_TOKEN}" \
Milosz Wasilewski10438582020-12-03 11:36:21 +000069 ${QA_SERVER}/api/createbuild/${QA_SERVER_TEAM}/${QA_SERVER_PROJECT}/${QA_SERVER_VERSION}
70 fi
71
72 TESTJOB_ID=$(curl \
Paul Sokolovskya3ac1262022-07-08 16:03:48 +030073 --fail \
Milosz Wasilewski10438582020-12-03 11:36:21 +000074 --retry 4 \
75 -X POST \
76 --header "Auth-Token: ${QA_REPORTS_TOKEN}" \
77 --form backend=${LAVA_SERVER} \
Chris Kayf6ff4672022-11-03 13:09:44 +000078 --form definition=@artefacts-lava/job.yaml \
Milosz Wasilewski10438582020-12-03 11:36:21 +000079 ${QA_SERVER}/api/submitjob/${QA_SERVER_TEAM}/${QA_SERVER_PROJECT}/${QA_SERVER_VERSION}/${DEVICE_TYPE})
Leonardo Sandoval9f159802021-01-20 16:47:25 -060080
Arthur She2770cee2022-09-14 15:12:18 -070081 # SQUAD will send 400, curl error code 22, on bad test definition
82 if [ "$?" = "22" ]; then
83 echo "Bad test definition!!"
84 exit 1
85 fi
86
Leonardo Sandoval9f159802021-01-20 16:47:25 -060087 if [ -n "${TESTJOB_ID}" ]; then
Milosz Wasilewski10438582020-12-03 11:36:21 +000088 echo "TEST JOB URL: ${QA_SERVER}/testjob/${TESTJOB_ID} TEST JOB ID: ${TESTJOB_ID}"
Leonardo Sandoval9f159802021-01-20 16:47:25 -060089
Leonardo Sandoval9f159802021-01-20 16:47:25 -060090
Leonardo Sandoval73d301a2021-02-12 13:42:55 -060091 # The below loop with a sleep is intentional: LAVA could be under heavy load so previous job creation can
92 # take 'some' time to get the right numeric LAVA JOB ID
93 renumber='^[0-9]+$'
94 LAVAJOB_ID="null"
95 iter=0
Chris Kayf1b3da92022-09-08 13:15:16 +010096 max_tries=120 # run retries for an hour
Leonardo Sandoval73d301a2021-02-12 13:42:55 -060097 while ! [[ $LAVAJOB_ID =~ $renumber ]]; do
98 if [ $iter -eq $max_tries ] ; then
99 LAVAJOB_ID=''
100 break
101 fi
Leonardo Sandoval8267f432021-05-07 10:02:00 -0500102 sleep 30
Paul Sokolovskya3ac1262022-07-08 16:03:48 +0300103 LAVAJOB_ID=$(curl --fail --retry 4 ${QA_SERVER}/api/testjobs/${TESTJOB_ID}/?fields=job_id)
Leonardo Sandoval73d301a2021-02-12 13:42:55 -0600104
105 # Get the job_id value (whatever it is)
106 LAVAJOB_ID=$(echo ${LAVAJOB_ID} | jq '.job_id')
107 LAVAJOB_ID="${LAVAJOB_ID//\"/}"
108
109 iter=$(( iter + 1 ))
110 done
Leonardo Sandoval9f159802021-01-20 16:47:25 -0600111
112 # check that rest query at least get non-empty value
113 if [ -n "${LAVAJOB_ID}" ]; then
114
Leonardo Sandoval73d301a2021-02-12 13:42:55 -0600115 echo "LAVA URL: https://${LAVA_SERVER}/scheduler/job/${LAVAJOB_ID} LAVA JOB ID: ${LAVAJOB_ID}"
Leonardo Sandoval9f159802021-01-20 16:47:25 -0600116
Leonardo Sandoval73d301a2021-02-12 13:42:55 -0600117 resilient_cmd lavacli identities add --username ${LAVA_USER} --token ${LAVA_TOKEN} --uri "https://${LAVA_SERVER}/RPC2" default
Leonardo Sandovala8078d62021-02-11 16:29:25 -0600118
Leonardo Sandoval6ed62092021-03-09 09:32:05 -0600119 # if timeout on waiting for LAVA to complete, create an 'artificial' lava.log indicating
120 # job ID and timeout seconds
Paul Sokolovskyebaf7482022-10-13 02:05:38 +0300121 if ! wait_lava_job ${LAVAJOB_ID}; then
Paul Sokolovskya153b602022-10-12 20:50:05 +0300122 echo "Stopped monitoring LAVA JOB ${LAVAJOB_ID}, likely stuck or timeout too short?" | tee "${WORKSPACE}/lava.log"
Leonardo Sandovale9450132021-04-19 13:51:11 -0500123 exit 1
Leonardo Sandoval9f159802021-01-20 16:47:25 -0600124 else
Arthur She5fc74272021-03-26 21:24:34 -0700125 # Retrieve the test job plain log which is a yaml format file from LAVA
126 resilient_cmd lavacli jobs logs --raw ${LAVAJOB_ID} > "${WORKSPACE}/lava-raw.log"
127
Leonardo Sandoval6ed62092021-03-09 09:32:05 -0600128 # Fetch and store LAVA job result (1 failure, 0 success)
Arthur She1671e482022-06-06 22:19:38 -0700129 resilient_cmd lavacli results ${LAVAJOB_ID} | tee "${WORKSPACE}/lava.results"
130 if grep -q '\[fail\]' "${WORKSPACE}/lava.results"; then
Leonardo Sandovale9450132021-04-19 13:51:11 -0500131 exit 1
Arthur She1671e482022-06-06 22:19:38 -0700132 else
133 exit 0
Leonardo Sandoval6ed62092021-03-09 09:32:05 -0600134 fi
Leonardo Sandoval9f159802021-01-20 16:47:25 -0600135 fi
136 else
137 echo "LAVA Job ID could not be obtained"
Leonardo Sandovale9450132021-04-19 13:51:11 -0500138 exit 1
Leonardo Sandoval9f159802021-01-20 16:47:25 -0600139 fi
Milosz Wasilewski10438582020-12-03 11:36:21 +0000140 fi
141fi