forked from avsm/opam-sync-github-prs
-
Notifications
You must be signed in to change notification settings - Fork 1
/
generate.ml
66 lines (62 loc) · 2.72 KB
/
generate.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
(*
* Copyright (c) 2014 Anil Madhavapeddy <anil@recoil.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
*)
open Core.Std
open Lwt
let make_compiler_spec ~version ~output_dir pull =
let open Github_t in
let suffix = sprintf "+pr%d" pull.pull_number in
let name = version ^ suffix in
let descr = pull.pull_title in
let subdir = sprintf "%s/compilers/%s/%s/" output_dir version name in
let base = pull.pull_base.branch_ref in
printf "Generating: %s\n%!" subdir;
Unix.mkdir_p subdir;
let open Out_channel in
with_file (subdir ^ name ^ ".descr") ~f:(fun t -> output_string t descr);
with_file (subdir ^ name ^ ".comp")
~f:(fun t ->
[
"opam-version: \"1\"";
sprintf "version: \"%s\"" version;
sprintf "src: \"https://github.com/ocaml/ocaml/archive/%s.tar.gz\"" base;
sprintf "patches: %S" pull.pull_diff_url;
"build: [";
" [\"./configure\" \"-prefix\" prefix \"-with-debug-runtime\"]";
" [make \"world\"]";
" [make \"world.opt\"]";
" [make \"install\"]";
"]";
"packages: [ \"base-unix\" \"base-bigarray\" \"base-threads\" ]";
"env: [[CAML_LD_LIBRARY_PATH = \"%{lib}%/stublibs\"]]"
] |> output_lines t
)
let get_pulls user repo version output_dir () =
let open Github in
let pulls = Pull.for_repo ~user ~repo ~state:`Open () in
Lwt_main.run (Monad.run pulls);
|> List.iter ~f:(make_compiler_spec ~version ~output_dir)
let _ =
Command.basic
~summary:"Generates an OPAM compiler remote for active GitHub OCaml PRs"
Command.Spec.(
empty
+> flag "-github-user" (optional_with_default "ocaml" string) ~doc:"string GitHub username"
+> flag "-github-repo" (optional_with_default "ocaml" string) ~doc:"string GitHub repository"
+> flag "-compiler-version" (optional_with_default "4.02.0dev" string) ~doc:"string OCaml compiler version"
+> flag "-output-dir" (optional_with_default "." string) ~doc:"string Directory containing the OPAM repository"
) get_pulls
|> Command.run