diff --git a/.gitlab-ci.Dockerfile.e7 b/.gitlab-ci.Dockerfile.e7 new file mode 100644 index 0000000000000000000000000000000000000000..d5acd14eac43af59c8bd881269b6ceccaa929e02 --- /dev/null +++ b/.gitlab-ci.Dockerfile.e7 @@ -0,0 +1,45 @@ +# This is a Dockerfile to build an EL7 MKL-optimized GstLAL +# runtime container. + +FROM containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7 + +# Labeling/packaging stuff: +LABEL name="GstLAL Runtime Package, EL7" \ + maintainer="Alexander Pace <alexander.pace@ligo.org>" \ + date="2019-09-19" \ + support="Reference Platform, EL7" + +USER root + +## Copy Optimized RPMs to container +COPY rpms /rpms + +# Install Optimized RPMs, delete old RPMs +RUN yum makecache && \ + yum -y localinstall /rpms/*.rpm + + +# Update gstreamer registry cache: +ENV GST_REGISTRY_1_0=/usr/share/gstreamer-1.0/.registry.bin +RUN gst-inspect-1.0 + +# Clean up and close-out + +#RUN rm -rf /rpms && \ +RUN yum clean all + + + +# Export MKL environment variables: + +ENV MKL_INTERFACE_LAYER LP64 +ENV MKL_THREADING_LAYER SEQUENTIAL +ENV GSTLAL_FIR_WHITEN 0 +ENV TMPDIR /tmp + + +ENTRYPOINT nohup bash -c "avahi-daemon --no-rlimits &" && \ + source /opt/intel/bin/compilervars.sh intel64 && \ + source /opt/rh/devtoolset-7/enable && \ + bash + diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a01c90f4d0ed7a2bc6eec6fc301bc369d029abcf..e2a1e7f841e5363fbcf244042b6aa3a581bbdcb7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,38 +6,23 @@ variables: COMMIT: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA NIGHTLY: $CI_REGISTRY_IMAGE:nightly TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG - GSTLAL_DIR: $CI_PROJECT_DIR/opt/gstlal + + # Location of *.spec.in patch script and arguments: + PATCHSCRIPT: patch_optimized_spec_file + COMP: gcc + PATCHFLAGS: -c $COMP -k --nocheck -f before_script: - # Set up directory structure and copy over built-dependencies from container: - - mkdir public - - mkdir -p ${GSTLAL_DIR} - - # Define GstLAL build parameters: - - export PATH="${GSTLAL_DIR}/bin:/usr/lib/ccache:/opt/local/libexec/ccache:${PATH}" - - export LD_LIBRARY_PATH="${GSTLAL_DIR}/lib:${GSTLAL_DIR}/lib64:${LD_LIBRARY_PATH}" - - export LIBRARY_PATH="${GSTLAL_DIR}/lib:${GSTLAL_DIR}/lib64:${LIBRARY_PATH}" - - export PKG_CONFIG_PATH="${GSTLAL_DIR}/lib/pkgconfig:${GSTLAL_DIR}/lib64/pkgconfig:${PKG_CONFIG_PATH}" - - export GI_TYPELIB_PATH="${GSTLAL_DIR}/lib/girepository-1.0:${GSTLAL_DIR}/lib64/girepository-1.0:${GI_TYPELIB_PATH}" - - export GST_PLUGIN_PATH="${GSTLAL_DIR}/lib/gstreamer-1.0:${GSTLAL_DIR}/lib64/gstreamer-1.0:${GST_PLUGIN_PATH}" - - export PYTHONPATH="${GSTLAL_DIR}/lib64/python2.7/site-packages:${GSTLAL_DIR}/lib/python2.7/site-packages:${PYTHONPATH}" - - export GST_REGISTRY_1_0="${GSTLAL_DIR}/registry.bin" - - export CCACHE_DIR=${PWD}/ccache - - # Define MKL environment variables: - - export MKLROOT="/opt/intel/compilers_and_libraries_2018.3.222/linux/mkl" - - export LIBRARY_PATH="/opt/intel/compilers_and_libraries_2018.3.222/linux/tbb/lib/intel64_lin/gcc4.7:/opt/intel/compilers_and_libraries_2018.3.222/linux/compiler/lib/intel64_lin:/opt/intel/compilers_and_libraries_2018.3.222/linux/mkl/lib/intel64_lin" - - export CPATH="/opt/intel/compilers_and_libraries_2018.3.222/linux/mkl/include" - - export PATH=PATH="/opt/intel/compilers_and_libraries_2018.3.222/linux/bin/intel64:${PATH}" - - export PKG_CONFIG_PATH="/opt/intel/compilers_and_libraries_2018.3.222/linux/mkl/bin/pkgconfig:${PKG_CONFIG_PATH}" - - export LD_LIBRARY_PATH="/opt/intel/compilers_and_libraries_2018.3.222/linux/compiler/lib/intel64:/opt/intel/compilers_and_libraries_2018.3.222/linux/compiler/lib/intel64_lin:/opt/intel/compilers_and_libraries_2018.3.222/linux/tbb/lib/intel64_lin/gcc4.7:/opt/intel/compilers_and_libraries_2018.3.222/linux/compiler/lib/intel64_lin:/opt/intel/compilers_and_libraries_2018.3.222/linux/mkl/lib/intel64_lin" - - # Define build and linking parameters: - - export CFLAGS="-O3 -fPIC -DMKL_ILP64 -m64 -I${MKLROOT}/include -I${GSTLAL_DIR}/include" - - export LDFLAGS="-l:libfftw3.so -l:libfftw3f.so -l:libfftw3_threads.so -l:libfftw3f_threads.so -L${GSTLAL_DIR}/lib -L${MKLROOT}/lib/intel64 -Wl,--no-as-needed -lmkl_intel_ilp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl" - - - export TMPDIR=/tmp - + # Set up directory structure and copy over built-dependencies from container: + - mkdir public + # Enable gcc-devtoolset-7 + - source /opt/rh/devtoolset-7/enable + # Set up Intel Dev Environment: + - source /opt/intel/bin/compilervars.sh intel64 + # Runtime and testing variables. Add these to the container on the "docker" + # stage. + - export TMPDIR=/tmp + - export GSTLAL_FIR_WHITEN=0 cache: key: $CI_JOB_NAME @@ -52,25 +37,29 @@ stages: - test-inspiral - test-burst - test-offline + - docker - nightly-pages - verify - # # build rpms # .levelN:rpm: &levelN-rpm-package - image: containers.ligo.org/alexander-pace/gstlal-dev/gstlal-dev:el7-mkl-1.14 + image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7 variables: + GIT_STRATEGY: fetch RPM_BUILD_CPUS: 4 script: - if [ -d rpmbuild ]; then yum -y install rpmbuild/RPMS/x86_64/*.rpm; fi - cd ${CI_JOB_NAME#level?:rpm:} - ./00init.sh - - ./configure --enable-gtk-doc + - $PATCHSCRIPT $PATCHFLAGS ./*.spec.in + - ./configure --enable-gtk-doc $EXTRA_CONFIG_FLAGS - make - make dist + # Install dependencies + - yum-builddep -y ${CI_JOB_NAME#level?:rpm:}.spec - rpmbuild -tb --define "_topdir $CI_PROJECT_DIR/rpmbuild" ${CI_JOB_NAME#level?:rpm:}-*.tar.gz artifacts: expire_in: 18h @@ -78,7 +67,6 @@ stages: - rpmbuild/RPMS/x86_64/${CI_JOB_NAME#level?:rpm:}-*.rpm - rpmbuild/RPMS/x86_64/python2-${CI_JOB_NAME#level?:rpm:}-*.rpm only: - - pushes - schedules - tags - web @@ -100,6 +88,8 @@ level2:rpm:gstlal-inspiral: dependencies: - level0:rpm:gstlal - level1:rpm:gstlal-ugly + variables: + EXTRA_CONFIG_FLAGS: "--disable-massmodel" level2:rpm:gstlal-calibration: <<: *levelN-rpm-package @@ -115,242 +105,263 @@ level2:rpm:gstlal-burst: - level0:rpm:gstlal - level1:rpm:gstlal-ugly -level0:gstlal: - image: containers.ligo.org/alexander-pace/gstlal-dev/gstlal-dev:el7-mkl-1.14 - stage: level0 - script: - - cd gstlal - - ./00init.sh - - ./configure --prefix=${GSTLAL_DIR} - - make - - make install - artifacts: - expire_in: 3h - paths: - - ${GSTLAL_DIR} - when: always - only: - - pushes - - schedules - -level1:gstlal-ugly: - image: containers.ligo.org/alexander-pace/gstlal-dev/gstlal-dev:el7-mkl-1.14 - stage: level1 - dependencies: - - level0:gstlal - script: - - cd gstlal-ugly - - ./00init.sh - - ./configure --prefix=${GSTLAL_DIR} - - make - - make install - artifacts: - expire_in: 3h - paths: - - ${GSTLAL_DIR} - when: always - only: - - pushes - - schedules - -level2:gstlal-calibration: - image: containers.ligo.org/alexander-pace/gstlal-dev/gstlal-dev:el7-mkl-1.14 - stage: level2 - dependencies: - - level1:gstlal-ugly - script: - - cd gstlal-calibration - - ./00init.sh - - ./configure --prefix=${GSTLAL_DIR} - - make - - make install - artifacts: - expire_in: 3h - paths: - - ${GSTLAL_DIR} - when: always - only: - - pushes - - schedules - -level2:gstlal-inspiral: - image: containers.ligo.org/alexander-pace/gstlal-dev/gstlal-dev:el7-mkl-1.14 - stage: level2 - dependencies: - - level1:gstlal-ugly - script: - - cd gstlal-inspiral - - ./00init.sh - - ./configure --prefix=${GSTLAL_DIR} --disable-massmodel - - make - - make install - artifacts: - expire_in: 3h - paths: - - ${GSTLAL_DIR} - when: always - only: - - pushes - - schedules - -level2:gstlal-burst: - image: containers.ligo.org/alexander-pace/gstlal-dev/gstlal-dev:el7-mkl-1.14 - stage: level2 - dependencies: - - level1:gstlal-ugly - script: - - cd gstlal-burst - - ./00init.sh - - ./configure --prefix=${GSTLAL_DIR} - - make - - make install - artifacts: - expire_in: 3h - paths: - - ${GSTLAL_DIR} - when: always - only: - - pushes - - schedules - -gstlal-verify: - image: containers.ligo.org/alexander-pace/gstlal-dev/gstlal-dev:el7-mkl-1.14 - stage: verify - script: - # ------------------------------------------------------------------- - # gstlal - # ------------------------------------------------------------------- - #- echo "$PWD" > ./pwd_output.out - - cd gstlal - - ./00init.sh - - ./configure --prefix=${GSTLAL_DIR} - - make - - make install - - cd .. - # ------------------------------------------------------------------- - # gstlal-ugly - # ------------------------------------------------------------------- - - cd gstlal-ugly - - ./00init.sh - - ./configure --prefix=${GSTLAL_DIR} - - make - - make install - - cd .. - # ------------------------------------------------------------------- - # gstlal-calibration - # ------------------------------------------------------------------- - - cd gstlal-calibration - - ./00init.sh - - ./configure --prefix=${GSTLAL_DIR} - - make - - make install - - cd .. - # ------------------------------------------------------------------- - # gstlal-inspiral - # ------------------------------------------------------------------- - - cd gstlal-inspiral - - ./00init.sh - - ./configure --prefix=${GSTLAL_DIR} --disable-massmodel - - make - - make install - - cd .. - # ------------------------------------------------------------------- - # gstlal-burst - # ------------------------------------------------------------------- - - cd gstlal-burst - - ./00init.sh - - ./configure --prefix=${GSTLAL_DIR} - - make - - make install - - cd .. - only: - - manual +#level0:gstlal: +# image: containers.ligo.org/alexander-pace/gstlal-dev/gstlal-dev:el7-mkl-1.14 +# stage: level0 +# script: +# - cd gstlal +# - ./00init.sh +# - ./configure --prefix=${GSTLAL_DIR} +# - make +# - make install +# artifacts: +# expire_in: 3h +# paths: +# - ${GSTLAL_DIR} +# when: always +# only: +# - pushes +# - schedules +# +#level1:gstlal-ugly: +# image: containers.ligo.org/alexander-pace/gstlal-dev/gstlal-dev:el7-mkl-1.14 +# stage: level1 +# dependencies: +# - level0:gstlal +# script: +# - cd gstlal-ugly +# - ./00init.sh +# - ./configure --prefix=${GSTLAL_DIR} +# - make +# - make install +# artifacts: +# expire_in: 3h +# paths: +# - ${GSTLAL_DIR} +# when: always +# only: +# - pushes +# - schedules +# +#level2:gstlal-calibration: +# image: containers.ligo.org/alexander-pace/gstlal-dev/gstlal-dev:el7-mkl-1.14 +# stage: level2 +# dependencies: +# - level1:gstlal-ugly +# script: +# - cd gstlal-calibration +# - ./00init.sh +# - ./configure --prefix=${GSTLAL_DIR} +# - make +# - make install +# artifacts: +# expire_in: 3h +# paths: +# - ${GSTLAL_DIR} +# when: always +# only: +# - pushes +# - schedules +# +#level2:gstlal-inspiral: +# image: containers.ligo.org/alexander-pace/gstlal-dev/gstlal-dev:el7-mkl-1.14 +# stage: level2 +# dependencies: +# - level1:gstlal-ugly +# script: +# - cd gstlal-inspiral +# - ./00init.sh +# - ./configure --prefix=${GSTLAL_DIR} --disable-massmodel +# - make +# - make install +# artifacts: +# expire_in: 3h +# paths: +# - ${GSTLAL_DIR} +# when: always +# only: +# - pushes +# - schedules +# +#level2:gstlal-burst: +# image: containers.ligo.org/alexander-pace/gstlal-dev/gstlal-dev:el7-mkl-1.14 +# stage: level2 +# dependencies: +# - level1:gstlal-ugly +# script: +# - cd gstlal-burst +# - ./00init.sh +# - ./configure --prefix=${GSTLAL_DIR} +# - make +# - make install +# artifacts: +# expire_in: 3h +# paths: +# - ${GSTLAL_DIR} +# when: always +# only: +# - pushes +# - schedules +# +#gstlal-verify: +# image: containers.ligo.org/alexander-pace/gstlal-dev/gstlal-dev:el7-mkl-1.14 +# stage: verify +# script: +# # ------------------------------------------------------------------- +# # gstlal +# # ------------------------------------------------------------------- +# #- echo "$PWD" > ./pwd_output.out +# - cd gstlal +# - ./00init.sh +# - ./configure --prefix=${GSTLAL_DIR} +# - make +# - make install +# - cd .. +# # ------------------------------------------------------------------- +# # gstlal-ugly +# # ------------------------------------------------------------------- +# - cd gstlal-ugly +# - ./00init.sh +# - ./configure --prefix=${GSTLAL_DIR} +# - make +# - make install +# - cd .. +# # ------------------------------------------------------------------- +# # gstlal-calibration +# # ------------------------------------------------------------------- +# - cd gstlal-calibration +# - ./00init.sh +# - ./configure --prefix=${GSTLAL_DIR} +# - make +# - make install +# - cd .. +# # ------------------------------------------------------------------- +# # gstlal-inspiral +# # ------------------------------------------------------------------- +# - cd gstlal-inspiral +# - ./00init.sh +# - ./configure --prefix=${GSTLAL_DIR} --disable-massmodel +# - make +# - make install +# - cd .. +# # ------------------------------------------------------------------- +# # gstlal-burst +# # ------------------------------------------------------------------- +# - cd gstlal-burst +# - ./00init.sh +# - ./configure --prefix=${GSTLAL_DIR} +# - make +# - make install +# - cd .. +# only: +# - manual test:gstlal: - image: containers.ligo.org/alexander-pace/gstlal-dev/gstlal-dev:el7-mkl-1.14 + image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7 stage: test-gstlal dependencies: - - level0:gstlal + - level0:rpm:gstlal + - level1:rpm:gstlal-ugly + - level2:rpm:gstlal-calibration + - level2:rpm:gstlal-inspiral + - level2:rpm:gstlal-burst script: - - export GSTLAL_FIR_WHITEN=0 - ## Get the necessary ROM data: - #- git clone https://git.ligo.org/lscsoft/lalsuite-extra.git ${GSTLAL_DIR}/lalsuite-extra - #- export LAL_DATA_PATH=${GSTLAL_DIR}/lalsuite-extra/data/lalsimulation/ + # Install RPMs and set up the test environment: + - if [ -d rpmbuild ]; then yum -y install rpmbuild/RPMS/x86_64/*.rpm; fi + - export GSTLAL_FIR_WHITEN=0 + - gst-inspect-1.0 # Get the necessary ROM data: - - git clone https://git.ligo.org/alexander-pace/gstlal-testing-data.git ${GSTLAL_DIR}/gstlal-testing-data + - git clone https://git.ligo.org/alexander.pace/gstlal-testing-data.git ${GSTLAL_DIR}/gstlal-testing-data - export LAL_DATA_PATH=${GSTLAL_DIR}/gstlal-testing-data/ # Run doctests - cd gstlal - python -m pytest -v --doctest-modules --ignore gst/python --ignore port-tools --ignore tests --ignore share --ignore python/misc.py --ignore python/pipeparts/__init__.py --ignore python/matplotlibhelper.py --ignore python/dagfile.py --ignore python/httpinterface.py only: - - pushes - schedules test:gstlal-inspiral: - image: containers.ligo.org/alexander-pace/gstlal-dev/gstlal-dev:el7-mkl-1.14 + image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7 stage: test-inspiral dependencies: - - level2:gstlal-inspiral + - level0:rpm:gstlal + - level1:rpm:gstlal-ugly + - level2:rpm:gstlal-calibration + - level2:rpm:gstlal-inspiral + - level2:rpm:gstlal-burst script: + + # Install RPMs and set up the test environment: + - if [ -d rpmbuild ]; then yum -y install rpmbuild/RPMS/x86_64/*.rpm; fi - export GSTLAL_FIR_WHITEN=0 + - gst-inspect-1.0 + - cd gstlal-inspiral - python -m pytest -v --doctest-modules --ignore gst/python --ignore tests --ignore python/lloidplots.py --ignore python/llweb.py --ignore python/plotsegments.py --ignore python/plotsensitivity.py --ignore python/snglinspiraltable.py --ignore python/spawaveform.py --ignore python/spiirparts.py --ignore python/imr_utils.py --ignore python/stats/inspiral_extrinsics.py --ignore python/templates.py --ignore python/inspiral_pipe.py --ignore python/plotsnr.py --ignore python/p_astro_gstlal.py only: - - pushes - schedules allow_failure: true test:gstlal-burst: - image: containers.ligo.org/alexander-pace/gstlal-dev/gstlal-dev:el7-mkl-1.14 + image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7 stage: test-burst dependencies: - - level2:gstlal-burst + - level0:rpm:gstlal + - level1:rpm:gstlal-ugly + - level2:rpm:gstlal-calibration + - level2:rpm:gstlal-inspiral + - level2:rpm:gstlal-burst script: + + # Install RPMs and set up the test environment: + - if [ -d rpmbuild ]; then yum -y install rpmbuild/RPMS/x86_64/*.rpm; fi + - export GSTLAL_FIR_WHITEN=0 + - gst-inspect-1.0 + - cd gstlal-burst - python -m pytest -v --doctest-modules --ignore python/excesspower --ignore tests/trigger_test_01.py only: - - pushes - schedules allow_failure: true test:offline: - image: containers.ligo.org/alexander-pace/gstlal-dev/gstlal-dev:el7-mkl-1.14 + image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7 stage: test-offline dependencies: - - level1:gstlal-ugly - - level2:gstlal-inspiral + - level0:rpm:gstlal + - level1:rpm:gstlal-ugly + - level2:rpm:gstlal-calibration + - level2:rpm:gstlal-inspiral + - level2:rpm:gstlal-burst script: + + # Install RPMs and set up the test environment: + - if [ -d rpmbuild ]; then yum -y install rpmbuild/RPMS/x86_64/*.rpm; fi + - gst-inspect-1.0 + # Export variables for the offline tutorial - - export GSTLAL_FIR_WHITEN=0 - - export GSTLAL_WEBVIS_DIR=../../gstlal-ugly/share/vis/ - - export LAL_PATH=${GSTLAL_DIR} + - export LAL_PATH=/usr - export USER=gstlal_CI_test - # Get documentation packages, and download lalsuite-extra data: - #- yum -y install texlive-base texlive-dvipng - #- yum -y install texlive-latex texlive-latex-base-doc texlive-latex-fonts texlive-latex-bin texlive-latex-bin-bin - #- yum -y install texlive-pictures texlive-pstricks texlive-pstricks-doc - yum -y install bc # Get the necessary ROM data: - - git clone https://git.ligo.org/alexander-pace/gstlal-testing-data.git ${GSTLAL_DIR}/gstlal-testing-data + - git clone https://git.ligo.org/alexander.pace/gstlal-testing-data.git ${GSTLAL_DIR}/gstlal-testing-data - export LAL_DATA_PATH=${GSTLAL_DIR}/gstlal-testing-data/ - cd gstlal-inspiral/tests # Patch gstlal_inspiral to disable servicediscovery/avahi: - - patch ${GSTLAL_DIR}/bin/gstlal_inspiral ./disable_service_discovery.patch + #- patch ${GSTLAL_DIR}/bin/gstlal_inspiral ./disable_service_discovery.patch # Run the makefile: - make -f Makefile.offline_tutorial_test - # Unpatch gstlal_inspiral to bring it back to normal: - - patch -R ${GSTLAL_DIR}/bin/gstlal_inspiral ./disable_service_discovery.patch - + # Back-up the results docs: - cp -rf ./WEBDIR/gstlal_offline_tutorial ../../public/ + artifacts: expire_in: 24h paths: @@ -358,25 +369,29 @@ test:offline: - public when: always only: - - pushes - schedules allow_failure: true pages: - image: containers.ligo.org/alexander-pace/gstlal-dev/gstlal-dev:el7-mkl-1.14 + image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7 stage: nightly-pages script: - - echo "Building Documentation" + # Install RPMs and set up the test environment: + - if [ -d rpmbuild ]; then yum -y install rpmbuild/RPMS/x86_64/*.rpm; fi + - gst-inspect-1.0 + - export GSTLAL_FIR_WHITEN=0 + - yum -y install python2-pip texlive* graphviz python-matplotlib - pip install setuptools sphinx==1.7 sphinx_rtd_theme - - export GSTLAL_FIR_WHITEN=0 - - export TMPDIR=tmp/ - cd doc; make html - cd ..; cp -rf doc/_build/* public/ dependencies: - - level2:gstlal-inspiral - - level2:gstlal-calibration - - level2:gstlal-burst + - level0:rpm:gstlal + - level1:rpm:gstlal-ugly + - level2:rpm:gstlal-calibration + - level2:rpm:gstlal-inspiral + - level2:rpm:gstlal-burst + - test:offline artifacts: paths: - public @@ -386,3 +401,27 @@ pages: except: - web - pushes + +docker:el7: + stage: docker + before_script: [] + script: + # add RPMs to directory to pass to docker + - mkdir rpms + - mv rpmbuild/RPMS/x86_64/*.rpm rpms + # copy over spec file patching script + - rm -rf rpmbuild* + # Build the container: + - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY + - docker build --pull -t $CI_REGISTRY_IMAGE/gstlal:el7 --file .gitlab-ci.Dockerfile.e7 . + - docker push $CI_REGISTRY_IMAGE/gstlal:el7 + dependencies: + - level0:rpm:gstlal + - level1:rpm:gstlal-ugly + - level2:rpm:gstlal-calibration + - level2:rpm:gstlal-inspiral + - level2:rpm:gstlal-burst + + only: + - schedules +