type error = [ Caqti_error.call_or_retrieve | `Not_found | `File_error of Fpath.t | `Msg of string ] val pp_error : Format.formatter -> error -> unit val not_found : 'a option -> ('a, [> error ]) result Lwt.t val staging : Fpath.t -> Fpath.t val cleanup_staging : Fpath.t -> Caqti_lwt.connection -> (unit, [> `Msg of string ]) result Lwt.t val build_artifact : Uuidm.t -> Fpath.t -> Caqti_lwt.connection -> (Builder_db.file, [> error ]) result Lwt.t val build_artifact_data : Fpath.t -> Builder_db.file -> (string, [> error ]) result Lwt.t val build_artifacts : Builder_db.id -> Caqti_lwt.connection -> (Builder_db.file list, [> Caqti_error.call_or_retrieve ]) result Lwt.t val build : Uuidm.t -> Caqti_lwt.connection -> (Builder_db.id * Builder_db.Build.t, [> error ]) result Lwt.t val build_meta : Builder_db.id -> Caqti_lwt.connection -> ((Builder_db.Build.Meta.t * Builder_db.file option) option, [> Caqti_error.call_or_retrieve ]) result Lwt.t val build_hash : Cstruct.t -> Caqti_lwt.connection -> ((string * Builder_db.Build.t) option, [> Caqti_error.call_or_retrieve ]) result Lwt.t val build_exists : Uuidm.t -> Caqti_lwt.connection -> (bool, [> Caqti_error.call_or_retrieve ]) result Lwt.t val latest_build_uuid : Builder_db.id -> Caqti_lwt.connection -> (Uuidm.t, [> error ]) result Lwt.t val latest_successful_build_uuid : Builder_db.id -> Caqti_lwt.connection -> (Uuidm.t option, [> Caqti_error.call_or_retrieve ]) result Lwt.t val previous_successful_build : Builder_db.id -> Caqti_lwt.connection -> (Builder_db.Build.Meta.t option, [> Caqti_error.call_or_retrieve ]) result Lwt.t val main_binary : Builder_db.id -> Fpath.t option -> Caqti_lwt.connection -> (Builder_db.file option, [> Caqti_error.call_or_retrieve ]) result Lwt.t val job : string -> Caqti_lwt.connection -> ((Builder_db.Build.Meta.t * Builder_db.file option) list, [> error ]) result Lwt.t val job_id : string -> Caqti_lwt.connection -> (Builder_db.id option, [> Caqti_error.call_or_retrieve ]) result Lwt.t val jobs : Caqti_lwt.connection -> ((Builder_db.id * string) list, [> Caqti_error.call_or_retrieve ]) result Lwt.t val job_name : Builder_db.id -> Caqti_lwt.connection -> (string, [> Caqti_error.call_or_retrieve ]) result Lwt.t val user : string -> Caqti_lwt.connection -> ((Builder_db.id * Builder_web_auth.scrypt Builder_web_auth.user_info) option, [> Caqti_error.call_or_retrieve ]) result Lwt.t val authorized : Builder_db.id -> string -> Caqti_lwt.connection -> (unit, [> Caqti_error.call_or_retrieve | `Msg of string ]) result Lwt.t val add_build : Fpath.t -> Builder_db.id -> (Builder.script_job * Uuidm.t * (int * string) list * Ptime.t * Ptime.t * Builder.execution_result * (Fpath.t * string) list) -> Caqti_lwt.connection -> (unit, [> Caqti_error.call_or_retrieve | `Msg of string ]) result Lwt.t