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