Skip some libguestfs slow tests.
[goaljobs-goals.git] / libguestfs_fedora.ml
1 (* Handle Fedora builds of libguestfs. *)
2
3 open Goaljobs
4
5 open Printf
6
7 open Config
8 open Fedora
9 open Git
10 open Libguestfs
11
12 (* Enable debugging. *)
13 let () =
14   Unix.putenv "LIBGUESTFS_DEBUG" "1";
15   Unix.putenv "LIBGUESTFS_TRACE" "1"
16
17 (* Log program output. *)
18 let from = "rjones@redhat.com"
19 let to_ = "rjones@redhat.com"
20
21 let package = "libguestfs"
22
23 (* How branches in libguestfs upstream map to branches in Fedora. *)
24 let branches = [
25   "1.39-development", "master";    (* Rawhide follows development. *)
26   "1.39-development", "f29";       (* F29 follows development. *)
27   "1.38-stable", "f28";            (* F28 follows 1.38. *)
28   "1.38-stable", "f27";            (* F27 follows 1.38. *)
29 ]
30
31 (* Goal: Latest website version has been built in every branch. *)
32 let rec goal all () =
33   List.iter (
34     fun (wbranch, fbranch) ->
35       match website_latest_version wbranch with
36       | None -> ()
37       | Some version ->
38         require (fedora_built version fbranch)
39   ) branches
40
41 (* Goal: Fedora has a successful build of 'version' on 'branch'. *)
42 and fedora_built version branch =
43   let specfile = fedora_specfile package branch in
44
45   target (file_contains_string specfile version.version &&
46             match koji_build_state (fedora_verrel package branch) with
47             | `Complete | `Building -> true
48             | _ -> false);
49
50   require (sources_uploaded version branch);
51   require (specfile_pushed version branch);
52
53   koji_build ~wait:true package branch
54
55 and sources_uploaded version branch =
56   let repodir = fedora_repo package branch in
57   let sources = repodir // "sources" in
58   let key = sprintf "libguestfs_fedora_sources_uploaded_%s" version.version in
59
60   target (file_contains_string sources version.version &&
61             memory_exists key);
62   onrun (fun () -> memory_set key "1");
63
64   require (repodir_up_to_date repodir);
65
66   if not version.is_stable then (
67     sh "
68       cd %s
69       fedpkg new-sources %s/%s
70     " repodir libguestfs_download_repo version.urlpath
71   ) else (
72     sh "
73       cd %s
74       fedpkg new-sources %s/%s %s/%s.sig
75     "  repodir
76        libguestfs_download_repo version.urlpath
77        libguestfs_download_repo version.urlpath
78   )
79
80 and specfile_updated version branch =
81   let repodir = fedora_repo package branch in
82   let specfile = fedora_specfile package branch in
83
84   target (file_contains_string specfile version.version);
85
86   require (repodir_up_to_date repodir);
87
88   (* Hairy specfile editing. *)
89   sh "
90     cd %s
91     email=\"Richard W.M. Jones <rjones@redhat.com>\"
92     date=`date +\"%%a %%b %%d %%Y\"`
93     cp libguestfs.spec libguestfs.spec.old
94     sed < libguestfs.spec.old \\
95     -e \"s/^Version:.*/Version:       %s/\" \\
96     -e \"s/^Release:.*/Release:       1%%{?dist}/\" \\
97     -e \"/^%%changelog/a \\
98 * $date $email - 1:%s-1\\\\n\\
99 - New upstream version %s.\\\\n\\
100 \" > libguestfs.spec
101     rm libguestfs.spec.old
102   " repodir version.version version.version version.version
103
104 and specfile_committed version branch =
105   let repodir = fedora_repo package branch in
106   let key = sprintf "libguestfs_fedora_specfile_committed_%s_%s"
107     branch version.version in
108
109   target (memory_exists key);
110   onrun (fun () -> memory_set key "1");
111
112   require (specfile_updated version branch);
113
114   sh "
115     cd %s
116     fedpkg commit -c
117   " repodir
118
119 and specfile_pushed version branch =
120   let repodir = fedora_repo package branch in
121   let key =
122     sprintf "libguestfs_fedora_specfile_pushed_%s_%s" branch version.version in
123
124   target (memory_exists key);
125   onrun (fun () -> memory_set key "1");
126
127   require (repodir_up_to_date repodir);
128   require (specfile_committed version branch);
129
130   sh "
131     cd %s
132     fedpkg push
133   " repodir
134
135 and repodir_up_to_date repodir =
136   sh "
137     cd %s
138     git fetch
139   " repodir;
140   if not (git_has_local_changes repodir) then
141     sh "
142       cd %s
143       git pull --rebase
144     " repodir