sig
  module Text :
    sig
      type flavour = [ `Asciidoc | `Markdown ]
      val flavour_of_fpath : Fpath.t -> Topkg_care.Text.flavour option
      val head :
        ?flavour:Topkg_care.Text.flavour ->
        string -> (string * string) option
      val header_title : ?flavour:Topkg_care.Text.flavour -> string -> string
      val change_log_last_entry :
        ?flavour:Topkg_care.Text.flavour ->
        string -> (string * (string * string)) option
      val change_log_file_last_entry :
        Fpath.t ->
        (string * (string * string), Bos_setup.R.msg) Bos_setup.result
      val split_uri :
        ?rel:bool -> string -> (string * string * string) option
      val edit_file : Fpath.t -> (int, Bos_setup.R.msg) Bos_setup.result
      val find_pager :
        don't:bool ->
        (Bos_setup.Cmd.t option, Bos_setup.R.msg) Bos_setup.result
    end
  module Pp :
    sig
      val name : string Bos_setup.Fmt.t
      val version : string Bos_setup.Fmt.t
      val commit : string Bos_setup.Fmt.t
      val dirty : unit Bos_setup.Fmt.t
      val path : Fpath.t Bos_setup.Fmt.t
      val status : [ `Fail | `Ok ] Bos_setup.Fmt.t
    end
  module Opam :
    sig
      val cmd : Bos_setup.Cmd.t
      val ensure_publish : unit -> (unit, Bos_setup.R.msg) Bos_setup.result
      val submit :
        ?msg:string ->
        opam_file:Fpath.t -> (unit, Bos_setup.R.msg) Bos_setup.result
      val ocaml_base_packages : Bos_setup.String.set
      module File :
        sig
          val field_names : Bos_setup.String.set
          val fields :
            Fpath.t ->
            (string list Bos_setup.String.map, Bos_setup.R.msg)
            Bos_setup.result
          val deps :
            ?opts:bool ->
            string list Bos_setup.String.map -> Bos_setup.String.set
        end
      module Descr :
        sig
          type t = string * string
          val of_string :
            string ->
            (Topkg_care.Opam.Descr.t, Bos_setup.R.msg) Bos_setup.result
          val to_string : Topkg_care.Opam.Descr.t -> string
          val to_opam_fields : Topkg_care.Opam.Descr.t -> string
          val of_readme :
            ?flavour:Topkg_care.Text.flavour ->
            string ->
            (Topkg_care.Opam.Descr.t, Bos_setup.R.msg) Bos_setup.result
          val of_readme_file :
            Fpath.t ->
            (Topkg_care.Opam.Descr.t, Bos_setup.R.msg) Bos_setup.result
        end
      module Url :
        sig
          type t
          val v : uri:string -> checksum:string -> Topkg_care.Opam.Url.t
          val with_distrib_file :
            uri:string ->
            Fpath.t ->
            (Topkg_care.Opam.Url.t, Bos_setup.R.msg) Bos_setup.result
          val to_opam_section : Topkg_care.Opam.Url.t -> string
        end
    end
  module OCamlbuild :
    sig
      val cmd : Bos_setup.Cmd.t
      val package_tags :
        ?roots:bool ->
        Fpath.t -> (Bos_setup.String.set, Bos_setup.R.msg) Bos_setup.result
    end
  module OCamlfind :
    sig
      val cmd : Bos_setup.Cmd.t
      val base_packages : Bos_setup.String.set
    end
  module Archive :
    sig
      val tar :
        Fpath.t ->
        exclude_paths:Fpath.set ->
        root:Fpath.t ->
        mtime:int -> (string, Bos_setup.R.msg) Bos_setup.result
      val ensure_bzip2 : unit -> (unit, Bos_setup.R.msg) Bos_setup.result
      val bzip2 :
        string -> dst:Fpath.t -> (unit, Bos_setup.R.msg) Bos_setup.result
      val ensure_tar : unit -> (unit, Bos_setup.R.msg) Bos_setup.result
      val untbz :
        ?clean:bool -> Fpath.t -> (Fpath.t, Bos_setup.R.msg) Bos_setup.result
    end
  module Pkg :
    sig
      type t
      val v :
        ?name:string ->
        ?version:string ->
        ?delegate:Bos_setup.Cmd.t ->
        ?build_dir:Fpath.t ->
        ?opam:Fpath.t ->
        ?opam_descr:Fpath.t ->
        ?readme:Fpath.t ->
        ?change_log:Fpath.t ->
        ?license:Fpath.t ->
        ?distrib_uri:string ->
        ?distrib_file:Fpath.t ->
        ?publish_msg:string ->
        ?publish_artefacts:[ `Alt of string | `Distrib | `Doc ] list ->
        Fpath.t -> Topkg_care.Pkg.t
      val pkg_file : Topkg_care.Pkg.t -> Fpath.t
      val name :
        Topkg_care.Pkg.t -> (string, Bos_setup.R.msg) Bos_setup.result
      val version :
        Topkg_care.Pkg.t -> (string, Bos_setup.R.msg) Bos_setup.result
      val delegate :
        Topkg_care.Pkg.t ->
        (Bos_setup.Cmd.t, Bos_setup.R.msg) Bos_setup.result
      val build_dir :
        Topkg_care.Pkg.t -> (Fpath.t, Bos_setup.R.msg) Bos_setup.result
      val opam :
        Topkg_care.Pkg.t -> (Fpath.t, Bos_setup.R.msg) Bos_setup.result
      val opam_descr :
        Topkg_care.Pkg.t ->
        (Topkg_care.Opam.Descr.t * bool, Bos_setup.R.msg) Bos_setup.result
      val opam_field :
        Topkg_care.Pkg.t ->
        string -> (string list option, Bos_setup.R.msg) Bos_setup.result
      val opam_fields :
        Topkg_care.Pkg.t ->
        (string list Bos_setup.String.map, Bos_setup.R.msg) Bos_setup.result
      val readmes :
        Topkg_care.Pkg.t -> (Fpath.t list, Bos_setup.R.msg) Bos_setup.result
      val readme :
        Topkg_care.Pkg.t -> (Fpath.t, Bos_setup.R.msg) Bos_setup.result
      val change_logs :
        Topkg_care.Pkg.t -> (Fpath.t list, Bos_setup.R.msg) Bos_setup.result
      val change_log :
        Topkg_care.Pkg.t -> (Fpath.t, Bos_setup.R.msg) Bos_setup.result
      val licenses :
        Topkg_care.Pkg.t -> (Fpath.t list, Bos_setup.R.msg) Bos_setup.result
      val distrib_uri :
        ?raw:bool ->
        Topkg_care.Pkg.t -> (string, Bos_setup.R.msg) Bos_setup.result
      val distrib_file :
        Topkg_care.Pkg.t -> (Fpath.t, Bos_setup.R.msg) Bos_setup.result
      val publish_msg :
        Topkg_care.Pkg.t -> (string, Bos_setup.R.msg) Bos_setup.result
      val test :
        Topkg_care.Pkg.t ->
        dir:Fpath.t ->
        args:Bos_setup.Cmd.t ->
        out:(Bos_setup.OS.Cmd.run_out ->
             ('a, Bos_setup.R.msg) Bos_setup.result) ->
        ('a, Bos_setup.R.msg) Bos_setup.result
      val build :
        Topkg_care.Pkg.t ->
        dir:Fpath.t ->
        args:Bos_setup.Cmd.t ->
        out:(Bos_setup.OS.Cmd.run_out ->
             ('a, Bos_setup.R.msg) Bos_setup.result) ->
        ('a, Bos_setup.R.msg) Bos_setup.result
      val clean :
        Topkg_care.Pkg.t ->
        dir:Fpath.t ->
        args:Bos_setup.Cmd.t ->
        out:(Bos_setup.OS.Cmd.run_out ->
             ('a, Bos_setup.R.msg) Bos_setup.result) ->
        ('a, Bos_setup.R.msg) Bos_setup.result
      val distrib_archive :
        Topkg_care.Pkg.t ->
        keep_dir:bool -> (Fpath.t, Bos_setup.R.msg) Bos_setup.result
      val distrib_filename :
        ?opam:bool ->
        Topkg_care.Pkg.t -> (Fpath.t, Bos_setup.R.msg) Bos_setup.result
      val publish_artefacts :
        Topkg_care.Pkg.t ->
        ([ `Alt of string | `Distrib | `Doc ] list, Bos_setup.R.msg)
        Bos_setup.result
      type lint = [ `Custom | `Deps | `Meta | `Opam | `Std_files ]
      val lint_all : Topkg_care.Pkg.lint list
      val lint :
        ?ignore_pkg:bool ->
        Topkg_care.Pkg.t ->
        dir:Fpath.t ->
        Topkg_care.Pkg.lint list -> (int, Bos_setup.R.msg) Bos_setup.result
    end
  module Delegate :
    sig
      val publish_distrib :
        Topkg_care.Pkg.t ->
        msg:string ->
        archive:Fpath.t -> (unit, Bos_setup.R.msg) Result.result
      val publish_doc :
        Topkg_care.Pkg.t ->
        msg:string -> docdir:Fpath.t -> (unit, Bos_setup.R.msg) Result.result
      val publish_alt :
        Topkg_care.Pkg.t ->
        kind:string ->
        msg:string ->
        archive:Fpath.t -> (unit, Bos_setup.R.msg) Result.result
      val publish_in_git_branch :
        remote:string ->
        branch:string ->
        name:string ->
        version:string ->
        docdir:Fpath.t ->
        dir:Fpath.t -> (unit, Bos_setup.R.msg) Bos_setup.result
      val issue_list :
        Topkg_care.Pkg.t -> (unit, Bos_setup.R.msg) Bos_setup.result
      val issue_show :
        Topkg_care.Pkg.t ->
        id:string -> (unit, Bos_setup.R.msg) Bos_setup.result
      val issue_open :
        Topkg_care.Pkg.t ->
        title:string ->
        body:string -> (unit, Bos_setup.R.msg) Bos_setup.result
      val issue_close :
        Topkg_care.Pkg.t ->
        id:string -> msg:string -> (unit, Bos_setup.R.msg) Bos_setup.result
    end
end