Added pipeline watcher script
Signed-off-by: James Ketrenos <james.p.ketrenos@intel.com>
This commit is contained in:
parent
dbbf9c0c16
commit
4ed8e2fb81
146
scripts/watch.sh
Executable file
146
scripts/watch.sh
Executable file
@ -0,0 +1,146 @@
|
||||
#!/bin/bash
|
||||
|
||||
PIPELINE=$1
|
||||
[[ "${PIPELINE}" == "" ]] && {
|
||||
>&2 echo "usage: watch PIPELINE"
|
||||
exit -1
|
||||
}
|
||||
|
||||
# Bring in the variables from SOLUTION file, supporting
|
||||
# nested substitution
|
||||
. SOLUTION
|
||||
|
||||
VARS=($(sed -nE "s,(^[^#][^=]*).*$,\1,pg" SOLUTION))
|
||||
for var in ${VARS[@]}; do
|
||||
export ${var}
|
||||
done
|
||||
|
||||
PROJECT="vtt/sws/osgc/solutions/$(basename $(pwd))"
|
||||
URI_PROJECT=$(echo ${PROJECT} | sed -E 's,/,%2F,g')
|
||||
|
||||
eval $(grep ^SYS_OSGC_TOKEN SECRETS)
|
||||
|
||||
[[ "$SYS_OSGC_TOKEN" == "" ]] && {
|
||||
>&2 echo "SECRETS needs to contain a GitLab token for SYS_OSGC_TOKEN."
|
||||
exit -1
|
||||
}
|
||||
|
||||
GITLAB="https://gitlab.devtools.intel.com"
|
||||
|
||||
echo "Looking for pipeline jobs for ${PIPELINE}"
|
||||
|
||||
function get_jobs {
|
||||
ECHO=$1
|
||||
# Split the JSON results into line-by-line breakouts for
|
||||
# easy sed matching
|
||||
sed -E 's#([[{},]|])#\n\1\n#g' | grep '^[^,]' | {
|
||||
SCOPE=0
|
||||
JOB=""
|
||||
STATUS=""
|
||||
while read line; do
|
||||
case ${SCOPE} in
|
||||
2)
|
||||
echo $line | grep -qE '^([{[])' && {
|
||||
SCOPE=$((SCOPE+1))
|
||||
(( ECHO )) && echo "Scope: ${SCOPE}"
|
||||
continue
|
||||
}
|
||||
echo $line | grep -qE '^([}]|])' && {
|
||||
SCOPE=$((SCOPE-1))
|
||||
(( ECHO )) && echo "Scope: ${SCOPE}"
|
||||
continue
|
||||
}
|
||||
|
||||
[[ "${JOB}" == "" ]] &&
|
||||
JOB=$(echo ${line} |
|
||||
sed -nE 's,^"id"\s*:\s*([0-9]+).*$,\1,p')
|
||||
[[ "${STATUS}" == "" ]] &&
|
||||
STATUS=$(echo ${line} |
|
||||
sed -nE 's,^.*"status"\s*:\s*"([^"]+).*$,\1,p')
|
||||
[[ "${JOB}" != "" ]] && [[ "${STATUS}" != "" ]] && {
|
||||
echo "${JOB}:${STATUS} "
|
||||
JOB=""
|
||||
STATUS=""
|
||||
}
|
||||
;;
|
||||
*)
|
||||
echo $line | grep -qE '^([{[])' && {
|
||||
SCOPE=$((SCOPE+1))
|
||||
(( ECHO )) && echo "Scope: ${SCOPE}"
|
||||
continue
|
||||
}
|
||||
echo $line | grep -qE '^([}]|])' && {
|
||||
(( SCOPE == 0 )) && {
|
||||
return 0
|
||||
}
|
||||
SCOPE=$((SCOPE-1))
|
||||
(( ECHO )) && echo "Scope: ${SCOPE}"
|
||||
continue
|
||||
}
|
||||
esac
|
||||
done
|
||||
}
|
||||
}
|
||||
|
||||
function update_log {
|
||||
ID=$1
|
||||
[[ ! -d "logs" ]] && mkdir "logs"
|
||||
|
||||
curl --noproxy '*' -s -X GET \
|
||||
--header "PRIVATE-TOKEN: ${SYS_OSGC_TOKEN}" \
|
||||
"${GITLAB}/api/v4/projects/${URI_PROJECT}/jobs/${ID}/trace" > "logs/${ID}-latest"
|
||||
|
||||
LINES=1
|
||||
[[ -e "logs/${ID}" ]] && {
|
||||
LINES=$(wc -l "logs/${ID}")
|
||||
LINES=${LINES%% *}
|
||||
}
|
||||
|
||||
tail -n +${LINES} "logs/${ID}-latest"
|
||||
mv "logs/${ID}-latest" "logs/${ID}"
|
||||
}
|
||||
|
||||
while true; do
|
||||
RESULTS=$(curl --noproxy '*' -s -X GET \
|
||||
--header "PRIVATE-TOKEN: ${SYS_OSGC_TOKEN}" \
|
||||
--header "Content-Type: application/json" \
|
||||
"${GITLAB}/api/v4/projects/${URI_PROJECT}/pipelines/${PIPELINE}/jobs")
|
||||
|
||||
JOBS=($(echo "${RESULTS}" | get_jobs))
|
||||
echo "JOBS: ${JOBS[@]}"
|
||||
|
||||
MORE=0
|
||||
FAIL=0
|
||||
for JOB in ${JOBS[@]}; do
|
||||
ID=${JOB%%:*}
|
||||
STATUS=${JOB##*:}
|
||||
case ${STATUS,,} in
|
||||
pending)
|
||||
MORE=$((MORE+1))
|
||||
;;
|
||||
created)
|
||||
MORE=$((MORE+1))
|
||||
;;
|
||||
running)
|
||||
update_log ${ID}
|
||||
MORE=$((MORE+1))
|
||||
;;
|
||||
success)
|
||||
update_log ${ID}
|
||||
;;
|
||||
cancelled)
|
||||
FAIL=1
|
||||
;;
|
||||
failed)
|
||||
FAIL=1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
(( MORE == 0 )) && {
|
||||
echo "No more jobs. Exiting."
|
||||
exit ${FAIL}
|
||||
}
|
||||
|
||||
echo "Sleeping 5 seconds for ${MORE} jobs."
|
||||
sleep 5
|
||||
done
|
Loading…
x
Reference in New Issue
Block a user