@@ -11,13 +11,9 @@ version="$1"
1111input_dir=" $2 "
1212project=" ${OBS_PROJECT:- home: cst8t: gitmun} "
1313package=" ${OBS_PACKAGE:- gitmun} "
14- rpm_repository=" ${OBS_RPM_REPOSITORY:- openSUSE_Tumbleweed} "
15- rpm_arch=" ${OBS_RPM_ARCH:- x86_64} "
1614deb_repository=" ${OBS_DEB_REPOSITORY:- xUbuntu_26.04} "
1715deb_arch=" ${OBS_DEB_ARCH:- x86_64} "
18- appimage_repository=" ${OBS_APPIMAGE_REPOSITORY:- AppImage} "
19- appimage_arch=" ${OBS_APPIMAGE_ARCH:- x86_64} "
20- build_appimage=" ${OBS_BUILD_APPIMAGE:- true} "
16+ obs_poll_seconds=" ${OBS_POLL_SECONDS:- 60} "
2117repo_root=" $( cd " $( dirname " $0 " ) /../.." && pwd) "
2218tmp_dir=" $( mktemp -d) "
2319trap ' rm -rf "$tmp_dir"' EXIT
@@ -27,6 +23,66 @@ source_tarball="${tmp_dir}/${release_root}.tar.xz"
2723render_dir=" ${tmp_dir} /rendered"
2824checkout_dir=" ${tmp_dir} /checkout"
2925
26+ read_obs_build_code () {
27+ local results_file=" $1 "
28+
29+ OBS_PACKAGE_NAME=" $package " python3 - " $results_file " << 'PY '
30+ import os
31+ import sys
32+ import xml.etree.ElementTree as ET
33+
34+ package = os.environ["OBS_PACKAGE_NAME"]
35+ root = ET.parse(sys.argv[1]).getroot()
36+
37+ for result in root.findall("result"):
38+ result_dirty = result.get("dirty") is not None
39+ result_code = result.get("code") or "unknown"
40+ for status in result.findall("status"):
41+ if status.get("package") == package:
42+ print("dirty" if result_dirty else status.get("code", result_code))
43+ raise SystemExit(0)
44+
45+ print("missing")
46+ raise SystemExit(2)
47+ PY
48+ }
49+
50+ wait_for_obs_build () {
51+ local repository=" $1 "
52+ local arch=" $2 "
53+ local results_file=" ${tmp_dir} /obs-results.xml"
54+ local build_code
55+
56+ echo " Waiting for OBS build: ${project} /${package} ${repository} ${arch} "
57+
58+ while true ; do
59+ osc results --xml --no-multibuild -r " $repository " -a " $arch " " $project " " $package " > " $results_file "
60+ if ! build_code=" $( read_obs_build_code " $results_file " ) " ; then
61+ build_code=" ${build_code:- missing} "
62+ fi
63+ echo " OBS build status for ${repository} /${arch} : ${build_code} "
64+
65+ case " $build_code " in
66+ succeeded)
67+ osc results --no-multibuild -r " $repository " -a " $arch " " $project " " $package "
68+ return 0
69+ ;;
70+ failed|broken|unresolvable|missing)
71+ osc results -v --no-multibuild -r " $repository " -a " $arch " " $project " " $package " || true
72+ return 1
73+ ;;
74+ blocked|scheduled|dispatching|building|signing|finished|dirty|unknown)
75+ sleep " $obs_poll_seconds "
76+ ;;
77+ * )
78+ echo " Unexpected OBS build status for ${repository} /${arch} : ${build_code} " >&2
79+ osc results -v --no-multibuild -r " $repository " -a " $arch " " $project " " $package " || true
80+ return 1
81+ ;;
82+ esac
83+ done
84+ }
85+
3086for required_file in vendor.tar.xz node_modules.obscpio node_modules.spec.inc package-lock.json ATTRIBUTIONS.html commit-hash.txt; do
3187 if [ ! -f " ${input_dir} /${required_file} " ]; then
3288 echo " missing required input: ${input_dir} /${required_file} " >&2
@@ -109,12 +165,5 @@ cp "${input_dir}/commit-hash.txt" "$checkout_dir"/
109165 osc commit --skip-local-service-run -m " Prepare OBS sources for ${version} "
110166)
111167
112- osc rebuild " $project " " $package " " $rpm_repository " " $rpm_arch "
113168osc rebuild " $project " " $package " " $deb_repository " " $deb_arch "
114- osc results -w -F -r " $rpm_repository " -a " $rpm_arch " " $project " " $package "
115- osc results -w -F -r " $deb_repository " -a " $deb_arch " " $project " " $package "
116-
117- if [ " $build_appimage " = " true" ]; then
118- osc rebuild " $project " " $package " " $appimage_repository " " $appimage_arch "
119- osc results -w -F -r " $appimage_repository " -a " $appimage_arch " " $project " " $package "
120- fi
169+ wait_for_obs_build " $deb_repository " " $deb_arch "
0 commit comments