struct
module Requirement = struct
type t = [
| `Processors of int
(** A number of cores on a shared-memory setting. *) |
| `Internet_access
(** Able to access public HTTP(S) or FTP URLs. *) |
| `Memory of [
| `GB of float
(** Ask for a specific amount of memory. *) |
| `Small
(** Tell that the program does not expect HPC-like memory usage (i.e. not more than 2 GB or your usual laptop). *) |
| `Big
(** Tell that the program may ask for a lot of memory but you don't know how much precisely. *) |
]
| `Quick_run
(** Programs that run fast, with little resources. Usually, you can interpret this as "OK to run on the login node of my cluster." *) |
| `Spark of string list
(** Ask for a Spark (on-YARN) environment with
custom parameters (not in use for now,
"#WIP" ). *) |
| `Custom of string
(** Pass arbitrary data (useful for temporary extensions/experiements outside of Biokepi). *) |
| `Self_identification of string list
(** Set of names or tags for a workflow-node program to identify
itself to the Machine.t .
This is useful for quickly bypassing incorrect requirements set
in the library (please also report an issue if you need this). *) |
] [@@deriving yojson, show]
end
type t =
?name: string ->
?requirements: Requirement.t list ->
Program.t ->
KEDSL.Build_process.t
(** The type of the “run function” used across the library. *) |
(** A stream processor, for this purpose, is a program that runs on one core and does not grow in memory arbitrarily. *) |
let stream_processor requirements =
`Processors 1 :: `Memory `Small :: requirements
let quick requirements = `Quick_run :: requirements
let downloading requirements =
`Internet_access :: stream_processor requirements
let with_self_ids ?self_ids l =
match self_ids with
| Some tags -> `Self_identification tags :: l
| None -> l
let with_requirements : t -> Requirement.t list -> t = fun f l ->
fun ?name ?(requirements = []) prog ->
f ?name ~requirements:(l @ requirements) prog
end