/ Dockerfile
Dockerfile
  1  FROM julia:1.12 AS base
  2  RUN mkdir /planar \
  3      && apt-get update \
  4      && apt-get -y install sudo direnv jq git \
  5      && useradd -u 1000 -G sudo -U -m -s /bin/bash plnuser \
  6      && chown plnuser:plnuser /planar \
  7      # Allow sudoers
  8      && echo "plnuser ALL=(ALL) NOPASSWD: /bin/chown" >> /etc/sudoers
  9  WORKDIR /planar
 10  USER plnuser
 11  ARG CPU_TARGET="generic"
 12  RUN echo "cpu target is $CPU_TARGET"
 13  ENV JULIA_BIN=/usr/local/julia/bin/julia
 14  ARG JULIA_CMD="$JULIA_BIN -C $CPU_TARGET"
 15  ENV JULIA_CMD=$JULIA_CMD
 16  ENV JULIA_CPU_TARGET ${CPU_TARGET}
 17  
 18  # PLANAR ENV VARS GO HERE
 19  ENV PLANAR_LIQUIDATION_BUFFER=0.02
 20  ENV JULIA_NOPRECOMP=""
 21  ENV JULIA_PRECOMP=Remote,PaperMode,LiveMode,Fetch,Opt,Plotting
 22  CMD $JULIA_BIN -C "$JULIA_CPU_TARGET"
 23  
 24  FROM base AS python
 25  ENV JULIA_LOAD_PATH=:/planar
 26  ENV JULIA_CONDAPKG_ENV=/planar/user/.conda
 27  # avoids progressbar spam
 28  ENV CI=true
 29  COPY --chown=plnuser:plnuser ./Lang/ /planar/Lang/
 30  COPY --chown=plnuser:plnuser ./Python/*.toml /planar/Python/
 31  # Instantiate python env since CondaPkg is pulled from master
 32  ARG CACHE=1
 33  RUN $JULIA_CMD --project=/planar/Python -e "import Pkg; Pkg.instantiate()"
 34  COPY --chown=plnuser:plnuser ./Python /planar/Python
 35  RUN $JULIA_CMD --project=/planar/Python -e "using Python"
 36  
 37  FROM python AS precomp-base
 38  ARG CACHE=1
 39  ENV JULIA_NUM_THREADS=auto
 40  ENV JULIA_PROJECT=/planar/Planar
 41  USER plnuser
 42  WORKDIR /planar
 43  RUN JULIA_PROJECT= $JULIA_CMD -e "import Pkg; Pkg.add([\"DataFrames\", \"CSV\", \"ZipFile\"])"
 44  COPY --chown=plnuser:plnuser ./ /planar/
 45  RUN touch /planar/user/.envrc; mkdir /planar/.conda
 46  RUN git submodule update --init
 47  CMD $JULIA_BIN -C "$JULIA_CPU_TARGET"
 48  
 49  FROM precomp-base AS planar-precomp
 50  ARG PLANAR_BITMEX_SANDBOX_APIKEY
 51  ARG PLANAR_BITMEX_SANDBOX_SECRET
 52  ARG PLANAR_BITMEX_SANDBOX_PASSWORD
 53  ARG PLANAR_PHEMEX_SANDBOX_APIKEY
 54  ARG PLANAR_PHEMEX_SANDBOX_SECRET
 55  ARG PLANAR_PHEMEX_SANDBOX_PASSWORD
 56  ENV JULIA_PROJECT=/planar/Planar
 57  ENV CI=true
 58  RUN $JULIA_CMD -e "import Pkg; Pkg.instantiate()"
 59  RUN $JULIA_CMD -e "using Planar"
 60  RUN $JULIA_CMD -e "using Metrics"
 61  
 62  FROM planar-precomp AS planar-precomp-interactive
 63  ENV JULIA_PROJECT=/planar/PlanarInteractive
 64  RUN JULIA_PROJECT= $JULIA_CMD -e "import Pkg; Pkg.add([\"Makie\", \"WGLMakie\"])"
 65  RUN $JULIA_CMD -e "import Pkg; Pkg.instantiate()"
 66  RUN $JULIA_CMD -e "using PlanarInteractive"
 67  
 68  
 69  FROM planar-precomp AS planar-sysimage
 70  USER root
 71  RUN apt-get install -y gcc g++
 72  ENV JULIA_PROJECT=/planar/user/Load
 73  ENV CACHE=1
 74  ARG COMPILE_SCRIPT
 75  ARG NTHREADS=auto
 76  ARG PLANAR_BITMEX_SANDBOX_APIKEY
 77  ARG PLANAR_BITMEX_SANDBOX_SECRET
 78  ARG PLANAR_BITMEX_SANDBOX_PASSWORD
 79  ARG PLANAR_PHEMEX_SANDBOX_APIKEY
 80  ARG PLANAR_PHEMEX_SANDBOX_SECRET
 81  ARG PLANAR_PHEMEX_SANDBOX_PASSWORD
 82  RUN scripts/docker_compile.sh; \
 83      su plnuser -c "cd /planar; \
 84      . .envrc; \
 85      cat /tmp/compile.jl; \
 86      $JULIA_CMD -t ${NTHREADS} -e \
 87      'include(\"/tmp/compile.jl\"); compile(\"user/Load\"; cpu_target=\"$JULIA_CPU_TARGET\")'"; \
 88      rm -rf /tmp/compile.jl
 89  USER plnuser
 90  ENV JULIA_PROJECT=/planar/Planar
 91  # Resets condapkg env
 92  RUN $JULIA_CMD --sysimage "/planar/Planar.so" -e "using Planar"
 93  CMD $JULIA_CMD --sysimage "/planar/Planar.so"
 94  
 95  FROM planar-precomp-interactive AS planar-sysimage-interactive
 96  USER root
 97  ENV CI=true
 98  ENV JULIA_PROJECT=/planar/PlanarInteractive
 99  RUN apt-get install -y gcc g++
100  ARG COMPILE_SCRIPT
101  ARG NTHREADS=auto
102  ARG PLANAR_BITMEX_SANDBOX_APIKEY
103  ARG PLANAR_BITMEX_SANDBOX_SECRET
104  ARG PLANAR_BITMEX_SANDBOX_PASSWORD
105  ARG PLANAR_PHEMEX_SANDBOX_APIKEY
106  ARG PLANAR_PHEMEX_SANDBOX_SECRET
107  ARG PLANAR_PHEMEX_SANDBOX_PASSWORD
108  RUN scripts/docker_compile.sh; \
109      su plnuser -c "cd /planar; \
110      . .envrc; \
111      echo \"compiling with cpu target $JULIA_CPU_TARGET\"; \
112      cat /tmp/compile.jl; \
113      $JULIA_CMD -e \
114      'include(\"/tmp/compile.jl\"); compile(\"PlanarInteractive\"; cpu_target=\"$JULIA_CPU_TARGET\")'"; \
115      rm -rf /tmp/compile.jl
116  USER plnuser
117  RUN $JULIA_CMD --sysimage "/planar/Planar.so" -e "using PlanarInteractive"
118  CMD $JULIA_CMD --sysimage Planar.so