(* Handle Fedora builds of libguestfs. *) open Goaljobs open Printf open Config open Fedora open Git open Libguestfs (* Enable debugging. *) let () = Unix.putenv "LIBGUESTFS_DEBUG" "1"; Unix.putenv "LIBGUESTFS_TRACE" "1" (* Log program output. *) let from = "rjones@redhat.com" let to_ = "rjones@redhat.com" let package = "libguestfs" (* How branches in libguestfs upstream map to branches in Fedora. *) let branches = [ "1.37-development", "master"; (* Rawhide follows development. *) "1.36-stable", "f26"; (* F26 follows 1.36. *) "1.36-stable", "f25"; (* F25 follows 1.36. *) "1.34-stable", "f24"; (* F24 follows 1.34. *) "1.32-stable", "f23"; (* F23 follows 1.32. *) "1.30-stable", "f22"; (* F22 follows 1.30. *) ] (* Goal: Latest website version has been built in every branch. *) let rec goal all () = List.iter ( fun (wbranch, fbranch) -> match website_latest_version wbranch with | None -> () | Some version -> require (fedora_built version fbranch) ) branches (* Goal: Fedora has a successful build of 'version' on 'branch'. *) and fedora_built version branch = let specfile = fedora_specfile package branch in target (file_contains_string specfile version.version && match koji_build_state (fedora_verrel package branch) with | `Complete | `Building -> true | _ -> false); require (sources_uploaded version branch); require (specfile_pushed version branch); koji_build ~wait:true package branch and sources_uploaded version branch = let repodir = fedora_repo package branch in let sources = repodir // "sources" in let key = sprintf "libguestfs_fedora_sources_uploaded_%s" version.version in target (file_contains_string sources version.version && memory_exists key); onrun (fun () -> memory_set key "1"); require (repodir_up_to_date repodir); sh " cd %s fedpkg new-sources %s/%s " repodir libguestfs_website_repo version.urlpath and specfile_updated version branch = let repodir = fedora_repo package branch in let specfile = fedora_specfile package branch in target (file_contains_string specfile version.version); require (repodir_up_to_date repodir); (* Hairy specfile editing. *) sh " cd %s email=\"Richard W.M. Jones \" date=`date +\"%%a %%b %%d %%Y\"` cp libguestfs.spec libguestfs.spec.old sed < libguestfs.spec.old \\ -e \"s/^Version:.*/Version: %s/\" \\ -e \"s/^Release:.*/Release: 1%%{?dist}/\" \\ -e \"/^%%changelog/a \\ * $date $email - 1:%s-1\\\\n\\ - New upstream version %s.\\\\n\\ \" > libguestfs.spec rm libguestfs.spec.old " repodir version.version version.version version.version and specfile_committed version branch = let repodir = fedora_repo package branch in let key = sprintf "libguestfs_fedora_specfile_committed_%s_%s" branch version.version in target (memory_exists key); onrun (fun () -> memory_set key "1"); require (specfile_updated version branch); sh " cd %s fedpkg commit -c " repodir and specfile_pushed version branch = let repodir = fedora_repo package branch in let key = sprintf "libguestfs_fedora_specfile_pushed_%s_%s" branch version.version in target (memory_exists key); onrun (fun () -> memory_set key "1"); require (repodir_up_to_date repodir); require (specfile_committed version branch); sh " cd %s fedpkg push " repodir and repodir_up_to_date repodir = sh " cd %s git fetch " repodir; if not (git_has_local_changes repodir) then sh " cd %s git pull --rebase " repodir