From aaa052ef3e06d49b3d47375bc779034323680115 Mon Sep 17 00:00:00 2001
From: Matthew Defenderfer <mdefende@uab.edu>
Date: Fri, 4 Oct 2024 13:29:29 -0500
Subject: [PATCH] initial commit

---
 .gitlab-ci.yaml | 22 ++++++++++++
 Dockerfile      | 94 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 116 insertions(+)
 create mode 100644 .gitlab-ci.yaml
 create mode 100644 Dockerfile

diff --git a/.gitlab-ci.yaml b/.gitlab-ci.yaml
new file mode 100644
index 0000000..f19b3a4
--- /dev/null
+++ b/.gitlab-ci.yaml
@@ -0,0 +1,22 @@
+default:
+  image: docker:26.0.1-dind
+
+stages:
+  - build
+
+variables:
+  PACKAGE_NAME: "alphafold"
+  DOCKER_IMAGE: "$CI_REGISTRY_IMAGE/$PACKAGE_NAME"
+  DOCKER_TLS_CERTDIR: "/certs"
+
+before_script:
+  - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
+
+push_docker_image:
+  stage: build
+  image: docker:26.0.1-dind
+  script:
+    - docker build -t $DOCKER_IMAGE:$CI_COMMIT_SHORT_SHA .
+    - docker push $DOCKER_IMAGE:$CI_COMMIT_SHORT_SHA
+  only:
+    - main  # Only run on the main branch
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..8190e05
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,94 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+ARG CUDA=11.1.1
+FROM nvidia/cuda:${CUDA}-cudnn8-runtime-ubuntu18.04
+# FROM directive resets ARGS, so we specify again (the value is retained if
+# previously set).
+ARG CUDA
+
+# Use bash to support string substitution.
+SHELL ["/bin/bash", "-o", "pipefail", "-c"]
+
+RUN apt-get update \
+    && DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
+        build-essential \
+        cmake \
+        cuda-command-line-tools-$(cut -f1,2 -d- <<< ${CUDA//./-}) \
+        git \
+        hmmer \
+        kalign \
+        tzdata \
+        wget \
+    && rm -rf /var/lib/apt/lists/* \
+    && apt-get autoremove -y \
+    && apt-get clean
+
+# Compile HHsuite from source.
+RUN git clone --branch v3.3.0 https://github.com/soedinglab/hh-suite.git /tmp/hh-suite \
+    && mkdir /tmp/hh-suite/build \
+    && pushd /tmp/hh-suite/build \
+    && cmake -DCMAKE_INSTALL_PREFIX=/opt/hhsuite .. \
+    && make -j 4 && make install \
+    && ln -s /opt/hhsuite/bin/* /usr/bin \
+    && popd \
+    && rm -rf /tmp/hh-suite
+
+# Install Miniconda package manager.
+RUN wget -q -P /tmp \
+  https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \
+    && bash /tmp/Miniconda3-latest-Linux-x86_64.sh -b -p /opt/conda \
+    && rm /tmp/Miniconda3-latest-Linux-x86_64.sh
+
+# Install conda packages.
+ENV PATH="/opt/conda/bin:$PATH"
+RUN conda install -qy conda==4.13.0 \
+    && conda install -y -c conda-forge \
+      openmm=7.5.1 \
+      cudatoolkit==${CUDA_VERSION} \
+      pdbfixer \
+      pip \
+      python=3.8 \
+      && conda clean --all --force-pkgs-dirs --yes
+
+COPY . /app/alphafold
+RUN wget -q -P /app/alphafold/alphafold/common/ \
+  https://git.scicore.unibas.ch/schwede/openstructure/-/raw/7102c63615b64735c4941278d92b554ec94415f8/modules/mol/alg/src/stereo_chemical_props.txt
+
+# Install pip packages.
+RUN pip3 install --upgrade pip --no-cache-dir \
+    && pip3 install -r /app/alphafold/requirements.txt --no-cache-dir \
+    && pip3 install --upgrade --no-cache-dir \
+      jax==0.3.25 \
+      jaxlib==0.3.25+cuda11.cudnn805 \
+      -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
+
+# Apply OpenMM patch.
+WORKDIR /opt/conda/lib/python3.8/site-packages
+RUN patch -p0 < /app/alphafold/docker/openmm.patch
+
+# Add SETUID bit to the ldconfig binary so that non-root users can run it.
+RUN chmod u+s /sbin/ldconfig.real
+
+# We need to run `ldconfig` first to ensure GPUs are visible, due to some quirk
+# with Debian. See https://github.com/NVIDIA/nvidia-docker/issues/1399 for
+# details.
+# ENTRYPOINT does not support easily running multiple commands, so instead we
+# write a shell script to wrap them up.
+WORKDIR /app/alphafold
+RUN echo $'#!/bin/bash\n\
+ldconfig\n\
+python /app/alphafold/run_alphafold.py "$@"' > /app/run_alphafold.sh \
+  && chmod +x /app/run_alphafold.sh
+ENTRYPOINT ["/app/run_alphafold.sh"]
\ No newline at end of file
-- 
GitLab