FROM gitlab.obspm.fr:4567/roc/docker-cdf:2026.10.01

## Get user/group ID/name
# (Default argument values are defined in docker-compose.yml and user argument values in .env)
ARG USER_ID
ARG GROUP_ID
ARG USER_NAME
ARG GROUP_NAME
ARG DATAPOOL_BRANCH

## Create user account from user/group input arguments
RUN if [ ${USER_ID:-0} -ne 0 ] && [ ${GROUP_ID:-0} -ne 0 ]; then groupadd -g ${GROUP_ID} ${GROUP_NAME} && useradd ${USER_NAME} -u ${USER_ID} -g ${GROUP_NAME} ; fi

## Install DINGO source files
RUN mkdir /punk
COPY . /punk/

## Install pipeline source files
RUN mkdir /pipeline
WORKDIR /pipeline
RUN git clone -b develop  https://rocuser:rocnroll@gitlab.obspm.fr/ROC/Pipelines/RODP.git /pipeline/

## Make a symlink of CDF lib in pipeline lib
RUN mkdir -p /pipeline/lib/cdf
RUN ln -s /usr/local/cdf/current /pipeline/lib/cdf/current

## Create pipeline folders (if they don't exist already)
RUN mkdir -p /pipeline/data ; exit 0
RUN mkdir -p /pipeline/input ; exit 0
RUN mkdir -p /pipeline/output ; exit 0
RUN mkdir -p /pipeline/logs ; exit 0
RUN mkdir -p /pipeline/.trash ; exit 0

## clone the master CDF repository
# (Default argument values are defined in docker-compose.yml and user argument values in .env)
RUN git clone -b ${DATAPOOL_BRANCH} https://rocuser:rocnroll@gitlab.obspm.fr/ROC/DataPool /pipeline/lib/data_pool

## Use correct logger.json file for Docker
RUN cp /pipeline/logger.docker.json /pipeline/logger.json

## Additional commands to setup spacepy and astropy modules correctly
# (Required by spacepy ... )
#ARG SPACEPY=/pipeline/lib/spacepy
#ARG SPACEPY_DATA=/usr/local/lib/python3.8/site-packages/spacepy/data
#RUN if [ ${USER_ID:-0} -ne 0 ] && [ ${GROUP_ID:-0} -ne 0 ]; then export SPACEPY=/home/${USER_NAME}/.spacepy ; else export SPACEPY=/root/.spacepy ; fi && mkdir -p ${SPACEPY} && cp -r $SPACEPY_DATA $SPACEPY/. && chown -R ${USER_ID}:${GROUP_ID} ${SPACEPY}
#RUN mkdir -p $SPACEPY/.spacepy && touch $SPACEPY/.spacepy/spacepy.rc && cp -r $SPACEPY_DATA $SPACEPY/. && chmod -R 2777 $SPACEPY
#RUN mkdir -p $SPACEPY/.spacepy && echo "[spacepy]" > $SPACEPY/.spacepy/spacepy.rc && cp -r $SPACEPY_DATA $SPACEPY/.spacepy/.  && chmod -R 2777 $SPACEPY/.spacepy

## Make sure that pipeline/ folder belongs to user
RUN chown -R ${USER_ID:-0}:${GROUP_ID:-0} /pipeline

## Install the pipeline (RODP) with uv, like the RODP image
RUN pip install --no-cache-dir -U pip && pip install --no-cache-dir -U uv

# The dependencies are installed from the uv.lock of RODP in a virtual
# environment, built with the Python of the image (which comes with the CDF
# library), and put first in the PATH, so that "python manage.py ..." runs
# the pipeline with it
ENV UV_PROJECT_ENVIRONMENT=/opt/venv \
    UV_PYTHON=/usr/local/bin/python \
    UV_PYTHON_DOWNLOADS=never \
    UV_COMPILE_BYTECODE=1 \
    UV_LINK_MODE=copy
ENV VIRTUAL_ENV=/opt/venv \
    PATH=/opt/venv/bin:$PATH
RUN uv sync --locked --no-cache

## Use repository version of punk
RUN uv pip install --no-cache -e /punk

# (Required by astropy ... )
RUN if [ ${USER_ID:-0} -ne 0 ] && [ ${GROUP_ID:-0} -ne 0 ]; then export ASTROPY=/home/${USER_NAME}/.astropy ; else export ASTROPY=/root/.astropy ; fi && mkdir -p ${ASTROPY} && chown -R ${USER_ID}:${GROUP_ID} ${ASTROPY}

## Use correct settings.py file for testing Punk
RUN cp /punk/docker/pipeline/settings.py /pipeline/settings.py

## Define user as default
USER ${USER_NAME}
