sig
  module Host :
    sig
      type t = Ketrew_host.t
      val parse : string -> Ketrew_edsl.Host.t
      val tmp_on_localhost : Ketrew_edsl.Host.t
      val ssh :
        ?add_ssh_options:string list ->
        ?playground:string ->
        ?port:int ->
        ?user:string -> ?name:string -> string -> Ketrew_edsl.Host.t
      val cmdliner_term :
        ?doc:string ->
        [ `Flag of string list | `Required of int ] ->
        Ketrew_edsl.Host.t Cmdliner.Term.t
    end
  module Program :
    sig
      type t = Ketrew_program.t
      val sh : string -> Ketrew_edsl.Program.t
      val shf :
        ('a, unit, string, Ketrew_edsl.Program.t) Pervasives.format4 -> 'a
      val exec : string list -> Ketrew_edsl.Program.t
      val ( && ) :
        Ketrew_edsl.Program.t ->
        Ketrew_edsl.Program.t -> Ketrew_edsl.Program.t
      val chain : Ketrew_edsl.Program.t list -> Ketrew_edsl.Program.t
    end
  module Condition :
    sig
      type t = Ketrew_target.Condition.t
      val ( && ) :
        Ketrew_edsl.Condition.t ->
        Ketrew_edsl.Condition.t -> Ketrew_edsl.Condition.t
      val chain_and : Ketrew_edsl.Condition.t list -> Ketrew_edsl.Condition.t
      val never : Ketrew_edsl.Condition.t
      val program :
        ?returns:int ->
        ?host:Ketrew_host.t ->
        Ketrew_edsl.Program.t -> Ketrew_edsl.Condition.t
    end
  class type user_artifact =
    object
      method exists : Ketrew_target.Condition.t
      method is_bigger_than : int -> Ketrew_target.Condition.t
      method path : string
    end
  val file : ?host:Ketrew_host.t -> string -> Ketrew_edsl.user_artifact
  val unit : Ketrew_edsl.user_artifact
  class type user_target =
    object
      method activate : unit
      method depends_on : Ketrew_edsl.user_target list
      method id : Ketrew_pervasives.Unique_id.t
      method is_active : bool
      method metadata : [ `String of string ] option
      method name : string
      method on_failure_activate : Ketrew_edsl.user_target list
      method on_success_activate : Ketrew_edsl.user_target list
      method product : Ketrew_edsl.user_artifact
      method render : Ketrew_target.t
    end
  val target :
    ?active:bool ->
    ?depends_on:Ketrew_edsl.user_target list ->
    ?make:Ketrew_target.Build_process.t ->
    ?done_when:Ketrew_target.Condition.t ->
    ?metadata:[ `String of string ] ->
    ?product:Ketrew_edsl.user_artifact ->
    ?equivalence:Ketrew_target.Equivalence.t ->
    ?on_failure_activate:Ketrew_edsl.user_target list ->
    ?on_success_activate:Ketrew_edsl.user_target list ->
    ?tags:string list -> string -> Ketrew_edsl.user_target
  val file_target :
    ?depends_on:Ketrew_edsl.user_target list ->
    ?make:Ketrew_target.Build_process.t ->
    ?metadata:[ `String of string ] ->
    ?name:string ->
    ?host:Ketrew_edsl.Host.t ->
    ?equivalence:Ketrew_target.Equivalence.t ->
    ?on_failure_activate:Ketrew_edsl.user_target list ->
    ?on_success_activate:Ketrew_edsl.user_target list ->
    ?tags:string list -> string -> Ketrew_edsl.user_target
  val daemonize :
    ?starting_timeout:float ->
    ?call_script:(string -> string list) ->
    ?using:[ `Nohup_setsid | `Python_daemon ] ->
    ?host:Ketrew_edsl.Host.t ->
    ?no_log_is_ok:bool ->
    Ketrew_edsl.Program.t -> Ketrew_target.Build_process.t
  val lsf :
    ?host:Ketrew_edsl.Host.t ->
    ?queue:string ->
    ?name:string ->
    ?wall_limit:string ->
    ?processors:[ `Min of int | `Min_max of int * int ] ->
    ?project:string -> Ketrew_edsl.Program.t -> Ketrew_target.Build_process.t
  val pbs :
    ?host:Ketrew_host.t ->
    ?queue:string ->
    ?name:string ->
    ?wall_limit:[ `Hours of float ] ->
    ?processors:int ->
    ?email_user:[ `Always of string | `Never ] ->
    ?shell:string ->
    Ketrew_edsl.Program.t -> [> `Long_running of string * string ]
  val yarn_application :
    ?host:Ketrew_host.t ->
    ?daemonize_using:[ `Nohup_setsid | `Python_daemon ] ->
    ?daemon_start_timeout:float ->
    Ketrew_program.t -> [> `Long_running of string * string ]
  val yarn_distributed_shell :
    ?host:Ketrew_host.t ->
    ?daemonize_using:[ `Nohup_setsid | `Python_daemon ] ->
    ?daemon_start_timeout:float ->
    ?hadoop_bin:string ->
    ?distributed_shell_shell_jar:string ->
    container_memory:[ `GB of int | `MB of int | `Raw of string ] ->
    timeout:[ `Raw of string | `Seconds of int ] ->
    application_name:string ->
    Ketrew_program.t -> [> `Long_running of string * string ]
  val to_display_string :
    ?ansi_colors:bool ->
    ?indentation:int -> Ketrew_edsl.user_target -> string
end