/ 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