Warning, file /acts/CI/dependencies/setup.sh was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002 set -u
0003 set -e
0004 set -o pipefail
0005
0006 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
0007
0008 export SPACK_COLOR=always
0009
0010 function start_section() {
0011 local section_name="$1"
0012 if [ -n "${GITHUB_ACTIONS:-}" ]; then
0013 echo "::group::${section_name}"
0014 else
0015 echo "${section_name}"
0016 fi
0017 }
0018
0019 function end_section() {
0020 if [ -n "${GITHUB_ACTIONS:-}" ]; then
0021 echo "::endgroup::"
0022 fi
0023 }
0024
0025
0026 while getopts "c:t:d:e:fh" opt; do
0027 case ${opt} in
0028 c )
0029 compiler=$OPTARG
0030 ;;
0031 t )
0032 tag=$OPTARG
0033 ;;
0034 d )
0035 destination=$OPTARG
0036 ;;
0037 e )
0038 env_file=$OPTARG
0039 ;;
0040 f )
0041 full_install=true
0042 ;;
0043 h )
0044 echo "Usage: $0 [-c compiler] [-t tag] [-d destination] [-e env_file] [-h]"
0045 echo "Options:"
0046 echo " -c <compiler> Specify compiler (defaults to CXX env var)"
0047 echo " -t <tag> Specify dependency tag (defaults to DEPENDENCY_TAG env var)"
0048 echo " -d <destination> Specify install destination (defaults based on CI environment)"
0049 echo " -e <env_file> Specify environment file to output environments to"
0050 echo " -f Full dependency installation. Includes Geant4 datasets and Python packages."
0051 echo " -h Show this help message"
0052 exit 0
0053 ;;
0054 \? )
0055 echo "Invalid option: -$OPTARG" 1>&2
0056 exit 1
0057 ;;
0058 : )
0059 echo "Option -$OPTARG requires an argument" 1>&2
0060 exit 1
0061 ;;
0062 esac
0063 done
0064
0065
0066 if [ -z "${compiler:-}" ]; then
0067 compiler="${CXX:-default}"
0068 fi
0069
0070 if [ -z "${tag:-}" ]; then
0071 tag="${DEPENDENCY_TAG:-}"
0072 if [ -z "${tag:-}" ]; then
0073 echo "No tag specified via -t or DEPENDENCY_TAG environment variable"
0074 exit 1
0075 fi
0076 fi
0077
0078 if [ -z "${destination:-}" ]; then
0079 if [ -n "${GITHUB_ACTIONS:-}" ]; then
0080 destination="${GITHUB_WORKSPACE}/dependencies"
0081 elif [ -n "${GITLAB_CI:-}" ]; then
0082 destination="${CI_PROJECT_DIR}/dependencies"
0083 else
0084 echo "No destination specified via -d and not running in CI"
0085 exit 1
0086 fi
0087 fi
0088
0089 if [ -z "${env_file:-}" ]; then
0090 if [ -n "${GITHUB_ACTIONS:-}" ]; then
0091 env_file="${GITHUB_ENV}"
0092 else
0093 echo "No environment file specified via -e and not running in GitHub Actions"
0094 exit 1
0095 fi
0096 fi
0097
0098 export env_file
0099
0100 function set_env {
0101 key="$1"
0102 value="$2"
0103
0104 echo "=> ${key}=${value}"
0105
0106 if [ -n "${GITHUB_ACTIONS:-}" ]; then
0107 echo "${key}=${value}" >> "$env_file"
0108 else
0109 echo "export ${key}=${value}" >> "$env_file"
0110 fi
0111 }
0112
0113
0114
0115
0116 echo "Install tag: $tag"
0117 echo "Install destination: $destination"
0118
0119 mkdir -p ${destination}
0120
0121 if [ -n "${GITLAB_CI:-}" ]; then
0122 _spack_folder=${CI_PROJECT_DIR}/spack
0123 else
0124 _spack_folder=${PWD}/spack
0125 fi
0126
0127 start_section "Install spack if not already installed"
0128 if ! command -v spack &> /dev/null; then
0129 "${SCRIPT_DIR}/setup_spack.sh" "${_spack_folder}"
0130 source "${_spack_folder}/share/spack/setup-env.sh"
0131 fi
0132
0133 _spack_repo_version=${SPACK_REPO_VERSION:-develop}
0134 _spack_repo_directory="$(realpath "$(spack location --repo builtin)/../../../")"
0135
0136 echo "Ensure repo is synced with version ${_spack_repo_version}"
0137
0138 git config --global --add safe.directory "${_spack_repo_directory}"
0139 spack repo update builtin --tag "${_spack_repo_version}"
0140
0141 end_section
0142
0143 if [ -n "${GITLAB_CI:-}" ]; then
0144
0145 mkdir -p ${CI_PROJECT_DIR}/.spack
0146 ln -s ${CI_PROJECT_DIR}/.spack ${HOME}/.spack
0147 fi
0148
0149
0150
0151 if [ -n "${CI:-}" ]; then
0152 start_section "Add buildcache mirror"
0153 mirror_name="acts-spack-buildcache"
0154 mirror_url="oci://ghcr.io/acts-project/spack-buildcache"
0155 if [ -n "${GITLAB_CI:-}" ]; then
0156
0157 mirror_url="oci://registry.cern.ch/ghcr.io/acts-project/spack-buildcache"
0158 fi
0159
0160
0161 if ! spack mirror list | grep -q ${mirror_name}; then
0162 echo "Adding buildcache ${mirror_name}"
0163 spack mirror add ${mirror_name} ${mirror_url} --unsigned
0164 fi
0165 end_section
0166
0167 start_section "Locate OpenGL"
0168 "${SCRIPT_DIR}/opengl.sh"
0169 end_section
0170 fi
0171
0172 start_section "Get spack lock file"
0173 arch=$(spack arch --family)
0174
0175 env_dir="${destination}/env"
0176 view_dir="${destination}/view"
0177 venv_dir="${destination}/venv"
0178 mkdir -p ${env_dir}
0179
0180 lock_file_path="${destination}/spack.lock"
0181 cmd=(
0182 "${SCRIPT_DIR}/select_lockfile.py"
0183 "--tag" "${tag}"
0184 "--arch" "${arch}"
0185 "--output" "${lock_file_path}"
0186 )
0187
0188 if [ "${compiler}" != "default" ]; then
0189 cmd+=("--compiler-binary" "${compiler}")
0190 fi
0191
0192 "${cmd[@]}"
0193
0194 end_section
0195
0196
0197
0198 start_section "Create spack environment"
0199 time spack env create -d "${env_dir}" "${lock_file_path}" --with-view "$view_dir"
0200 time spack -e "${env_dir}" spec -l
0201 time spack -e "${env_dir}" find
0202 end_section
0203
0204 start_section "Install spack packages"
0205 time spack -e "${env_dir}" install --fail-fast --use-buildcache only --concurrent-packages 10
0206 end_section
0207
0208 start_section "Patch up Geant4 data directory"
0209 if [ "${full_install:-false}" == "true" ]; then
0210 "${view_dir}/bin/geant4-config" --install-datasets
0211 fi
0212 geant4_dir=$(spack -e "${env_dir}" location -i geant4)
0213
0214 mkdir -p "${geant4_dir}/share/Geant4"
0215 ln -s "${geant4_dir}/share/Geant4/data" "${view_dir}/share/Geant4/data"
0216 end_section
0217
0218 start_section "Prepare python environment"
0219 "${view_dir}/bin/python3" -m venv --system-site-packages "$venv_dir"
0220 "${venv_dir}/bin/python3" -m pip install pyyaml jinja2
0221 if [ "${full_install:-false}" == "true" ]; then
0222 "${venv_dir}/bin/python3" -m pip install -r "${SCRIPT_DIR}/../../Examples/Python/tests/requirements.txt"
0223 "${venv_dir}/bin/python3" -m pip install histcmp==0.8.1 matplotlib
0224 "${venv_dir}/bin/python3" -m pip install pytest-md-report
0225 fi
0226 end_section
0227
0228 start_section "Set environment variables"
0229 if [ -n "${GITHUB_ACTIONS:-}" ]; then
0230 echo "${view_dir}/bin" >> "$GITHUB_PATH"
0231 echo "${venv_dir}/bin" >> "$GITHUB_PATH"
0232 fi
0233 set_env PATH "${venv_dir}/bin:${view_dir}/bin/:${PATH}"
0234 set_env LD_LIBRARY_PATH "${venv_dir}/lib:${view_dir}/lib"
0235 set_env CMAKE_PREFIX_PATH "${venv_dir}:${view_dir}"
0236 set_env ROOT_SETUP_SCRIPT "${view_dir}/bin/thisroot.sh"
0237 set_env ROOT_INCLUDE_PATH "${view_dir}/include"
0238
0239 set_env PKG_CONFIG_PATH ""
0240 set_env pythonLocation ""
0241 set_env Python_ROOT_DIR ""
0242 set_env Python2_ROOT_DIR ""
0243 set_env Python3_ROOT_DIR ""
0244 end_section