open Goaljobs
-(* Repo dir, etc. *)
-let fedora_dir = Sys.getenv "HOME" // "d/fedora"
-let fedora_repo pkg branch = fedora_dir // pkg // branch
-let fedora_specfile pkg branch =
- sprintf "%s/%s.spec" (fedora_repo pkg branch) pkg
+open Config
(* Get the current version of a package. *)
let fedora_verrel pkg branch =
* resists automation: RHBZ#760924.
*)
+(* XXX koji_build_state verrel: If you do a build and it fails, then
+ * do another build without bumping the release field, 'koji buildinfo'
+ * seems to always return the failed build, at least until the second
+ * build completes. This means the code below fails. Unclear how it
+ * can be fixed, but best to always bump the release to avoid the
+ * problem.
+ *)
+
(* Get build state. *)
let rec koji_build_state verrel =
fst (koji_build_state_task verrel)
else (
let out = shout "timeout 120 koji buildinfo %s 2>&1 ||:" verrel in
if no_such_build out then
- failwith (sprintf "koji_build_state_task: %s: no such build" verrel);
- let state =
- try
- let subs = Pcre.exec ~rex:state out in
- match Pcre.get_substring subs 1 with
- | "BUILDING" -> `Building
- | "COMPLETE" -> `Complete
- | "DELETED" -> `Deleted
- | "FAILED" -> `Failed
- | "CANCELED" -> `Canceled
- | sub ->
- failwith (sprintf "koji_build_state_task: %s: unknown build state '%s'"
- verrel sub)
- with
- Not_found ->
- failwith (sprintf "koji_build_state_task: %s: no build state found"
- verrel) in
- let task =
- try
- let subs = Pcre.exec ~rex:task_id out in
- Some (int_of_string (Pcre.get_substring subs 1))
- with
- Not_found -> None in
-
- if state == `Complete then
- memory_set key "1";
-
- state, task
+ `No_such_build, None
+ else (
+ let state =
+ try
+ let subs = Pcre.exec ~rex:state out in
+ match Pcre.get_substring subs 1 with
+ | "BUILDING" -> `Building
+ | "COMPLETE" -> `Complete
+ | "DELETED" -> `Deleted
+ | "FAILED" -> `Failed
+ | "CANCELED" -> `Canceled
+ | sub ->
+ failwith (sprintf "koji_build_state_task: %s: unknown build state '%s'"
+ verrel sub)
+ with
+ Not_found ->
+ failwith (sprintf "koji_build_state_task: %s: no build state found"
+ verrel) in
+ let task =
+ try
+ let subs = Pcre.exec ~rex:task_id out in
+ Some (int_of_string (Pcre.get_substring subs 1))
+ with
+ Not_found -> None in
+
+ if state == `Complete then
+ memory_set key "1";
+
+ state, task
+ )
)
(* Perform a Koji build and wait until it finishes. If it fails,
let out =
shout "
cd %s
- fedpkg build%s 2>&1 ||:
+ fedpkg build%s 2>&1
" repodir (if not wait then " --nowait" else "")
in
- if wait then (
+ if not wait then (
+ (* Just check the task was created. *)
+ if not (Pcre.pmatch ~rex:created_task out) then (
+ failwith "fedpkg build: build failed to start"
+ )
+ ) else (
let task_id =
try
let subs = Pcre.exec ~rex:created_task out in
else if completed_successfully out then
()
else if failed out then (
- eprintf "%s\n%!" out;
failwith "koji build failed"
)
else