# ==============================
# 预构建
FROM ubuntu:22.04 AS builder

# 预构建依赖
RUN apt-get update -qq && apt-get install -y --no-install-recommends --fix-missing\
    build-essential \
    wget \
    curl \
    # wget: 是的孩子们我需要证书
    ca-certificates \
    autoconf \
    automake \
    make \
    gcc \
    perl \
    # bedtools: 是的孩子们我找不到python
    python3 \
    python-is-python3 \
    zlib1g-dev \
    libbz2-dev \
    liblzma-dev \
    libcurl4-gnutls-dev \
    libssl-dev \
    libncurses5-dev \
    libdeflate-dev && \
    rm -rf /var/lib/apt/lists/*

# 编译 BEDTools
ENV BEDTOOLS_VERSION=2.29.2
WORKDIR /opt
RUN wget -q https://github.com/arq5x/bedtools2/releases/download/v${BEDTOOLS_VERSION}/bedtools-${BEDTOOLS_VERSION}.tar.gz && \
    tar -zxvf bedtools-${BEDTOOLS_VERSION}.tar.gz && \
    cd bedtools2 && \
    make

# 编译 Samtools
ENV SAMTOOLS_VERSION=1.11
WORKDIR /opt
RUN wget -q https://github.com/samtools/samtools/releases/download/${SAMTOOLS_VERSION}/samtools-${SAMTOOLS_VERSION}.tar.bz2 && \
    tar -xjf samtools-${SAMTOOLS_VERSION}.tar.bz2 && \
    cd samtools-${SAMTOOLS_VERSION} && \
    ./configure --prefix=/usr/local && \
    make && \
    make install

# ==============================
# 镜像
FROM ubuntu:22.04

ENV DEBIAN_FRONTEND=noninteractive
ENV ROOT_DIR=/opt

# 运行依赖
RUN apt-get update -qq && apt-get install -y --no-install-recommends \
    git \
    wget \
    curl \
    # wget: 是的孩子们我需要证书
    ca-certificates \
    unzip \
    python3 \
    python3-pip \
    # samtools 和 bedtools 的运行时依赖
    zlib1g \
    libbz2-1.0 \
    liblzma5 \
    libcurl4 \
    libssl3 \
    libncurses5 \
    libdeflate0 \
    # R 的依赖
    software-properties-common \
    dirmngr && \
    rm -rf /var/lib/apt/lists/*

# 安装R，来自上交镜像
RUN apt update -qq && \
    apt install --no-install-recommends software-properties-common dirmngr -y && \
    wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc && \
    add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/" && \
    apt install --no-install-recommends r-base -y

# 安装 ST Pipeline
ENV ST_PIPELINE_VERSION=1.7.9

# stpipeline: 是的孩子们我也干了[○･｀Д´･ ○]
# 补齐build-essential 与 python3-dev，安装完后删掉
RUN apt-get update -qq && \
    apt-get install -y --no-install-recommends build-essential python3-dev && \
    pip3 install --no-cache-dir stpipeline==${ST_PIPELINE_VERSION} && \
    apt-get purge -y --auto-remove build-essential python3-dev && \
    rm -rf /var/lib/apt/lists/*

# 复制工具
COPY --from=builder /opt/bedtools2/bin/* /usr/local/bin/
COPY --from=builder /usr/local/bin/samtools /usr/local/bin/

# 安装 SpatialTE
# ==============================
# COPY源码来自SpatialT仓库，构建镜像前先手动在Dockerfile同目录下执行git clone https://github.com/bvaldebenitom/SpatialTE.git
# ==============================
ENV SPATIALTE_VERSION=1.0
ENV SPATIALTE_DIR=${ROOT_DIR}/spatialTE-${SPATIALTE_VERSION}

WORKDIR ${SPATIALTE_DIR}

COPY ./SpatialTE/release_1.0 ${SPATIALTE_DIR}/

RUN chmod -R u+x ${SPATIALTE_DIR}/

ENV PATH="${SPATIALTE_DIR}:${PATH}"

# 默认工作目录
WORKDIR /data

# 首先在本地准备好一个文件夹，包含数据文件
# 然后通过如下命令启动容器
# docker run --rm -it -v "path/to/your/data":/data -w /data your/image/name bash