@@ -2,7 +2,7 @@ open Lwt.Infix
22
33let ( / ) = Filename. concat
44
5- module Sandbox = Obuilder. Sandbox
5+ module Runc_sandbox = Obuilder. Runc_sandbox
66
77type builder = Builder : (module Obuilder .BUILDER with type t = 'a ) * 'a -> builder
88
@@ -13,26 +13,39 @@ let log tag msg =
1313 | `Output -> output_string stdout msg; flush stdout
1414
1515let create_builder spec conf =
16- Obuilder.Store_spec. to_store spec >> = fun (Store ((module Store), store )) ->
17- let (module Fetcher : Obuilder.S.FETCHER ) =
18- match Sandbox. backend with
19- | `Runc | `Mock -> (module Obuilder.Docker. Extract : Obuilder.S.FETCHER )
20- | `Docker -> (module Obuilder.Docker. Pull : Obuilder.S.FETCHER )
21- in
22- let module Builder = Obuilder. Builder (Store )(Sandbox )(Fetcher ) in
23- Sandbox. create ~state_dir: (Store. state_dir store / " sandbox" ) conf > |= fun sandbox ->
16+ let open Obuilder in
17+ Store_spec. to_store spec >> = fun (Store ((module Store), store )) ->
18+ let module Builder = Builder (Store ) (Runc_sandbox ) (Docker_extract ) in
19+ Runc_sandbox. create ~state_dir: (Store. state_dir store / " sandbox" ) conf > |= fun sandbox ->
2420 let builder = Builder. v ~store ~sandbox in
2521 Builder ((module Builder ), builder)
2622
23+ let create_docker_builder path conf =
24+ let open Obuilder in
25+ let module Builder = Docker_builder in
26+ Docker_store. create path >> = fun store ->
27+ Docker_sandbox. create ~state_dir: (Docker_store. state_dir store / " sandbox" ) conf > |= fun sandbox ->
28+ let builder = Docker_builder. v ~store ~sandbox in
29+ Builder ((module Docker_builder ), builder)
30+
2731let read_whole_file path =
2832 let ic = open_in_bin path in
2933 Fun. protect ~finally: (fun () -> close_in ic) @@ fun () ->
3034 let len = in_channel_length ic in
3135 really_input_string ic len
3236
33- let build () store spec conf src_dir secrets =
37+ let build () store docker_backend spec runc_conf docker_conf src_dir secrets =
3438 Lwt_main. run begin
35- create_builder store conf >> = fun (Builder ((module Builder), builder )) ->
39+ begin match store, docker_backend with
40+ | None , None ->
41+ Fmt. epr " Must select either a store or the Docker backend@." ;
42+ exit 1
43+ | Some _ , Some _ ->
44+ Fmt. epr " Cannot select a store and the Docker backend@." ;
45+ exit 1
46+ | Some store , None -> create_builder store runc_conf
47+ | None , Some path -> create_docker_builder path docker_conf
48+ end >> = fun (Builder ((module Builder), builder )) ->
3649 let spec =
3750 try Obuilder.Spec. t_of_sexp (Sexplib.Sexp. load_sexp spec)
3851 with Failure msg ->
@@ -107,14 +120,30 @@ let src_dir =
107120let store_t =
108121 Arg. conv Obuilder.Store_spec. (of_string, pp)
109122
110- let store =
123+ let store_required =
111124 Arg. required @@
112125 Arg. opt Arg. (some store_t) None @@
113126 Arg. info
114- ~doc: " zfs:pool or btrfs:/path or docker:/path for build cache"
127+ ~doc: " zfs:pool or btrfs:/path for build cache"
115128 ~docv: " STORE"
116129 [" store" ]
117130
131+ let store =
132+ Arg. value @@
133+ Arg. opt Arg. (some store_t) None @@
134+ Arg. info
135+ ~doc: " zfs:pool or btrfs:/path for build cache"
136+ ~docv: " STORE"
137+ [" store" ]
138+
139+ let docker_backend =
140+ Arg. value @@
141+ Arg. opt Arg. (some string ) None @@
142+ Arg. info
143+ ~doc: " Use the Docker store and sandbox backend. Use $(docv) for temporary files."
144+ ~docv: " path"
145+ [" docker-backend" ]
146+
118147let id =
119148 Arg. required @@
120149 Arg. pos 0 Arg. (some string ) None @@
@@ -133,12 +162,13 @@ let secrets =
133162
134163let build =
135164 let doc = " Build a spec file." in
136- Term. (const build $ setup_log $ store $ spec_file $ Sandbox. cmdliner $ src_dir $ secrets),
165+ Term. (const build $ setup_log $ store $ docker_backend $ spec_file
166+ $ Obuilder.Runc_sandbox. cmdliner $ Obuilder.Docker_sandbox. cmdliner $ src_dir $ secrets),
137167 Term. info " build" ~doc
138168
139169let delete =
140170 let doc = " Recursively delete a cached build result." in
141- Term. (const delete $ setup_log $ store $ Sandbox . cmdliner $ id),
171+ Term. (const delete $ setup_log $ store_required $ Runc_sandbox . cmdliner $ id),
142172 Term. info " delete" ~doc
143173
144174let buildkit =
@@ -155,7 +185,7 @@ let dockerfile =
155185
156186let healthcheck =
157187 let doc = " Perform a self-test" in
158- Term. (const healthcheck $ setup_log $ store $ Sandbox . cmdliner),
188+ Term. (const healthcheck $ setup_log $ store_required $ Runc_sandbox . cmdliner),
159189 Term. info " healthcheck" ~doc
160190
161191let cmds = [build; delete; dockerfile; healthcheck]
0 commit comments