From 6cdb4e0626623d621b03e26f4bbf56f2afc19d51 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Todor=20Kondi=C4=87?= <kontrapunkt@uclmail.net>
Date: Fri, 24 Feb 2023 12:53:48 +0100
Subject: [PATCH] docker, .gitlab-ci: Reorganise building of images.

---
 .gitlab-ci.yml           | 147 +++++++++++++++++++++++++--------------
 Dockerfile               |   4 +-
 docker/base/Dockerfile   |  25 +++----
 docker/isb401/Dockerfile |  34 +++++----
 docker/ssuser/Dockerfile |  10 +++
 5 files changed, 133 insertions(+), 87 deletions(-)
 create mode 100644 docker/ssuser/Dockerfile

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f936b16..addaab9 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -25,79 +25,124 @@ services:
   - docker:23.0.1-dind
 
 stages:
+  - dep_images
   - build
   - test
   - release
 
 variables:
   DOCKER_TLS_CERTDIR: "/certs"
+  DEP_ROOT: $CI_REGISTRY_IMAGE/dep
+  BASE_IMAGE: $CI_REGISTRY_IMAGE/dep/base:latest
+  SSUSER_IMAGE: $CI_REGISTRY_IMAGE/dep/ssuser:latest
   CONTAINER_TEST_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
   CONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
   CONTAINER_TEST_ISB401_IMAGE: $CI_REGISTRY_IMAGE:isb401_$CI_COMMIT_REF_SLUG
   CONTAINER_RELEASE_ISB401_IMAGE: $CI_REGISTRY_IMAGE:isb401_$CI_COMMIT_TAG
 
-build:
-  tags:
-    - docker
-    - $RUNNER_TAG
-  stage: build
-  before_script:
-    # This did not work, so mounting authentication JSON on the side
-    # of the runner.
-    # - echo "$CI_REGISTRY_PASSWORD" | docker login "$CI_REGISTRY" --username "$CI_REGISTRY_USER" --password-stdin
-  script:
-    - docker build --pull -t $CONTAINER_TEST_IMAGE .
-    - docker push $CONTAINER_TEST_IMAGE
 
-build-isb401:
+base-image:
   tags:
     - docker
     - $RUNNER_TAG
-  stage: build
+  stage: dep_images
+  rules:
+    # - changes:
+    #     - docker/base/Dockerfile
   script:
-    - cp docker/isb401/Dockerfile .
-    - docker build --pull -t $CONTAINER_TEST_ISB401_IMAGE .
-    - docker push $CONTAINER_TEST_ISB401_IMAGE
+    - cd docker/base
+    - docker build --pull -t $BASE_IMAGE .
+    - docker push $BASE_IMAGE
 
-test:
+ssuser-image:
   tags:
     - docker
     - $RUNNER_TAG
-  stage: test
+  stage: dep_images
+  needs:
+    - job: base-image
+      optional: true
+  rules:
+    # - changes:
+    #     - docker/ssuser/Dockerfile
   script:
-    - docker pull $CONTAINER_TEST_IMAGE
-    - docker run $CONTAINER_TEST_IMAGE test
+    - cd docker/ssuser
+    - docker build --pull -t $SSUSER_IMAGE .
+    - docker push $SSUSER_IMAGE
 
-test-isb401:
-  tags:
-    - docker
-    - $RUNNER_TAG
-  stage: test
-  script:
-    - docker pull $CONTAINER_TEST_ISB401_IMAGE
-    - docker run $CONTAINER_TEST_ISB401_IMAGE test
 
-release-image:
-  tags:
-    - docker
-    - $RUNNER_TAG
-  stage: release
-  script:
-    - docker pull $CONTAINER_TEST_IMAGE
-    - docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE
-    - docker push $CONTAINER_RELEASE_IMAGE
-  rules:
-    - if: $CI_COMMIT_TAG =~ /^v[0-9]+.[0-9]+.[0-9]+/
 
