# Build, test, and install variously configured GROMACS installations. # # This file contains job templates. Actual job configurations are inside gromacs.matrix/ directory. .gromacs:base:configure: extends: - .variables:default stage: configure-build cache: {} variables: KUBERNETES_CPU_LIMIT: 1 KUBERNETES_CPU_REQUEST: 1 KUBERNETES_MEMORY_REQUEST: 2Gi CMAKE_COMPILER_SCRIPT: "" CMAKE_EXTRA_OPTIONS: "" CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AVX2_256" CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON" CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF" CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=Debug" CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF" script: - bash -x admin/ci-scripts/gromacs-base-configure.sh artifacts: when: always paths: - $BUILD_DIR .gromacs:base:release:configure: extends: - .variables:default stage: release-configure cache: {} variables: KUBERNETES_CPU_LIMIT: 1 KUBERNETES_CPU_REQUEST: 1 KUBERNETES_MEMORY_REQUEST: 2Gi CMAKE_COMPILER_SCRIPT: "" CMAKE_EXTRA_OPTIONS: "" CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AVX2_256" CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON" CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF" CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert" CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF" CMAKE_REGRESSIONTEST_OPTIONS: "-DREGRESSIONTEST_PATH=../\\$RELEASE_REGRESSIONTESTS" RELEASE_BUILD_DIR: release-builds RELEASE_SOURCE: release-source-from-tarball RELEASE_REGRESSIONTESTS: release-regressiontests-from-tarball script: - CMAKE=${CMAKE:-$(which cmake)} - VERSION=`cat version.json | python3 -c "import json,sys; print(json.load(sys.stdin)['version'])"` - if [[ $GROMACS_RELEASE != "true" ]] ; then VERSION=$VERSION-dev ; fi - SOURCENAME=gromacs-$VERSION - SOURCETARBALL=$SOURCENAME.tar.gz - REGTESTNAME=regressiontests-$VERSION - REGTESTTARBALL=$REGTESTNAME.tar.gz - echo "$SOURCETARBALL" - echo "$REGTESTTARBALL" - RELEASE_TARBALLS=release-tarballs - rm -rf $RELEASE_TARBALLS $RELEASE_SOURCE $RELEASE_REGRESSIONTESTS && mkdir $RELEASE_TARBALLS - mv $SOURCETARBALL $RELEASE_TARBALLS - mv $REGTESTTARBALL $RELEASE_TARBALLS - cd $RELEASE_TARBALLS # We rename the source and regressiontest directories # to have names for them that don't change for different versions. - tar -xf $SOURCETARBALL - mv $SOURCENAME ../$RELEASE_SOURCE - tar -xf $REGTESTTARBALL - mv $REGTESTNAME ../$RELEASE_REGRESSIONTESTS - rm $SOURCETARBALL $REGTESTTARBALL - cd .. - echo $CMAKE_COMPILER_SCRIPT - echo $CMAKE_EXTRA_OPTIONS - echo $CMAKE_SIMD_OPTIONS - echo $CMAKE_GPU_OPTIONS - echo $CMAKE_MPI_OPTIONS - echo $CMAKE_PRECISION_OPTIONS - echo $CMAKE_BUILD_TYPE_OPTIONS - echo $CMAKE_GMXAPI_OPTIONS - if [[ -d $RELEASE_BUILD_DIR ]] ; then echo "Cleaning up build directory" ; rm -rf $RELEASE_BUILD_DIR && mkdir $RELEASE_BUILD_DIR ; else echo "Preparing new build directory" ; mkdir $RELEASE_BUILD_DIR ; fi - cd $RELEASE_BUILD_DIR - which $CMAKE - $CMAKE --version - $CMAKE ../$RELEASE_SOURCE/ -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache $CMAKE_COMPILER_SCRIPT $CMAKE_EXTRA_OPTIONS $CMAKE_SIMD_OPTIONS $CMAKE_MPI_OPTIONS $CMAKE_PRECISION_OPTIONS $CMAKE_BUILD_TYPE_OPTIONS $CMAKE_GPU_OPTIONS $CMAKE_GMXAPI_OPTIONS $CMAKE_REGRESSIONTEST_OPTIONS -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR 2>&1 | tee cmakeLog.log - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log - if [ -s cmakeErrors.log ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi - cd .. artifacts: when: always paths: - $RELEASE_BUILD_DIR - $RELEASE_REGRESSIONTESTS - $RELEASE_SOURCE .gromacs:base:build: stage: build script: - bash -x admin/ci-scripts/gromacs-base-build.sh artifacts: when: always paths: - $BUILD_DIR - $INSTALL_DIR/ .gromacs:static-analyzer-build: stage: build script: - CMAKE=${CMAKE:-$(which cmake)} - cd $BUILD_DIR - which $CMAKE - $CMAKE --version - scan-build -o scan_html $CMAKE --build . -- -j8 2>&1 | tee buildLogFile.log - awk '/warning/,/warning.*generated|^$/' buildLogFile.log | grep -v "CMake" | tee buildErrors.log || true - grep "cannot be built" buildLogFile.log | tee -a buildErrors.log || true - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi - cd .. artifacts: when: always paths: - $BUILD_DIR/scan_html .gromacs:base:test: extends: - .variables:default stage: test cache: {} retry: max: 1 variables: CTEST_RUN_MODE: "ExperimentalTest" script: - bash -x admin/ci-scripts/gromacs-base-test.sh artifacts: reports: junit: $BUILD_DIR/JUnitTestResults.xml paths: - $BUILD_DIR/Testing - $BUILD_DIR/tests when: always expire_in: 1 week .gromacs:base:regressiontest: extends: - .variables:default variables: KUBERNETES_CPU_LIMIT: 4 KUBERNETES_CPU_REQUEST: 4 KUBERNETES_MEMORY_REQUEST: 4Gi REGRESSIONTEST_TOTAL_RANK_NUMBER: 4 REGRESSIONTEST_OMP_RANK_NUMBER: 2 REGRESSIONTEST_PME_RANK_NUMBER: 1 REGRESSIONTEST_MPI_RUN_COMMAND: "" REGRESSIONTEST_DOUBLE: "" REGRESSIONTEST_PARALLEL: "-nt" stage: test cache: {} retry: max: 1 script: - export LSAN_OPTIONS="suppressions=$CI_PROJECT_DIR/admin/lsan-suppressions.txt:print_suppressions=0" - export ASAN_OPTIONS="check_initialization_order=1:detect_invalid_pointer_pairs=1:strict_init_order=true:strict_string_checks=true:detect_stack_use_after_return=true" # Needed to run MPI enabled code in the docker images, until we set up different users - export OMPI_ALLOW_RUN_AS_ROOT=1 - export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 - tar xzf gmx-regressiontests.tar.gz - source $INSTALL_DIR/bin/GMXRC - cd regressiontests - perl gmxtest.pl $REGRESSIONTEST_PARALLEL $REGRESSIONTEST_TOTAL_RANK_NUMBER -ntomp $REGRESSIONTEST_OMP_RANK_NUMBER -npme $REGRESSIONTEST_PME_RANK_NUMBER $REGRESSIONTEST_DOUBLE $REGRESSIONTEST_MPI_RUN_COMMAND -xml all artifacts: paths: - regressiontests/gmxtest.xml when: always expire_in: 1 week include: - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-8-cuda-11.0-release.gitlab-ci.yml' - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-8.gitlab-ci.yml' - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-13-mpi.gitlab-ci.yml' - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-13-release.gitlab-ci.yml' - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-12-cuda-11.4.1.gitlab-ci.yml' - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-ASAN.gitlab-ci.yml' - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-static-analyzer.gitlab-ci.yml' - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-TSAN.gitlab-ci.yml' - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-UBSAN.gitlab-ci.yml' - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11.gitlab-ci.yml' - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-coverage.gitlab-ci.yml' - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-7-cuda-11.0.gitlab-ci.yml' - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-7-cuda-11.0-mpi.gitlab-ci.yml' - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-cuda-11.4.1.gitlab-ci.yml' - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-cuda-11.4.1-release.gitlab-ci.yml' - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-release.gitlab-ci.yml' - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.hipsycl-dev.gitlab-ci.yml' - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.oneapi-2021.4.0-opencl.gitlab-ci.yml' - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.oneapi-2021.4.0-opencl-release.gitlab-ci.yml' - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.oneapi-2021.4.0-sycl.gitlab-ci.yml' - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.oneapi-2021.4.0-sycl-nightly.gitlab-ci.yml'