From dcabeef0f5ee6c7c210c362692e69c60e87db691 Mon Sep 17 00:00:00 2001 From: Jose Carlos Venegas Munoz Date: Mon, 15 Apr 2019 19:24:05 -0500 Subject: [PATCH] obs: add wait-obs.sh Add script to wait until obs finish the process to build. - check if process failed Useful for CI job. Signed-off-by: Jose Carlos Venegas Munoz --- obs-packaging/wait-obs.sh | 93 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100755 obs-packaging/wait-obs.sh diff --git a/obs-packaging/wait-obs.sh b/obs-packaging/wait-obs.sh new file mode 100755 index 0000000000..7337781ecb --- /dev/null +++ b/obs-packaging/wait-obs.sh @@ -0,0 +1,93 @@ +#!/bin/bash +# Copyright (c) 2019 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# + +set -o errexit +set -o nounset +set -o pipefail +set -o errtrace + +handle_error() { + local exit_code="${?}" + local line_number="${1:-}" + echo "Failed at $line_number: ${BASH_COMMAND}" + exit "${exit_code}" +} +trap 'handle_error $LINENO' ERR + +script_dir=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) + +run_in_docker() { + if [ -n "${USE_DOCKER:-}" ]; then + # shellcheck source=scripts/obs-docker.sh + source "${script_dir}/scripts/obs-docker.sh" + packaging_repo_dir=$(cd "${script_dir}/.." && pwd) + docker_run "${packaging_repo_dir}/obs-packaging/wait-obs.sh" + exit 0 + fi +} + + +# Check all project has finshed the build +wait_finish_building() { + while osc pr -q | grep '(building)'; do sleep 5; done +} + +# obs distro final status is 'published' +# Check all distros are published +is_published() { + columns=$(osc pr -q -c | head -1 | column -t -s\;) + # print to show status + for c in ${columns}; do + if [ "${c}" == '_' ]; then + continue + fi + if ! echo "${c}" | grep 'published'; then + echo "${c}" + return 1 + fi + done + return 0 +} + +# Wait that all repositories are published +wait_published() { + while ! is_published; do + echo "Waitling for all repos are published" + done +} + +check_failed(){ + failed_query=$(osc pr -c -s F) + regex=".*failed.*" + if [[ ${failed_query} =~ ${regex} ]];then + printf "%s" "${failed_query}" | column -t -s\; + return 1 + fi + return 0 +} + +main() { + run_in_docker + OBS_SUBPROJECT="${OBS_SUBPROJECT:-releases:x86_64:alpha}" + project="home:katacontainers:${OBS_SUBPROJECT}" + echo "Checkout: ${project}" + osc co "$project" || true + cd "$project" || exit 1 + + echo "Wait all is build" + wait_finish_building + echo "OK - build finished" + + echo "Check failed" + check_failed + echo "OK - build did not fail" + + echo "Wait for published" + wait_published + echo "OK - published" +} + +main $@