-release-isb401:
-  tags:
-    - docker
-    - $RUNNER_TAG
-  stage: release
-  script:
-    - docker pull $CONTAINER_TEST_ISB401_IMAGE
-    - docker tag $CONTAINER_TEST_ISB401_IMAGE $CONTAINER_RELEASE_ISB401_IMAGE
-    - docker push $CONTAINER_RELEASE_ISB401_IMAGE
-  rules:
-    - if: $CI_COMMIT_TAG =~ /^v[0-9]+.[0-9]+.[0-9]+/
+# build:
+#   tags:
+#     - docker
+#     - $RUNNER_TAG
+#   stage: build
+#   before_script:
+#     # This did not work, so mounting authentication JSON on the side
+#     # of the runner.
+#     # - echo "$CI_REGISTRY_PASSWORD" | docker login "$CI_REGISTRY" --username "$CI_REGISTRY_USER" --password-stdin
+#   script:
+#     - docker build --pull -t $CONTAINER_TEST_IMAGE .
+#     - docker push $CONTAINER_TEST_IMAGE
+#   only:
+#     - devel
+#     - master
+
+# build-isb401:
+#   tags:
+#     - docker
+#     - $RUNNER_TAG
+#   stage: build
+#   script:
+#     - cp docker/isb401/Dockerfile .
+#     - docker build --pull -t $CONTAINER_TEST_ISB401_IMAGE .
+#     - docker push $CONTAINER_TEST_ISB401_IMAGE
+#   only:
+#     - devel
+#     - master
+
+# test:
+#   tags:
+#     - docker
+#     - $RUNNER_TAG
+#   stage: test
+#   script:
+#     - docker pull $CONTAINER_TEST_IMAGE
+#     - docker run $CONTAINER_TEST_IMAGE test
+
+# test-isb401:
+#   tags:
+#     - docker
+#     - $RUNNER_TAG
+#   stage: test
+#   script:
+#     - docker pull $CONTAINER_TEST_ISB401_IMAGE
+#     - docker run $CONTAINER_TEST_ISB401_IMAGE test
+#   only:
+#     - devel
+#     - master
+
+# release-image:
+#   tags:
+#     - docker
+#     - $RUNNER_TAG
+#   stage: release
+#   script:
+#     - docker pull $CONTAINER_TEST_IMAGE
+#     - docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE
+#     - docker push $CONTAINER_RELEASE_IMAGE
+#   rules:
+#     - if: $CI_COMMIT_TAG =~ /^v[0-9]+.[0-9]+.[0-9]+/
+
+# release-isb401:
+#   tags:
+#     - docker
+#     - $RUNNER_TAG
+#   stage: release
+#   script:
+#     - docker pull $CONTAINER_TEST_ISB401_IMAGE
+#     - docker tag $CONTAINER_TEST_ISB401_IMAGE $CONTAINER_RELEASE_ISB401_IMAGE
+#     - docker push $CONTAINER_RELEASE_ISB401_IMAGE
+#   rules:
+#     - if: $CI_COMMIT_TAG =~ /^v[0-9]+.[0-9]+.[0-9]+/
 
diff --git a/Dockerfile b/Dockerfile
index 2c27267..18b4f02 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,8 +1,8 @@
-FROM gitlab.lcsb.uni.lu:4567/eci/shinyscreen:base
+FROM gitlab.lcsb.uni.lu:4567/eci/shinyscreen:ssuser
 MAINTAINER todor.kondic@uni.lu
 EXPOSE 5432
+ENV SS_MF_DB="PubChemLite_exposomics.csv"
 ENV SS_CPU 2
-ENV SS_MF_JAR /usr/local/bin/MetFragCommandLine.jar
 ADD . shinyscreen/
 RUN R CMD build shinyscreen
 RUN R CMD INSTALL shinyscreen
diff --git a/docker/base/Dockerfile b/docker/base/Dockerfile
index cf8a4d6..80f24b8 100644
--- a/docker/base/Dockerfile
+++ b/docker/base/Dockerfile
@@ -1,11 +1,11 @@
 FROM ubuntu:jammy-20230126
 MAINTAINER kontrapunkt@uclmail.net
 ENV SS_MF_DB_DIR="/usr/local/metfrag_db"
-ENV SS_MF_DB="PubChemLite_exposomics.csv"
+ENV SS_MF_JAR /usr/local/bin/MetFragCommandLine.jar
 
 RUN apt-get update
 RUN apt-get install -y --no-install-recommends apt-utils r-base r-recommended g++ gfortran
-RUN apt-get install -y --no-install-recommends curl libxml2-dev libssl-dev libssh2-1-dev zlib1g-dev
+RUN apt-get install -y --no-install-recommends curl wget libxml2-dev libssl-dev libssh2-1-dev zlib1g-dev
 RUN apt-get install -y --no-install-recommends xdg-utils automake autoconf gcc make pkg-config
 RUN apt-get install -y --no-install-recommends net-tools git-all default-jre-headless zlib1g zlib1g-dev 
 RUN apt-get install -y --no-install-recommends libnetcdf* openbabel libhdf5-1* libhdf5-hl-1*
