: sig
open Biokepi_run_environment
val biokepi_conda_config : string
val configured :
run_program: Machine.Make_fun.t ->
host: Common.KEDSL.Host.t ->
install_path: string ->
unit ->
< is_done : Common.KEDSL.Condition.t option > Common.KEDSL.workflow_node
val init_biokepi_env : install_path:string -> Common.KEDSL.Program.t
end
= struct
open Biokepi_run_environment
open Common
let rm_path = Workflow_utilities.Remove.path_on_host
let dir ~install_path = install_path // "conda_dir"
let commands ~install_path com = dir ~install_path // "bin" // com
let bin = commands "conda"
let activate = commands "activate"
let com ~install_path fmt =
Printf.sprintf ("%s " ^^ fmt) (bin ~install_path)
let installed ~(run_program : Machine.Make_fun.t) ~host ~install_path =
let open KEDSL in
let url =
"https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh" in
let conda_exec = single_file ~host (bin ~install_path) in
let install_dir = dir ~install_path in
workflow_node conda_exec
~name:"Install conda"
~make:(
run_program
~requirements:[
`Internet_access; `Self_identification ["conda"; "installation"]
]
Program.(
exec ["mkdir"; "-p"; install_path]
&& exec ["cd"; install_path]
&& Workflow_utilities.Download.wget_program url
&& shf "bash Miniconda3-latest-Linux-x86_64.sh -b -p %s" install_dir))
let config = "biokepi_conda_env"
let env_name = "biokepi"
let biokepi_conda_config =
{conda|# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: linux-64
@EXPLICIT
https://repo.continuum.io/pkgs/free/linux-64/anaconda-client-1.2.2-py27_0.tar.bz2
https://conda.anaconda.org/bioconda/linux-64/bcftools-1.3-0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/biopython-1.66-np110py27_0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/cairo-1.12.18-6.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/clyent-1.2.0-py27_0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/cycler-0.10.0-py27_0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/distribute-0.6.45-py27_1.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/fontconfig-2.11.1-5.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/freetype-2.5.5-0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/hdf5-1.8.15.1-2.tar.bz2
https://conda.anaconda.org/bioconda/linux-64/htslib-1.3-0.tar.bz2
https://conda.anaconda.org/r/linux-64/libgcc-4.8.5-1.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/libpng-1.6.17-0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/libxml2-2.9.2-0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/matplotlib-1.5.1-np110py27_0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/mkl-11.3.1-0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/ncurses-5.9-0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/numexpr-2.4.6-np110py27_1.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/numpy-1.10.4-py27_1.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/openssl-1.0.2g-0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/pandas-0.17.1-np110py27_0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/pip-8.0.3-py27_0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/pixman-0.32.6-0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/pycairo-1.10.0-py27_0.tar.bz2
https://conda.anaconda.org/trung/linux-64/pyinstaller-3.1-py27_0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/pyparsing-2.0.3-py27_0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/pyqt-4.11.4-py27_1.tar.bz2
https://conda.anaconda.org/bioconda/linux-64/pysam-0.9.0-py27_2.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/pytables-3.2.2-np110py27_0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/python-2.7.11-0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/python-dateutil-2.4.2-py27_0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/pytz-2015.7-py27_0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/pyyaml-3.11-py27_1.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/qt-4.8.7-1.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/requests-2.9.1-py27_0.tar.bz2
https://conda.anaconda.org/bioconda/linux-64/samtools-1.3-1.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/setuptools-20.1.1-py27_0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/sip-4.16.9-py27_0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/six-1.10.0-py27_0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/sqlite-3.9.2-0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/tk-8.5.18-0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/wheel-0.29.0-py27_0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/yaml-0.1.6-0.tar.bz2
https://repo.continuum.io/pkgs/free/linux-64/zlib-1.2.8-0.tar.bz2|conda}
let cfg_exists ~(run_program : Machine.Make_fun.t) ~host ~install_path =
let open KEDSL in
let file = install_path // config in
let make =
run_program
~requirements:[`Quick_run; `Self_identification ["conda"; "config-file"]]
Program.(exec ["mkdir"; "-p"; install_path]
&& shf "echo %s >> %s" (Filename.quote biokepi_conda_config) file)
in
workflow_node (single_file ~host file)
~name:("Make sure we have a biokepi conda config file: " ^ config)
~make
let configured ~(run_program : Machine.Make_fun.t) ~host ~install_path () =
let open KEDSL in
let conf =
com ~install_path "create --name %s --file %s/%s"
env_name install_path config in
let make =
run_program
~requirements:[
`Internet_access;
`Self_identification ["conda"; "configuration"];
]
Program.(
sh conf
&& shf "source %s %s" (activate ~install_path) env_name
&& chain (List.map ~f:(shf "pip install %s") [
"pyomo";
"six";
"packaging";
])
)
in
let edges = [
depends_on (installed ~run_program ~host ~install_path);
depends_on (cfg_exists ~run_program ~host ~install_path);
] in
let biokepi_env =
Command.shell ~host (com ~install_path "env list | grep %s" env_name) in
let product =
object method is_done = Some (`Command_returns (biokepi_env, 0)) end in
workflow_node product ~make ~name:"Conda is configured." ~edges
let init_biokepi_env ~install_path =
KEDSL.Program.(shf "source %s %s" (activate ~install_path) env_name)
end