image: docker:latest

variables:
  DOCKER_DRIVER: overlay
  BRANCH: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME
  COMMIT: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
  NIGHTLY: $CI_REGISTRY_IMAGE:nightly
  TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG

  # Location of *.spec.in patch script and arguments:
  PATCHSCRIPT: patch_optimized_spec_file
  COMP: gcc
  PATCHFLAGS: -c $COMP -k --nocheck -f

before_script:
  # 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
  paths:
    - ccache

stages:
    - level0
    - level1
    - level2
    - test-gstlal
    - 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
  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
    - $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
    paths:
      - rpmbuild/RPMS/x86_64/${CI_JOB_NAME#level?:rpm:}-*.rpm
      - rpmbuild/RPMS/x86_64/python2-${CI_JOB_NAME#level?:rpm:}-*.rpm
  only:
    - schedules
    - tags
    - web
  allow_failure: true

level0:rpm:gstlal:
  <<: *levelN-rpm-package
  stage: level0
  
level1:rpm:gstlal-ugly:
  <<: *levelN-rpm-package
  stage: level1
  dependencies:
    - level0:rpm:gstlal

level2:rpm:gstlal-inspiral:
  <<: *levelN-rpm-package
  stage: level2
  dependencies:
    - level0:rpm:gstlal
    - level1:rpm:gstlal-ugly
  variables:
    EXTRA_CONFIG_FLAGS: "--disable-massmodel"

level2:rpm:gstlal-calibration:
  <<: *levelN-rpm-package
  stage: level2
  dependencies:
    - level0:rpm:gstlal
    - level1:rpm:gstlal-ugly
    
level2:rpm:gstlal-burst:
  <<: *levelN-rpm-package
  stage: level2
  dependencies:
    - 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

test:gstlal:
  image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7
  stage: test-gstlal
  dependencies:
    - 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
    
    # Get the necessary ROM 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:
    - schedules

test:gstlal-inspiral:
  image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7
  stage: test-inspiral
  dependencies:
    - 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:
    - schedules
  allow_failure: true

test:gstlal-burst:
  image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7
  stage: test-burst
  dependencies:
    - 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:
    - schedules
  allow_failure: true

test:offline:
  image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7
  stage: test-offline
  dependencies:
    - level0:rpm:gstlal
    - level1:rpm:gstlal-ugly
    - level2:rpm:gstlal-calibration
    - level2:rpm:gstlal-inspiral
    - level2:rpm:gstlal-burst
  script:
    # Set up directory structure and copy over built-dependencies from container:
    - mkdir public
    # 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 LAL_PATH=/usr
    - export USER=gstlal_CI_test
    
    - 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
    - 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

    # Run the makefile:
    - make -f Makefile.offline_tutorial_test

    # Back-up the results docs:
    - cp -rf ./WEBDIR/gstlal_offline_tutorial ../../public/

  artifacts:
    expire_in: 24h
    paths:
      - gstlal-inspiral/tests/WEBDIR/gstlal_offline_tutorial
      - public
    when: always
  only:
    - schedules
  allow_failure: true
  
pages:
  image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7
  stage: nightly-pages
  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 GSTLAL_FIR_WHITEN=0

    - yum -y install python2-pip texlive* graphviz python-matplotlib
    - pip install setuptools sphinx==1.7 sphinx_rtd_theme
    - cd doc; make html
    - cd ..; cp -rf doc/_build/* public/
  dependencies:
    - level0:rpm:gstlal
    - level1:rpm:gstlal-ugly
    - level2:rpm:gstlal-calibration
    - level2:rpm:gstlal-inspiral
    - level2:rpm:gstlal-burst
    - test:offline
  artifacts:
    paths:
      - public
  only:
    - master@lscsoft/gstlal
    - schedules
  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