@@ -21,26 +21,19 @@ RUN apt-get install -y --no-install-recommends libpng16-16 libpng-tools libpng-d
 RUN rm -rf /var/lib/apt/lists/*
 RUN rm -rf /tmp/*
 
-
-RUN R -e 'install.packages("enviPat", dependencies=TRUE)'
-RUN R -e 'BiocManager::install(c("Rhdf5lib","mzR","MSnbase","RMassBank"),update=F)'
-RUN R -e 'devtools::install_git("https://github.com/CDK-R/rinchi", dependencies=F)'
-RUN R -e 'devtools::install_git("https://github.com/schymane/RChemMass", dependencies=F)'
-#R -e 'devtools::install_git("https://github.com/CDK-R/rcdklibs", dependencies=F)'
-#R -e 'devtools::install_git("https://github.com/CDK-R/cdkr", subdir="rcdk", dependencies=F)'
-
 # Add MetFrag.
-RUN curl -LJO https://github.com/ipb-halle/MetFragRelaunched/releases/download/v.2.5.0/MetFragCommandLine-2.5.0.jar
+RUN curl -LJO https://gitlab.lcsb.uni.lu/eci/shinyscreen_needs/-/raw/master/MetFragCommandLine-2.5.0.jar
+# RUN curl -LJO https://github.com/ipb-halle/MetFragRelaunched/releases/download/v.2.5.0/MetFragCommandLine-2.5.0.jar
 RUN mv MetFragCommandLine-2.5.0.jar /usr/local/bin/MetFragCommandLine.jar
 RUN chmod 0555 /usr/local/bin/MetFragCommandLine.jar
 
 # Add PCL.
-RUN curl -LJO https://zenodo.org/record/7576412/files/PubChemLite_exposomics_20230127.csv?download=1
+RUN curl -LJO https://zenodo.org/record/7576412/files/PubChemLite_exposomics_20230127.csv
 RUN mkdir /usr/local/metfrag_db
 RUN chmod 0555 /usr/local/metfrag_db
 RUN mv PubChemLite_exposomics_20230127.csv /usr/local/metfrag_db/PubChemLite_exposomics.csv 
 
-
-
-
-
+RUN MAKEFILE=j R -e 'install.packages("enviPat", dependencies=TRUE)'
+RUN MAKEFILE=j R -e 'BiocManager::install(c("Rhdf5lib","mzR","MSnbase","RMassBank"),update=F)'
+RUN MAKEFILE=j R -e 'devtools::install_git("https://github.com/CDK-R/rinchi", dependencies=F)'
+RUN MAKEFILE=j R -e 'devtools::install_git("https://github.com/schymane/RChemMass", dependencies=F)'
diff --git a/docker/isb401/Dockerfile b/docker/isb401/Dockerfile
index 8a815d2..3945783 100644
--- a/docker/isb401/Dockerfile
+++ b/docker/isb401/Dockerfile
@@ -1,23 +1,8 @@
 FROM gitlab.lcsb.uni.lu:4567/eci/shinyscreen:base
 MAINTAINER todor.kondic@uni.lu
-EXPOSE 5432
-ENV SS_CPU 2
-ENV SS_MF_JAR /usr/local/bin/MetFragCommandLine.jar
-ADD . shinyscreen/
-RUN R CMD build shinyscreen
-RUN R CMD INSTALL shinyscreen
-RUN useradd -ms /bin/bash ssuser
-RUN cp shinyscreen/runme /home/ssuser/runme
-RUN cp -R shinyscreen /home/ssuser
-RUN chmod u+x /home/ssuser/runme
-RUN chown ssuser /home/ssuser/runme
-RUN chown -R ssuser /home/ssuser/shinyscreen
-USER ssuser
-WORKDIR /home/ssuser
-RUN mkdir top_data_dir
-RUN mkdir projects
-RUN mkdir metfrag_dbs
-RUN mkdir users
+
+
+
 RUN mkdir -p top_data_dir/isb401
 RUN mkdir -p projects/isb401
 WORKDIR isb401/top_data_dir/isb401
@@ -30,3 +15,16 @@ RUN tar -xf isb401-master.tar.gz
 RUN cp isb401-master/shinyscreen_files/*.csv /home/ssuser/projects/isb401
 RUN R -e 'library(shinyscreen);setwd("~");init(top_data_dir="~/top_data_dir",projects="~/projects",users_dir="~/users",metfrag_db_dir=Sys.getenv("SS_MF_DB_DIR"),metfrag_jar="/usr/local/bin/MetFragCommandLine.jar",save=T,merge=F)'
 ENTRYPOINT ["/home/ssuser/runme"]
+
+
+ENV SS_MF_JAR /usr/local/bin/MetFragCommandLine.jar
+EXPOSE 5432
+ENV SS_CPU 2
+RUN cp shinyscreen/runme /home/ssuser/runme
+RUN cp -R shinyscreen /home/ssuser
+RUN chmod u+x /home/ssuser/runme
+RUN chown ssuser /home/ssuser/runme
+RUN chown -R ssuser /home/ssuser/shinyscreen
+ADD . shinyscreen/
+RUN R CMD build shinyscreen
+RUN R CMD INSTALL shinyscreen
diff --git a/docker/ssuser/Dockerfile b/docker/ssuser/Dockerfile
new file mode 100644
index 0000000..5350c25
--- /dev/null
+++ b/docker/ssuser/Dockerfile
@@ -0,0 +1,10 @@
+FROM gitlab.lcsb.uni.lu:4567/eci/shinyscreen:base
+MAINTAINER todor.kondic@uni.lu
+
+RUN useradd -ms /bin/bash ssuser
+USER ssuser
+WORKDIR /home/ssuser
+RUN mkdir top_data_dir
+RUN mkdir projects
+RUN mkdir metfrag_dbs
+RUN mkdir users
-- 
GitLab