From 79ff7e5801433d06cf1acd0eed4571daf84d706c Mon Sep 17 00:00:00 2001
From: Eleni Mathioulaki <emathioulaki@athenarc.gr>
Date: Fri, 26 Jul 2024 15:02:26 +0200
Subject: [PATCH] feat: move deployment script from image into k8s job

---
 .gitlab-ci.yml |  2 +-
 create_job.sh  | 71 ++++++++++++++++++++++++++++++++++++--------------
 2 files changed, 53 insertions(+), 20 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 343a0d6d..0251ff92 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -18,7 +18,7 @@ variables:
     - oc project $OC_PROJECT
     # create job description file
     - chmod a+x create_job.sh
-    - ./create_job.sh $CI_PIPELINE_ID $BUILD_ENV_DOCKER_IMAGE update $INSTALLATION_ROOT $SPACK_VERSION $SPACK_ENV $CI_COMMIT_BRANCH $RELEASE_NAME $LAB_KERNEL_ROOT
+    - ./create_job.sh $CI_PIPELINE_ID $BUILD_ENV_DOCKER_IMAGE $INSTALLATION_ROOT $SPACK_VERSION $SPACK_ENV $CI_COMMIT_BRANCH $RELEASE_NAME $LAB_KERNEL_ROOT
     - cat simplejob.yml
     # start the deploy job
     - oc create -f simplejob.yml
diff --git a/create_job.sh b/create_job.sh
index dffe9131..97685158 100644
--- a/create_job.sh
+++ b/create_job.sh
@@ -2,20 +2,19 @@
 
 # ===========================================================================================================
 # title         : create_job.sh
-# usage         : ./create_job.sh $OC_JOB_ID $BUILD_ENV_DOCKER_IMAGE $OP $INSTALLATION_ROOT $SPACK_VERSION
+# usage         : ./create_job.sh $OC_JOB_ID $BUILD_ENV_DOCKER_IMAGE $INSTALLATION_ROOT $SPACK_VERSION
 #                 $SPACK_ENV $BRANCH $RELEASE_NAME $LAB_KERNEL_ROOT
 # description   : creates OKD job yaml file that builds/updates spack environment and creates Lab kernel
 # ===========================================================================================================
 
 OC_JOB_ID=$1
 BUILD_ENV_DOCKER_IMAGE=$2
-OP=$3
-INSTALLATION_ROOT=$4
-SPACK_VERSION=$5
-SPACK_ENV=$6
-BRANCH=$7
-RELEASE_NAME=$8
-LAB_KERNEL_ROOT=$9
+INSTALLATION_ROOT=$3
+SPACK_VERSION=$4
+EBRAINS_SPACK_ENV=$5
+BRANCH=$6
+RELEASE_NAME=$7
+LAB_KERNEL_ROOT=$8
 
 cat <<EOT >> simplejob.yml
 apiVersion: batch/v1
@@ -37,20 +36,54 @@ spec:
         volumeMounts:
           - name: sharedbin
             mountPath: /srv
-        command: ["/usr/local/bin/deploy-build-env.sh", "$OP", "$INSTALLATION_ROOT", "$SPACK_VERSION", "$SPACK_ENV", "$BRANCH", "$RELEASE_NAME", "$LAB_KERNEL_ROOT"]
+        command:
+        - /bin/bash
+        - -c
+        - |
+          # create root dir if it doesn't exist
+          mkdir -p \$INSTALLATION_ROOT
+          
+          # reset build error log dir (delete previous logs to save space)
+          rm -rf \$BUILD_LOGS_DIR
+          mkdir -p \$BUILD_LOGS_DIR
+          
+          # reset spack repository dir by cloning the selected version
+          rm -rf \$EBRAINS_REPO_PATH
+          git clone https://gitlab.ebrains.eu/technical-coordination/project-internal/devops/platform/ebrains-spack-builds.git --branch \$BRANCH \$EBRAINS_REPO_PATH
+          
+          # run installation script
+          . \$EBRAINS_REPO_PATH/install_spack_env.sh \$INSTALLATION_ROOT \$SPACK_VERSION \$EBRAINS_REPO_PATH \$EBRAINS_SPACK_ENV
+          
+          if [ \$? -eq 0 ]
+          then
+            # build process succeeded - create or update kernel on the NFS based on the current spack environment
+            chmod +x \$EBRAINS_REPO_PATH/create_JupyterLab_kernel.sh
+            \$EBRAINS_REPO_PATH/create_JupyterLab_kernel.sh \$INSTALLATION_ROOT \$EBRAINS_SPACK_ENV \$RELEASE_NAME \$LAB_KERNEL_ROOT
+            exit 0
+          else
+            # build process failed - keep spack build logs and fail the pipeline
+            cp -r /tmp/spack/spack-stage/* \$SPACK_BUILD_LOGS
+            exit
+          fi
         env:
           - name: SYSTEMNAME
             value: ebrainslab
-          - name: GITLAB_USER
-            valueFrom:
-              secretKeyRef:
-                name: spack-repo-gitlab-token
-                key: username
-          - name: GITLAB_TOKEN
-            valueFrom:
-              secretKeyRef:
-                name: spack-repo-gitlab-token
-                key: password
+          - name: INSTALLATION_ROOT
+            value: $INSTALLATION_ROOT
+          - name: SPACK_VERSION
+            value: $SPACK_VERSION
+          - name: EBRAINS_SPACK_ENV
+            value: $EBRAINS_SPACK_ENV
+          - name: BRANCH
+            value: $BRANCH
+          - name: RELEASE_NAME
+            value: $RELEASE_NAME
+          - name: LAB_KERNEL_ROOT
+            value: $LAB_KERNEL_ROOT
+          - name: BUILD_LOGS_DIR
+            value: /srv/build_logs/$EBRAINS_SPACK_ENV
+          - name: EBRAINS_REPO_PATH
+            value: $INSTALLATION_ROOT/ebrains-spack-builds
       volumes:
         - name: sharedbin
           persistentVolumeClaim:
-- 
GitLab