From df7a0563965d7455a8b1bd208760d4459f03baab Mon Sep 17 00:00:00 2001
From: Dmitry Kalinkin <dkalinkin@bnl.gov>
Date: Tue, 8 Oct 2024 14:50:28 +0000
Subject: [PATCH] Revert "Delete build_detector.sh"

This reverts merge request !89
---
 .gitlab-ci.yml        |   8 +++
 bin/build_detector.sh | 118 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 126 insertions(+)
 create mode 100755 bin/build_detector.sh

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index fdf6901..da4b86f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -62,6 +62,14 @@ common:setup:
   script:
     - git clone -b ${CI_COMMIT_REF_NAME} https://eicweb.phy.anl.gov/EIC/benchmarks/common_bench.git setup 
     - source setup/bin/env.sh && ./setup/bin/install_common.sh
+
+common:detector:
+  stage: initialize
+  needs: ["common:setup"]
+  rules:
+    - if: '$CI_SERVER_HOST == "eicweb.phy.anl.gov"' 
+  script:
+    - source .local/bin/env.sh && build_detector.sh
     - bin/mkdir_local_data_link sim_output 
     - print_env.sh
     - ls -lrth
diff --git a/bin/build_detector.sh b/bin/build_detector.sh
new file mode 100755
index 0000000..f97fd7a
--- /dev/null
+++ b/bin/build_detector.sh
@@ -0,0 +1,118 @@
+#!/bin/bash
+
+## =============================================================================
+## Build and install the DETECTOR detector package into our local prefix
+## =============================================================================
+
+## =============================================================================
+## Load the environment variables. To build the detector we need the following
+## variables:
+##
+## - DETECTOR: the detector package we want to use for this benchmark
+## - LOCAL_PREFIX:     location where local packages should be installed
+## - LOCAL_DATA_PATH:  local storage for pipeline jobs
+## - DETECTOR_PREFIX:  prefix for the detector definition repositories
+## - DETECTOR_PATH:    full path for the detector definitions
+##                     this is the same as ${LOCAL_PREFIX}/share/${DETECTOR}
+
+if [ -n "${LOCAL_PREFIX}" ] ; then 
+  source .local/bin/env.sh
+else
+  source ${LOCAL_PREFIX}/bin/env.sh
+fi
+./${LOCAL_PREFIX}/bin/print_env.sh
+
+
+# this is like git clone, but allows to fetch any reference, including by git commit SHA
+function fetchgit() {
+  local path=$1
+  local ref=$2
+  local uri=$3
+  mkdir ${path}
+  git -C "${path}" init
+  git -C "${path}" remote add origin "${uri}"
+  git -C "${path}" fetch origin "${ref}"
+  git -C "${path}" checkout "${ref}"
+}
+
+
+## =============================================================================
+## Step 1: download/update the detector definitions (if needed)
+pushd ${DETECTOR_PREFIX}
+
+## We need an up-to-date copy of the detector
+## start clean to avoid issues...
+
+if [ -d "${DETECTOR}" ]; then
+  echo "cleaning up ${DETECTOR}" 
+  mv "${DETECTOR}" "$(mktemp)-${DETECTOR}"
+fi
+
+echo "Fetching ${DETECTOR}"
+
+#if [ "${DETECTOR}" == "epic" ] ; then 
+if [ -n "${DETECTOR_DEPLOY_TOKEN_USERNAME:-}" -a -n "${DETECTOR_DEPLOY_TOKEN_PASSWORD:-}" ]; then
+  DEPLOY_TOKEN="${DETECTOR_DEPLOY_TOKEN_USERNAME}:${DETECTOR_DEPLOY_TOKEN_PASSWORD}@"
+  echo "Deploy token for ${DETECTOR_DEPLOY_TOKEN_USERNAME} is masked in the next line."
+else
+  DEPLOY_TOKEN=""
+fi
+
+echo "fetchgit ${DETECTOR} ${DETECTOR_VERSION} ${DETECTOR_REPOSITORYURL:-https://eicweb.phy.anl.gov/EIC/detectors/${DETECTOR}.git}"
+fetchgit ${DETECTOR} ${DETECTOR_VERSION} ${DETECTOR_REPOSITORYURL:-https://${DEPLOY_TOKEN}eicweb.phy.anl.gov/EIC/detectors/${DETECTOR}.git}
+if [ -f "${DETECTOR}/requirements.txt" ] ; then
+  python -m pip install -r ${DETECTOR}/requirements.txt
+fi
+
+rm -rf "${DETECTOR}/.git"
+popd
+
+if [ "${BEAMLINE}" ]; then 
+  pushd ${DETECTOR_PREFIX}
+  ## We need an up-to-date copy of the detector
+  ## start clean to avoid issues...
+  if [ -d "${BEAMLINE}" ]; then
+    echo "cleaning up ${BEAMLINE}" 
+    mv "${BEAMLINE}" "$(mktemp)-${BEAMLINE}"
+  fi
+
+  echo "Fetching ${BEAMLINE}"
+
+  if [ -n "${BEAMLINE_DEPLOY_TOKEN_USERNAME:-}" -a -n "${BEAMLINE_DEPLOY_TOKEN_PASSWORD:-}" ]; then
+    DEPLOY_TOKEN="${BEAMLINE_DEPLOY_TOKEN_USERNAME}:${BEAMLINE_DEPLOY_TOKEN_PASSWORD}@"
+    echo "Deploy token for ${BEAMLINE_DEPLOY_TOKEN_USERNAME} is masked in the next line."
+  else
+    DEPLOY_TOKEN=""
+  fi
+  echo "fetchgit ${BEAMLINE} ${BEAMLINE_VERSION} ${BEAMLINE_REPOSITORYURL:-https://eicweb.phy.anl.gov/EIC/detectors/${BEAMLINE}.git}"
+  fetchgit ${BEAMLINE} ${BEAMLINE_VERSION} ${BEAMLINE_REPOSITORYURL:-https://${DEPLOY_TOKEN}eicweb.phy.anl.gov/EIC/detectors/${BEAMLINE}.git}
+  [[ "$?" == "0" ]]  ||  exit 1
+  rm -rf "${BEAMLINE}/.git"
+  popd
+
+  #echo "ln -s -f ${BEAMLINE} ${DETECTOR}/${BEAMLINE} " 
+  #ln -s -f ${BEAMLINE} ${DETECTOR}/${BEAMLINE}
+  #[[ "$?" == "0" ]]  ||  exit 1
+
+  mkdir -p ${DETECTOR_PREFIX}/${BEAMLINE}_build
+  pushd ${DETECTOR_PREFIX}/${BEAMLINE}_build
+  cmake ${DETECTOR_PREFIX}/${BEAMLINE} -DCMAKE_INSTALL_PREFIX=${LOCAL_PREFIX} -DCMAKE_CXX_STANDARD=17 -DCENTRAL_DETECTOR=${DETECTOR} && make -j$(($(nproc)/4+1)) install || exit 1
+  popd
+  rm -rf ${DETECTOR_PREFIX}/${BEAMLINE}_build
+
+fi
+
+
+## =============================================================================
+## Step 2: Compile and install the detector definition
+echo "Building and installing the ${DETECTOR} package"
+
+mkdir -p ${DETECTOR_PREFIX}/${DETECTOR}_build
+pushd ${DETECTOR_PREFIX}/${DETECTOR}_build
+cmake ${DETECTOR_PREFIX}/${DETECTOR} -DCMAKE_INSTALL_PREFIX=${LOCAL_PREFIX} -DCMAKE_CXX_STANDARD=17 && make -j$(($(nproc)/4+1)) install || exit 1
+popd
+rm -rf ${DETECTOR_PREFIX}/${DETECTOR}_build
+
+## =============================================================================
+## Step 3: That's all!
+echo "Detector build/install complete!"
-- 
GitLab