X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=libguestfs_upstream.ml;h=a3450ebd4fa8f40633beea2c27fcc94ef0722dee;hb=9220c617d6f522591fff56fab258cd5a0d5292ae;hp=825029a99d64da89d2caa3f23a5c00c75d74ce48;hpb=7948877db13807dbc83a6de6aecd34218aae014a;p=goaljobs-goals.git diff --git a/libguestfs_upstream.ml b/libguestfs_upstream.ml index 825029a..a3450eb 100644 --- a/libguestfs_upstream.ml +++ b/libguestfs_upstream.ml @@ -11,34 +11,22 @@ open Goaljobs open Printf open Config +open Libguestfs -let package = "libguestfs" +(* Enable debugging. *) +let () = + Unix.putenv "LIBGUESTFS_DEBUG" "1"; + Unix.putenv "LIBGUESTFS_TRACE" "1" -(* Helper object which stores everything about a version. *) -type info = { - version : string; (* The version as a normal string. *) - major : int; (* Broken-out version fields. *) - minor : int; - release: int; - is_stable : bool; (* is a stable version of libguestfs? *) - branch : string; (* 'master' or 'stable-1.xx' *) - package_version : string; (* package-version *) - tarball : string; (* package-version.tar.gz *) - urlpath : string; (* download/1.X-(stable|development)/tarball *) - url : string; (* full download URL of tarball *) -} - -(* Helper: Fetch latest gnulib into $buildtmp/repos/gnulib - * XXX Move to Gnulib module. - *) -let get_gnulib () = - sh " - cd %s/repos - if [ ! -d gnulib ]; then git clone git://git.sv.gnu.org/gnulib.git; fi - cd gnulib - git checkout --force master - git pull - " buildtmp +(* Log program output. *) +let from = "rjones@redhat.com" +let to_ = "rjones@redhat.com" +(* +let logfile = log_program_output () +let () = eprintf "logging to %s\n%!" logfile +*) + +let package = "libguestfs" (* Goal: the website has been updated to 'version'. *) let rec goal website_updated version = @@ -51,24 +39,24 @@ let rec goal website_updated version = if not version.is_stable then require (website_built version); - require (website_cvs_checked_in version); + require (website_checked_in version); require (website_rsync_done version) (* Goal: website has been rsync'd. *) and website_rsync_done version = - let key = sprintf "libguestfs_website_rsync_done_%s" version.version in - target (memory_exists key); + target (url_contains_string "http://libguestfs.org" version.version && + url_exists version.url); sh " cd %s - echo NOT RUNNING: . .rsync - " libguestfs_website_cvs; - memory_set key "1" + ./.rsync + " libguestfs_website_repo -(* Goal: Tarball added to CVS and CVS checked in. *) -and website_cvs_checked_in version = - let key = sprintf "libguestfs_website_cvs_checked_in_%s" version.version in +(* Goal: Tarball added to repository and checked in. *) +and website_checked_in version = + let key = sprintf "libguestfs_website_checked_in_%s" version.version in target (memory_exists key); + onrun (fun () -> memory_set key "1"); require (tarball_created version); require (tarball_tested version); @@ -76,16 +64,17 @@ and website_cvs_checked_in version = sh " cd %s cp %s/tarballs/%s %s - echo NOT RUNNING: cvs add -kb %s - echo NOT RUNNING: cvs ci -m \"Version %s\" - " libguestfs_website_cvs + git add %s + git add *.txt *.html + git commit -m \"Version %s\" + " libguestfs_website_repo buildtmp version.tarball version.urlpath version.urlpath version.version (* Goal: website (local copy) has been built. *) and website_built version = - let index_file = sprintf "%s/index.html" libguestfs_website_cvs in + let index_file = sprintf "%s/index.html" libguestfs_website_repo in target (file_contains_string index_file version.version); require (tarball_created version); @@ -97,16 +86,19 @@ and website_built version = sh " tar zxf %s/tarballs/%s cd %s + echo %s > localconfigure chmod +x localconfigure - echo %s > localenv . + echo %s > localenv + ./localconfigure - make - make website + make V=1 + make maintainer-upload-website WEBSITEDIR=%s " buildtmp version.tarball version.package_version (quote (libguestfs_localconfigure `Tarball)) - (quote libguestfs_localenv) + (quote (libguestfs_localenv (supermin version))) + (quote libguestfs_website_repo) (* Goal: the tarball has passed the required set of tests before * a release is allowed. @@ -114,30 +106,34 @@ and website_built version = and tarball_tested version = let key = sprintf "libguestfs_tarball_tested_%s" version.version in target (memory_exists key); + onrun (fun () -> memory_set key "1"); require (tarball_created version); sh " tar zxf %s/tarballs/%s cd %s + echo %s > localconfigure chmod +x localconfigure - echo %s > localenv . + echo %s > localenv + ./localconfigure - make + make V=1 make check-release " buildtmp version.tarball version.package_version (quote (libguestfs_localconfigure `Tarball)) - (quote libguestfs_localenv) + (quote (libguestfs_localenv (supermin version))) (* Goal: the tarball has been created from git. *) and tarball_created version = let filename = sprintf "%s/tarballs/%s" buildtmp version.tarball in target (file_exists filename); + require (repo_up_to_date version.branch); + let repodir = sprintf "%s/repos/%s-%s" buildtmp package version.branch in - require (directory_exists repodir); sh " cp -a %s libguestfs @@ -146,25 +142,45 @@ and tarball_created version = echo %s > localconfigure chmod +x localconfigure - echo %s > localenv . + echo %s > localenv ./localconfigure - make + + # Ensure the po-docs are updated. Grrr this is ugly ... + make ||: + rm po-docs/podfiles + make -C po-docs update-po + + make V=1 make dist + + # Ensure redhat hardening flags didn't leak into the tarball. + # https://bugzilla.redhat.com/show_bug.cgi?id=1214506 + if zcat %s | grep -q redhat-hardened; then exit 1; fi + mv %s %s/tarballs/%s " repodir version.version (quote (libguestfs_localconfigure `Git)) - (quote libguestfs_localenv) + (quote (libguestfs_localenv (supermin version))) + version.tarball version.tarball buildtmp version.tarball (* Goal: test a commit. *) and commit_tested branch commit = + onfail ( + fun _ -> + let subject = sprintf "goal: %s: FAILED" goalname in + mailto ~from ~subject (*~attach:[logfile]*) to_ + ); + let key = sprintf "libguestfs_commit_tested_%s" commit in target (memory_exists key); + onrun (fun () -> memory_set key "1"); + + require (repo_up_to_date branch); let repodir = sprintf "%s/repos/%s-%s" buildtmp package branch in - require (directory_exists repodir); sh " cp -a %s libguestfs @@ -176,86 +192,21 @@ and commit_tested branch commit = echo %s > localenv ./localconfigure - make + make V=1 make check-release " repodir commit (quote (libguestfs_localconfigure `Git)) - (quote libguestfs_localenv); + (quote (libguestfs_localenv None)) - memory_set key "1" - -(* Helper function to make a full 'info' object from a version - * number. - *) -let vernames version = - Scanf.sscanf version "%d.%d.%d" ( - fun major minor release -> - let is_stable = minor mod 2 = 0 in - let branch = - if is_stable then - sprintf "stable-%d.%d" major minor - else - sprintf "master" in - let package_version = sprintf "%s-%d.%d.%d" package major minor release in - let tarball = sprintf "%s.tar.gz" package_version in - let urlpath = - if is_stable then - sprintf "download/%d.%d-stable/%s" major minor tarball - else - sprintf "download/%d.%d-development/%s" major minor tarball in - let url = "http://libguestfs.org/" ^ urlpath in - { version = version; - major = major; minor = minor; release = release; - is_stable = is_stable; - branch = branch; - package_version = package_version; - tarball = tarball; - urlpath = urlpath; - url = url } - ) - -(* Helper function to read the latest version in a repo and return - * the version. - *) -let git_latest_version branch = - let v = shout " - cd %s/repos/%s-%s - git describe --tags --abbrev=0 - " buildtmp package (quote branch) in - vernames v - -(* Get the latest commit. *) -let git_latest_commit branch = - shout " - cd %s/repos/%s-%s - git rev-parse HEAD - " buildtmp package (quote branch) - -(* Clone or update a repo to the latest version on a branch, by force. - * It is cached in name = $buildtmp/repos/- - *) -let git_force url branch = - sh " - cd %s/repos - if [ ! -d %s-%s ]; then git clone %s %s-%s; fi - cd %s-%s - git checkout --force %s - git pull - # Copy or update gnulib - git submodule init - git submodule update - " buildtmp - package (quote branch) (quote url) package (quote branch) - package (quote branch) - (quote branch) +and repo_up_to_date branch = + git_force branch let () = (* Add a periodic job to check for new git commits and test them. *) every libguestfs_query_mins minutes ~name:"new libguestfs commit" ( fun () -> - git_force "https://github.com/libguestfs/libguestfs.git" "master"; - + require (repo_up_to_date "master"); let commit = git_latest_commit "master" in require (commit_tested "master" commit); ); @@ -263,8 +214,23 @@ let () = (* Periodic job to build new tarballs. *) every libguestfs_query_mins minutes ~name:"new libguestfs version" ( fun () -> - git_force "https://github.com/libguestfs/libguestfs.git" "master"; - + require (repo_up_to_date "master"); let version = git_latest_version "master" in require (website_updated version) ) + +(* Allow these jobs to run from the command line. *) +let () = + publish "commit" ( + function + | [commit] -> require (commit_tested "master" commit) + | [branch; commit] -> require (commit_tested branch commit) + | _ -> + failwith "use './libguestfs_upstream commit [] '" + ); + publish "release" ( + function + | [version] -> require (website_updated (vernames version)) + | _ -> + failwith "use './libguestfs_upstream release '" + )