mte/unikernel/duniverse/mirage/test/functoria/e2e/lib/e2e.ml

79 lines
2.1 KiB
OCaml
Raw Normal View History

2025-11-11 02:07:51 +01:00
open Functoria
open Cmdliner
module Key = Key
let docs = "APPLICATION OPTIONS"
let warn_error =
let doc = "Enable -warn-error when compiling OCaml sources." in
let doc = Arg.info ~docv:"BOOL" ~doc ~docs [ "warn-error" ] in
let key = Key.Arg.opt Arg.bool false doc in
Key.create "warn_error" key
let vote =
let doc = "Vote." in
let doc = Arg.info ~docv:"VOTE" ~doc ~docs [ "vote" ] in
let key = Key.Arg.opt Arg.string "cat" doc in
Key.create "vote" key
let file_of_key k = Fpath.v Key.(name @@ v k)
let write_key i k f =
let context = Info.context i in
let file = file_of_key k in
let contents = f (Key.get context k) in
Action.write_file file contents
module C = struct
open Action.Syntax
let prelude _ =
"let (>>=) x f = f x\ntype 'a io = 'a\nlet return x = x\nlet run x = x"
let name = "test"
let version = "1.0~test"
let packages = [ package ~sublibs:[ "functoria" ] "mirage"; package "e2e" ]
let keys = Key.[ v vote; v warn_error ]
let connect _ _ _ = code ~pos:__POS__ "()"
let main i = Fpath.(basename @@ rem_ext @@ Info.main i)
let config i = Fpath.(basename @@ rem_ext @@ Info.config_file i)
let dune i =
let dune =
Dune.stanzaf
{|
(executable
(name %s)
(modules (:standard \ %s))
(promote (until-clean))
(libraries cmdliner fmt mirage-runtime.functoria))
|}
(main i) (config i)
in
[ dune ]
let configure i =
let* () = write_key i vote (fun x -> x) in
write_key i warn_error string_of_bool
let create jobs =
let packages = [ package "fmt" ] in
let extra_deps = List.map dep jobs in
let install i = Install.v ~bin:[ Fpath.(v (main i) + "exe", v "e2e") ] () in
impl ~keys ~packages ~connect ~dune ~configure ~extra_deps ~install "E2e"
job
let name_of_target i = Info.name i
let target_filename = name_of_target
let dune_project = []
let dune_workspace = None
let context_name _ = "default"
end
include Lib.Make (C)
include Tool.Make (C)
let register ?(init = []) ?src name typ =
let init = runtime_args sys_argv :: init in
register ~init ?src name typ