Skip to content
Snippets Groups Projects
Commit c81a0d11 authored by Sylvester Joosten's avatar Sylvester Joosten
Browse files

Resolve "Install all detector versions in a single image"

parent 730298c0
No related branches found
No related tags found
1 merge request!193Resolve "Install all detector versions in a single image"
......@@ -6,8 +6,6 @@ variables:
JUGGLER_VERSION: "v4.1.0"
NPDET_VERSION: "v1.1.0"
EICD_VERSION: "v1.1.0"
DETECTOR_VERSION: "canyonlands-v1.1"
IP6_VERSION: "v0.6.0"
AFTERBURNER_VERSION: "v0.1.0"
## Spack github version
......@@ -235,6 +233,7 @@ jug_xl:default:
variables:
BUILD_IMAGE: "jug_xl"
script:
- cp detectors.yaml containers/jug
- docker build -t ${CI_REGISTRY_IMAGE}/${BUILD_IMAGE}:${INTERNAL_TAG}
-f containers/jug/xl.Dockerfile
--build-arg INTERNAL_TAG=${INTERNAL_TAG}
......@@ -242,8 +241,6 @@ jug_xl:default:
--build-arg NPDET_VERSION=${NPDET_VERSION}
--build-arg EICD_VERSION=${EICD_VERSION}
--build-arg AFTERBURNER_VERSION=${AFTERBURNER_VERSION}
--build-arg DETECTOR_VERSION=${DETECTOR_VERSION}
--build-arg IP6_VERSION=${IP6_VERSION}
--build-arg JUG_VERSION=${INTERNAL_TAG}-$(git rev-parse HEAD)
containers/jug
- !reference [.build, script]
......@@ -263,10 +260,12 @@ jug_xl:nightly:
variables:
BUILD_IMAGE: "jug_xl"
script:
- cp detectors.yaml containers/jug
- docker build -t ${CI_REGISTRY_IMAGE}/${BUILD_IMAGE}:${NIGHTLY_TAG}
-f containers/jug/xl.Dockerfile
--build-arg INTERNAL_TAG=${INTERNAL_TAG}
--build-arg JUG_VERSION=nightly-$(date +%Y-%m-%d_%H-%M-%S)-${INTERNAL_TAG}-$(git rev-parse HEAD)
--build-arg NIGHTLY=1
containers/jug
- |
PUSH_FLAG=""
......
#!/usr/bin/env python3
import os
import yaml
import argparse
DETECTOR_REPO_GROUP = 'https://eicweb.phy.anl.gov/EIC/detectors'
DETECTOR_ENV ='''
#!/bin/sh
export DETECTOR={detector}
export DETECTOR_PATH={data_prefix}
export DETECTOR_VERSION={version}
export BEAMLINE_CONFIG={ip}
export BEAMLINE_CONFIG_VERSION={ip_version}
## note: we will phase out the JUGGLER_* flavor of variables in the future
export JUGGLER_DETECTOR=$DETECTOR
export JUGGLER_DETECTOR_VERSION=$DETECTOR_VERSION
export JUGGLER_DETECTOR_PATH=$DETECTOR_PATH
export JUGGLER_BEAMLINE_CONFIG=$BEAMLINE_CONFIG
export JUGGLER_BEAMLINE_CONFIG_VERSION=$BEAMLINE_CONFIG_VERSION
export JUGGLER_INSTALL_PREFIX=/usr/local'''
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument(
'-p', '--prefix',
dest='prefix',
default='/opt/detector',
help='Main detector prefix')
parser.add_argument(
'-c', '--config',
dest='config',
default='detectors.yaml',
help='Detector configuration file')
parser.add_argument('--nightly', action='store_true', dest='nightly',
help='Store nightly snapshot (will also be set as default)')
args = parser.parse_args()
print('Installing detector configuration from {} to {}'.format(args.config,
args.prefix))
if args.nightly:
print(' --> Nightly requested, will default configurations to nightly')
else:
print(' --> Regular run, nightly snapshot will NOT be installed')
print(' --> Loading detector configuration')
default_found = False
default_detector = ''
default_version = ''
with open(args.config) as f:
data=yaml.load(f, Loader=yaml.FullLoader)
detectors=data['detectors']
for det in detectors:
if not args.nightly and 'nightly' in detectors[det]:
del detectors[det]['nightly']
for branch in detectors[det]:
cfg = detectors[det][branch]
default_str = ''
if not default_found:
if args.nightly and branch == 'nightly':
default_str = ' (default)'
default_detector = det
default_version = 'nightly'
default_found = True
elif not args.nightly and 'default' in cfg and cfg['default']:
default_str = ' (default)'
default_detector = det
default_version = cfg['version']
default_found = True
print(' - {}: {}{}'.format(det, branch, default_str))
print(' --> Building and installing detector/ip libraries')
for det in detectors:
if not args.nightly and 'nightly' in detectors[det]:
del detectors[det]['nightly']
for branch in detectors[det]:
cfg = detectors[det][branch]
ip = cfg['ip']
version = cfg['version'] if branch != 'nightly' else 'nightly'
print(' - {}-{} and {}-{}'.format(
det, cfg['version'], ip['config'], ip['version']))
prefix = '{}/{}-{}'.format(args.prefix, det, version)
data_dir = '{}/share/{}'.format(prefix, det)
## build and install detector and IP code
for (proj, vers) in [(det, cfg['version']), (ip['config'], ip['version'])]:
## clone/build/install detector libraries
cmd = ['rm -rf /tmp/build /tmp/det',
'&&',
'git clone --depth 1 -b {version} {repo_grp}/{detector}.git /tmp/det'.format(
version=vers,
repo_grp=DETECTOR_REPO_GROUP,
detector=proj),
'&&',
'cmake -B /tmp/build -S /tmp/det -DCMAKE_CXX_STANDARD=17',
'-DCMAKE_INSTALL_PREFIX={prefix}'.format(prefix=prefix),
'&&',
'cmake --build /tmp/build -j$((($(nproc)/4)+1)) -- install']
print(' '.join(cmd))
os.system(' '.join(cmd))
## write version info to jug_info if available
if os.path.exists('/etc/jug_info'):
cmd = ['cd /tmp/det',
'&&',
'echo " - {detector}/{branch}: {version}-$(git rev-parse HEAD)"'.format(
detector=proj,
branch=branch,
version=cfg['version']),
'>> /etc/jug_info',
'&&',
'cd -']
print(' '.join(cmd))
os.system(' '.join(cmd))
## also copy over IP configuration to the detector
if os.path.exists('/tmp/det/{ip}'.format(ip=ip['config'])):
cmd = 'cp -r /tmp/det/{ip} {data_dir}'.format(
ip=ip['config'], data_dir=data_dir)
print(cmd)
os.system(cmd)
## cleanup
cmd = 'rm -rf /tmp/det /tmp/build'
print(cmd)
os.system(cmd)
# be resilient against failures
if os.path.exists(prefix):
## create a shortcut for the prefix if desired
if branch != version:
cmd = 'rm -rf {shortcut} && ln -sf {prefix} {shortcut}'.format(
prefix=prefix,
shortcut='{}/{}-{}'.format(args.prefix, det, branch))
print(cmd)
os.system(cmd)
## write an environment file for this detector
with open('{prefix}/setup.sh'.format(prefix=prefix), 'w') as f:
print(DETECTOR_ENV.format(
detector=det,
data_prefix=data_dir,
version=cfg['version'],
ip=ip['config'],
ip_version=ip['version']),
file=f)
print(' --> Symlinking default detector for backward compatibility')
full_prefix='{}/{}-{}'.format(args.prefix, default_detector, default_version)
cmd = ['ln -sf {full_prefix}/share {short_prefix}',
'&&',
'ln -sf {full_prefix}/lib {short_prefix}',
'&&',
'ln -sf {full_prefix}/setup.sh {short_prefix}']
print(' '.join(cmd))
os.system(' '.join(cmd).format(full_prefix=full_prefix, short_prefix=args.prefix))
print('All done!')
......@@ -20,6 +20,8 @@ ARG AFTERBURNER_VERSION=main
ARG JUG_VERSION=1
ADD ${EICWEB}/18/repository/tree?ref=${NPDET_VERSION} /tmp/18.json
ADD ${EICWEB}/373/repository/tree?ref=${EICD_VERSION} /tmp/373.json
ADD ${EICWEB}/492/repository/tree?ref=${AFTERBURNER_VERSION} /tmp/492.json
RUN cd /tmp \
&& echo " - jug_xl: ${JUG_VERSION}" >> /etc/jug_info \
&& echo "INSTALLING NPDET" \
......@@ -30,10 +32,8 @@ RUN cd /tmp
&& pushd NPDet \
&& echo " - NPDet: ${NPDET_VERSION}-$(git rev-parse HEAD)">> /etc/jug_info \
&& popd \
&& rm -rf build NPDet
ADD ${EICWEB}/373/repository/tree?ref=${EICD_VERSION} /tmp/373.json
RUN cd /tmp \
&& rm -rf build NPDet \
&& cd /tmp \
&& echo "INSTALLING EICD" \
&& git clone -b ${EICD_VERSION} --depth 1 \
https://eicweb.phy.anl.gov/EIC/eicd.git \
......@@ -42,7 +42,19 @@ RUN cd /tmp
&& pushd eicd \
&& echo " - EICD: ${EICD_VERSION}-$(git rev-parse HEAD)">> /etc/jug_info \
&& popd \
&& rm -rf build eicd
&& rm -rf build eicd \
&& cd /tmp \
&& echo "INSTALLING AFTERBURNER" \
&& git clone -b ${AFTERBURNER_VERSION} --depth 1 \
https://eicweb.phy.anl.gov/monte_carlo/afterburner.git \
&& cmake -B build -S afterburner/cpp -DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_CXX_STANDARD=17 \
&& cmake --build build -j12 --target all -- install \
&& pushd afterburner \
&& echo " - afterburner: ${AFTERBURNER_VERSION}-$(git rev-parse HEAD)" \
>> jug_info \
&& popd \
&& rm -rf build afterburner
ADD ${EICWEB}/369/repository/tree?ref=${JUGGLER_VERSION} /tmp/369.json
RUN cd /tmp \
......@@ -58,70 +70,17 @@ RUN cd /tmp
&& popd \
&& rm -rf build juggler
ADD ${EICWEB}/492/repository/tree?ref=${AFTERBURNER_VERSION} /tmp/492.json
RUN cd /tmp \
&& echo "INSTALLING AFTERBURNER" \
&& git clone -b ${AFTERBURNER_VERSION} --depth 1 \
https://eicweb.phy.anl.gov/monte_carlo/afterburner.git \
&& cmake -B build -S afterburner/cpp -DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_CXX_STANDARD=17 \
&& cmake --build build -j12 --target all -- install \
&& pushd afterburner \
&& echo " - afterburner: ${AFTERBURNER_VERSION}-$(git rev-parse HEAD)" \
>> jug_info \
&& popd \
&& rm -rf build afterburner
## also install detector/ip geometries into opt
## FIXME: need to add proper compact file install directly to the athena detector
## build
ARG DETECTOR_VERSION="master"
ARG IP6_VERSION="master"
ADD ${EICWEB}/473/repository/tree?ref=${DETECTOR_VERSION} /tmp/473.json
ADD ${EICWEB}/452/repository/tree?ref=${IP6_VERSION} /tmp/452.json
ARG NIGHTLY=''
ADD ${EICWEB}/473/repository/tree?ref=master /tmp/473.json
ADD ${EICWEB}/452/repository/tree?ref=master /tmp/452.json
COPY setup_detectors.py /tmp
COPY detectors.yaml /tmp
RUN cd /tmp \
&& DETECTOR_PREFIX=/opt/detector \
&& DETECTOR_DATA=$DETECTOR_PREFIX/share/athena \
&& mkdir -p /opt/detector/share/athena \
&& echo "INSTALLING ATHENA" \
&& git clone -b ${DETECTOR_VERSION} \
https://eicweb.phy.anl.gov/EIC/detectors/athena.git \
&& cmake -B build -S athena -DCMAKE_CXX_STANDARD=17 \
-DCMAKE_INSTALL_PREFIX=${DETECTOR_PREFIX} \
&& cmake --build build -j12 -- install \
&& pushd athena \
&& echo " - Athena: ${DETECTOR_VERSION}-$(git rev-parse HEAD)" \
>> /etc/jug_info \
&& popd \
&& rm -rf build athena \
&& echo "INSTALLING IP6 GEOMETRY" \
&& git clone -b ${IP6_VERSION} \
https://eicweb.phy.anl.gov/EIC/detectors/ip6.git \
&& cmake -B build -S ip6 -DCMAKE_CXX_STANDARD=17 \
-DCMAKE_INSTALL_PREFIX=${DETECTOR_PREFIX} \
&& cmake --build build -j12 -- install \
&& cp -r ip6/ip6 \
${DETECTOR_DATA} \
&& pushd ip6 \
&& echo " - IP6: ${IP6_VERSION}-$(git rev-parse HEAD)" \
>> /etc/jug_info \
&& popd \
&& rm -rf build ip6 \
&& echo "ADDING SETUP SCRIPT" \
&& echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/detector/lib' \
> /opt/detector/setup.sh \
&& echo "export JUGGLER_DETECTOR=athena" \
>> /opt/detector/setup.sh \
&& echo "export DETECTOR_PATH=/opt/detector/share/athena" \
>> /opt/detector/setup.sh \
&& echo "export DETECTOR_VERSION=${DETECTOR_VERSION}" \
>> /opt/detector/setup.sh \
&& echo "export JUGGLER_DETECTOR_VERSION=${DETECTOR_VERSION}" \
>> /opt/detector/setup.sh \
&& echo "BEAMLINE_CONFIG=ip6" \
&& echo "BEAMLINE_CONFIG_VERSION=${IP6_VERSION}" \
&& echo "export JUGGLER_INSTALL_PREFIX=/usr/local" \
>> /opt/detector/setup.sh
&& [ "z$NIGHTLY" = "z1" ] && NIGHTLY_FLAG="--nightly" || NIGHTLY_FLAG="" \
&& /tmp/setup_detectors.py --prefix /opt/detector --config /tmp/detectors.yaml \
$NIGHTLY_FLAG \
&& rm /tmp/setup_detectors.py
## Install benchmarks into the container
......@@ -131,27 +90,24 @@ ARG BENCHMARK_REC_VERSION="master"
ARG BENCHMARK_PHY_VERSION="master"
ADD ${EICWEB}/458/repository/tree?ref=${BENCHMARK_COM_VERSION} /tmp/485.json
ADD ${EICWEB}/399/repository/tree?ref=${BENCHMARK_DET_VERSION} /tmp/399.json
ADD ${EICWEB}/408/repository/tree?ref=${BENCHMARK_REC_VERSION} /tmp/408.json
ADD ${EICWEB}/400/repository/tree?ref=${BENCHMARK_PHY_VERSION} /tmp/400.json
RUN mkdir -p /opt/benchmarks \
&& cd /opt/benchmarks \
&& git clone -b ${BENCHMARK_COM_VERSION} --depth 1 \
https://eicweb.phy.anl.gov/EIC/benchmarks/common_bench.git
ADD ${EICWEB}/399/repository/tree?ref=${BENCHMARK_DET_VERSION} /tmp/399.json
RUN mkdir -p /opt/benchmarks \
https://eicweb.phy.anl.gov/EIC/benchmarks/common_bench.git \
&& mkdir -p /opt/benchmarks \
&& cd /opt/benchmarks \
&& git clone -b ${BENCHMARK_DET_VERSION} --depth 1 \
https://eicweb.phy.anl.gov/EIC/benchmarks/detector_benchmarks.git \
&& ln -sf ../common_bench detector_benchmarks/.local
ADD ${EICWEB}/408/repository/tree?ref=${BENCHMARK_REC_VERSION} /tmp/408.json
RUN mkdir -p /opt/benchmarks \
&& ln -sf ../common_bench detector_benchmarks/.local \
&& mkdir -p /opt/benchmarks \
&& cd /opt/benchmarks \
&& git clone -b ${BENCHMARK_REC_VERSION} --depth 1 \
https://eicweb.phy.anl.gov/EIC/benchmarks/reconstruction_benchmarks.git \
&& ln -sf ../common_bench reconstruction_benchmarks/.local
ADD ${EICWEB}/400/repository/tree?ref=${BENCHMARK_PHY_VERSION} /tmp/400.json
RUN mkdir -p /opt/benchmarks \
&& ln -sf ../common_bench reconstruction_benchmarks/.local \
&& mkdir -p /opt/benchmarks \
&& cd /opt/benchmarks \
&& git clone -b ${BENCHMARK_PHY_VERSION} --depth 1 \
https://eicweb.phy.anl.gov/EIC/benchmarks/physics_benchmarks.git \
......@@ -165,25 +121,22 @@ ARG CAMPAIGNS_CONDOR_VERSION="main"
ARG CAMPAIGNS_SLURM_VERSION="main"
ADD ${EICWEB}/482/repository/tree?ref=${CAMPAIGNS_SINGLE_VERSION} /tmp/482.json
ADD ${EICWEB}/483/repository/tree?ref=${CAMPAIGNS_HEPMC3_VERSION} /tmp/483.json
ADD ${EICWEB}/484/repository/tree?ref=${CAMPAIGNS_CONDOR_VERSION} /tmp/484.json
ADD ${EICWEB}/485/repository/tree?ref=${CAMPAIGNS_SLURM_VERSION} /tmp/485.json
RUN mkdir -p /opt/campaigns \
&& cd /opt/campaigns \
&& git clone -b ${CAMPAIGNS_SINGLE_VERSION} --depth 1 \
https://eicweb.phy.anl.gov/EIC/campaigns/single.git
ADD ${EICWEB}/483/repository/tree?ref=${CAMPAIGNS_HEPMC3_VERSION} /tmp/483.json
RUN mkdir -p /opt/campaigns \
https://eicweb.phy.anl.gov/EIC/campaigns/single.git \
&& mkdir -p /opt/campaigns \
&& cd /opt/campaigns \
&& git clone -b ${CAMPAIGNS_HEPMC3_VERSION} --depth 1 \
https://eicweb.phy.anl.gov/EIC/campaigns/hepmc3.git
ADD ${EICWEB}/484/repository/tree?ref=${CAMPAIGNS_CONDOR_VERSION} /tmp/484.json
RUN mkdir -p /opt/campaigns \
https://eicweb.phy.anl.gov/EIC/campaigns/hepmc3.git \
&& mkdir -p /opt/campaigns \
&& cd /opt/campaigns \
&& git clone -b ${CAMPAIGNS_CONDOR_VERSION} --depth 1 \
https://eicweb.phy.anl.gov/EIC/campaigns/condor.git
ADD ${EICWEB}/485/repository/tree?ref=${CAMPAIGNS_SLURM_VERSION} /tmp/485.json
RUN mkdir -p /opt/campaigns \
https://eicweb.phy.anl.gov/EIC/campaigns/condor.git \
&& mkdir -p /opt/campaigns \
&& cd /opt/campaigns \
&& git clone -b ${CAMPAIGNS_SLURM_VERSION} --depth 1 \
https://eicweb.phy.anl.gov/EIC/campaigns/slurm.git
detectors:
athena:
acadia:
version: acadia-v2.1
ip:
config: ip6
version: v0.5.2
canyonlands:
default: true
version: canyonlands-v1.1
ip:
config: ip6
version: v0.6.0
nightly:
version: master
ip:
config: ip6
version: master
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment