obs-packaging: fix wait for obs

Reimplement the loop that waits for OBS. Look for the packages
that are still building, not for the repos.

Signed-off-by: Julio Montes <julio.montes@intel.com>
This commit is contained in:
Julio Montes 2020-06-25 10:49:16 -05:00
parent f5b71d3455
commit ae98ea450d

View File

@ -35,41 +35,179 @@ run_in_docker() {
fi
}
# project information
project=""
# repo information
repo=""
repo_state=""
repo_code=""
# package information
package=""
package_code=""
package_details=""
# packages still building
packages_building=0
fail=0
return=0
continue=0
result_handler() {
# reset project information
project=""
# reset repo information
repo=""
repo_state=""
repo_code=""
local IFS=' '
for i in $1; do
case $(echo $i | cut -d= -f1) in
project)
project=$(echo $i | cut -d= -f2 | tr -d '"')
;;
repository)
repo=$(echo $i | cut -d= -f2 | tr -d '"')
;;
code)
repo_code=$(echo $i | cut -d= -f2 | tr -d '"')
;;
state)
repo_state=$(echo $i | cut -d= -f2 | tr -d '"')
;;
esac
done
case "${repo_code}" in
blocked)
continue=1
;;
unresolvable)
fail=1
;;
excluded)
return=1
;;
esac
}
status_handler() {
# reset package information
package=""
package_code=""
package_details=""
local IFS=' '
for i in $1; do
case $(echo $i | cut -d= -f1) in
package)
package=$(echo $i | cut -d= -f2 | tr -d '"')
;;
code)
package_code=$(echo $i | cut -d= -f2 | tr -d '"')
;;
esac
done
case "${package_code}" in
blocked)
continue=1
;;
unresolvable)
fail=1
;;
excluded)
return=1
;;
esac
}
details_handler() {
# reset package details
package_details="$(echo $1 | cut -d\> -f2 | cut -d\< -f1)"
if [ "$package_details" == "failed" ]; then
fail=1
osc pr
return
fi
if [ "$package_details" == "broken" ]; then
fail=1
return
fi
if [ "${package_details}" != "succeeded" ] || [ "${package_code}" != "finished" ]; then
packages_building=$((packages_building+1))
fi
}
check_repo() {
if [ -z "${repo}" ]; then
return
fi
}
dump_info() {
echo "package: $package, code: $package_code, details: $package_details"
echo "repository: $repo, state: $repo_state, code: $repo_code"
echo "For more information go to https://build.opensuse.org/package/live_build_log/${project}/${package}/${repo}/$(uname -m)"
}
# Check all project has finshed the build
wait_finish_building() {
local out
while true; do
sleep 10
sleep 30
out=$(osc api "/build/${project}/_result")
if echo "${out}" | grep '<details>failed</details>'; then
echo "Project ${project} has failed packages"
osc pr
exit 1
fi
if echo "${out}" | grep '<details>broken</details>'; then
echo "Project ${project} has broken packages"
exit 1
fi
if echo "${out}" | grep 'code="blocked"'; then
echo "Project ${project} has blocked packages, waiting"
continue=0
packages_building=0
local IFS=$'\n'
for i in ${out[*]}; do
i="$(echo $i | sed -e 's/^[[:space:]]*//' -e 's/^<//' -e 's/>$//')"
if echo "$i" | egrep -q "^result"; then
result_handler "$i"
elif echo "$i" | egrep -q "^status"; then
status_handler "$i"
elif echo "$i" | egrep -q "^details"; then
details_handler "$i"
fi
if [ $fail -eq 1 ]; then
echo -n "FAILED: "
dump_info
exit 1
elif [ $return -eq 1 ]; then
return
elif [ $packages_building -gt 0 ]; then
break
fi
done
if [ $continue -eq 1 ]; then
continue
fi
if echo "${out}" | grep 'code="unresolvable"'; then
echo "Project ${project} has unresolvable packages"
exit 1
fi
if echo "${out}" | grep 'state="building"'; then
echo "Project ${project} is still building, waiting"
continue
fi
if echo "${out}" | grep 'code="excluded"'; then
echo "Project ${project} has excluded packages left, quit waiting"
break
fi
echo "No jobs with building status were found"
echo "${out}"
break
if [ $packages_building -gt 0 ]; then
echo -n "BULDING: "
dump_info
else
echo "FINISHED: SUCCEEDED!"
break
fi
done
}