diff --git a/bin/builder_web_app.ml b/bin/builder_web_app.ml index a2e843d..1433245 100644 --- a/bin/builder_web_app.ml +++ b/bin/builder_web_app.ml @@ -6,14 +6,55 @@ let app t = |> App.cmd_name "Builder Web" |> Builder_web.add_routes t -let () = - let () = Mirage_crypto_rng_unix.initialize () in - let datadir = Fpath.v "/var/db/builder-web/" in - match Builder_web.init "/var/db/builder-web/builder.sqlite3" datadir with +let setup_app port host _debug _verbose datadir = + let dbpath = Printf.sprintf "%s/builder.sqlite3" datadir in + let datadir = Fpath.v datadir in + match Builder_web.init dbpath datadir with | Error (#Caqti_error.load as e) -> - Format.eprintf "Error: %a\n" Caqti_error.pp e; + Format.eprintf "Error: %a\n%!" Caqti_error.pp e; + exit 2 | Error (#Builder_web.db_error | `Wrong_version _ as e) -> - Format.eprintf "Error: %a\n" Builder_web.pp_error e; + Format.eprintf "Error: %a\n%!" Builder_web.pp_error e; exit 1 | Ok t -> - App.run_command (app t) + app t + |> App.port port + |> App.host host + |> App.start + +open Cmdliner + +let datadir = + let doc = "data directory" in + Arg.(value & opt dir "/var/db/builder-web/" & info [ "-d"; "--datadir" ] ~doc) + +let port = + let doc = "port" in + Arg.(value & opt int 3000 & info [ "p"; "port" ] ~doc) + +let host = + let doc = "host" in + Arg.(value & opt string "0.0.0.0" & info [ "h"; "host" ] ~doc) + +let debug = + let doc = "enable debug information" in + Arg.(value & flag & info [ "d"; "debug" ] ~doc) + +let verbose = + let doc = "enable verbose mode" in + Arg.(value & flag & info [ "v"; "verbose" ] ~doc) + + + +let () = + let () = Mirage_crypto_rng_unix.initialize () in + let term = Term.(pure setup_app $ port $ host $ pure false $ pure false $ datadir) in + let info = Term.info "Builder web" ~doc:"Builder web" ~man:[] in + match Term.eval (term, info) with + | `Ok s -> + Lwt_main.run (Lwt.async (fun () -> + Lwt.bind s (fun _ -> Lwt.return_unit)); + let forever, _ = Lwt.wait () in + forever) + | `Error _ -> exit 1 + | _ -> exit 0 diff --git a/bin/dune b/bin/dune index c6a2e9f..52c9d78 100644 --- a/bin/dune +++ b/bin/dune @@ -2,7 +2,7 @@ (public_name builder-web) (name builder_web_app) (modules builder_web_app) - (libraries builder_web mirage-crypto-rng.unix)) + (libraries builder_web mirage-crypto-rng.unix cmdliner)) (executable (public_name builder-db)