(* Perform a complete Fedora OCaml rebuild, in build order. *) open Printf open Goaljobs open Config open Fedora let branch = "master" let koji_target = "rawhide" (* The name of the rebuild, and also the magic substring that must * appear in the %changelog when the package has been rebuilt. *) let rebuild_name = "OCaml 4.01.0" (* Packages that have problems or we just don't want to build. *) let blocked = [ "ocaml-libvirt"; (* RHBZ#1009701 *) "ocaml-lwt"; "ocaml-react"; (* loganjerry is handling *) ] (* List of OCaml-related source package names. *) let source_packages = let dirs = shlines "cd %s && ls -1d ocaml*" fedora_dir in dirs @ [ "alt-ergo"; "apron"; "brltty"; "coccinelle"; "coq"; "cduce"; "frama-c"; "gappalib-coq"; "graphviz"; "hivex"; "js-of-ocaml"; "llvm"; "plplot"; "whenjobs"; "why3"; "xen" ] let source_packages = List.filter (fun pkg -> not (List.mem pkg blocked)) source_packages (* Dependencies of each package. (pkg, [deps ...]) *) let pkg_deps = dependencies branch source_packages (* Goal: rebuild all packages. *) let rec goal all () = List.iter (fun pkg -> require (rebuilt pkg)) source_packages (* Goal: That 'package' has been rebuilt and exists in Koji. *) and rebuilt pkg = let deps = List.assoc pkg pkg_deps in let specfile = fedora_specfile pkg branch in (* Note the target must be both of these because the old verrel * could exist as a koji build without it having been part of the * rebuild. *) target (file_contains_string specfile rebuild_name && koji_build_exists (fedora_verrel pkg branch)); (* All dependent packages must have been done first. *) List.iter (fun dep -> require (rebuilt dep)) deps; (* A local test build must succeed. *) require (local_build_succeeded pkg); (* Rebuild the package in Koji. *) koji_build pkg branch; (* Wait for the build to appear in Koji repo. Note verrel may change. *) koji_wait_repo koji_target (fedora_verrel pkg branch) and local_build_succeeded pkg = (* The specfile must have been updated. *) require (specfile_updated pkg); let key = sprintf "fedora_ocaml_local_build_%s_%s" pkg (fedora_verrel pkg branch) in target (memory_exists key); (* Do a local test build to ensure the Koji build will work. *) sh " cd %s sudo yum-builddep %s fedpkg local " (fedora_repo pkg branch) (fedora_specfile pkg branch); memory_set key "1" and specfile_updated pkg = let repodir = fedora_repo pkg branch in let specfile = fedora_specfile pkg branch in (* XXX Automate common changes. *) let title = rebuild_name ^ " rebuild." in sh " cd %s git pull --rebase rm -rf x86_64 noarch *.src.rpm rpmdev-bumpspec -c %s %s echo 'Please make further changes as required to the spec file %s.spec' echo '(Press return key)' read emacs -nw %s echo 'OK to commit this change? (press ^C if not)' read fedpkg commit -c echo 'OK to push this change? (press ^C if not)' read fedpkg push " repodir (quote title) specfile pkg specfile