blob: 03f2a7ffcc6a9d6f98357d69e6810bffdcff884a [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 Sandovaleb94e912021-01-29 12:23:59 -06005# Run the given command passed through parameters, if fails, try
6# at most more N-times with a pause of M-seconds until success.
7resilient_cmd() {
8 local cmd="$*"
9 local max_wait=10
10 local sleep_body=2
11 local iter=0
12
13 echo "Waiting for $cmd to complete"
14 while true; do
15 if ${cmd}; then
16 echo "$cmd job finished"
17 break
18 fi
19
20 sleep ${sleep_body}
21
22 iter=$(( iter + 1 ))
23 if [ ${iter} -ge ${max_wait} ]; then
24 return 1
25 fi
26 done
27 return 0
28}
29
Milosz Wasilewski10438582020-12-03 11:36:21 +000030ls -l ${WORKSPACE}
31
Leonardo Sandoval9f159802021-01-20 16:47:25 -060032if [ -n "${QA_SERVER_VERSION}" ]; then
33 if [ -n "${GERRIT_CHANGE_NUMBER}" ] && [ -n "${GERRIT_PATCHSET_NUMBER}" ]; then
Milosz Wasilewski10438582020-12-03 11:36:21 +000034 curl \
35 --retry 4 \
36 -X POST \
37 --header "Auth-Token: ${QA_REPORTS_TOKEN}" \
38 -d patch_source=${GERRIT_HOST} \
39 -d patch_id=${GERRIT_CHANGE_NUMBER},${GERRIT_PATCHSET_NUMBER} \
40 ${QA_SERVER}/api/createbuild/${QA_SERVER_TEAM}/${QA_SERVER_PROJECT}/${QA_SERVER_VERSION}
41 fi
42
43 TESTJOB_ID=$(curl \
44 --retry 4 \
45 -X POST \
46 --header "Auth-Token: ${QA_REPORTS_TOKEN}" \
47 --form backend=${LAVA_SERVER} \
48 --form definition=@artefacts/debug/job.yaml \
49 ${QA_SERVER}/api/submitjob/${QA_SERVER_TEAM}/${QA_SERVER_PROJECT}/${QA_SERVER_VERSION}/${DEVICE_TYPE})
Leonardo Sandoval9f159802021-01-20 16:47:25 -060050
51 if [ -n "${TESTJOB_ID}" ]; then
Milosz Wasilewski10438582020-12-03 11:36:21 +000052 echo "TEST JOB URL: ${QA_SERVER}/testjob/${TESTJOB_ID} TEST JOB ID: ${TESTJOB_ID}"
Leonardo Sandoval9f159802021-01-20 16:47:25 -060053
Leonardo Sandoval9f159802021-01-20 16:47:25 -060054
Leonardo Sandoval73d301a2021-02-12 13:42:55 -060055 # The below loop with a sleep is intentional: LAVA could be under heavy load so previous job creation can
56 # take 'some' time to get the right numeric LAVA JOB ID
57 renumber='^[0-9]+$'
58 LAVAJOB_ID="null"
59 iter=0
60 max_tries=10
61 while ! [[ $LAVAJOB_ID =~ $renumber ]]; do
62 if [ $iter -eq $max_tries ] ; then
63 LAVAJOB_ID=''
64 break
65 fi
66 sleep 2
67 LAVAJOB_ID=$(curl --retry 4 ${QA_SERVER}/api/testjobs/${TESTJOB_ID}/?fields=job_id)
68
69 # Get the job_id value (whatever it is)
70 LAVAJOB_ID=$(echo ${LAVAJOB_ID} | jq '.job_id')
71 LAVAJOB_ID="${LAVAJOB_ID//\"/}"
72
73 iter=$(( iter + 1 ))
74 done
Leonardo Sandoval9f159802021-01-20 16:47:25 -060075
76 # check that rest query at least get non-empty value
77 if [ -n "${LAVAJOB_ID}" ]; then
78
Leonardo Sandoval73d301a2021-02-12 13:42:55 -060079 echo "LAVA URL: https://${LAVA_SERVER}/scheduler/job/${LAVAJOB_ID} LAVA JOB ID: ${LAVAJOB_ID}"
Leonardo Sandoval9f159802021-01-20 16:47:25 -060080
Leonardo Sandoval73d301a2021-02-12 13:42:55 -060081 resilient_cmd lavacli identities add --username ${LAVA_USER} --token ${LAVA_TOKEN} --uri "https://${LAVA_SERVER}/RPC2" default
Leonardo Sandovala8078d62021-02-11 16:29:25 -060082
Leonardo Sandoval6ed62092021-03-09 09:32:05 -060083 # timeout at 3600 secs (1 hour)
84 timeout_seconds=3600
85 wait_cmd="timeout $timeout_seconds lavacli jobs wait ${LAVAJOB_ID}"
86
87 # if timeout on waiting for LAVA to complete, create an 'artificial' lava.log indicating
88 # job ID and timeout seconds
89 if ! $wait_cmd ; then
90 echo "Stopped monitoring LAVA JOB ${LAVAJOB_ID} after ${timeout_seconds} seconds, likely stuck or timeout too short?" > "${WORKSPACE}/lava.log"
Leonardo Sandoval73d301a2021-02-12 13:42:55 -060091 echo "LAVA JOB RESULT: 1"
Leonardo Sandoval9f159802021-01-20 16:47:25 -060092 else
Leonardo Sandoval6ed62092021-03-09 09:32:05 -060093 resilient_cmd lavacli jobs logs ${LAVAJOB_ID} > "${WORKSPACE}/lava.log"
94
95 # Fetch and store LAVA job result (1 failure, 0 success)
Leonardo Sandoval5bb3ad62021-03-09 15:59:19 -060096 resilient_cmd lavacli jobs show ${LAVAJOB_ID} | tee "${WORKSPACE}/lava.show"
97 if grep 'state.*: Finished' "${WORKSPACE}/lava.show"; then
98 if grep 'Health.*: Complete' "${WORKSPACE}/lava.show"; then
99 echo "LAVA JOB RESULT: 0"
100 else
101 echo "LAVA JOB RESULT: 1"
102 fi
Leonardo Sandoval6ed62092021-03-09 09:32:05 -0600103 else
Leonardo Sandoval5bb3ad62021-03-09 15:59:19 -0600104 echo "LAVA JOB RESULT: 1"
Leonardo Sandoval6ed62092021-03-09 09:32:05 -0600105 fi
Leonardo Sandoval9f159802021-01-20 16:47:25 -0600106 fi
107 else
108 echo "LAVA Job ID could not be obtained"
109 fi
Milosz Wasilewski10438582020-12-03 11:36:21 +0000110 fi
111fi