1 # Build, test, and install variously configured GROMACS installations.
3 # Initial build that always needs to pass before follow-up stages run
11 KUBERNETES_CPU_LIMIT: 8
12 KUBERNETES_CPU_REQUEST: 4
13 KUBERNETES_MEMORY_LIMIT: 8Gi
14 CMAKE_COMPILER_SCRIPT: ""
15 CMAKE_EXTRA_OPTIONS: ""
16 CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=None"
17 CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
18 CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
19 CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=Debug"
20 CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
21 CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
22 BUILD_DIR: simple-build
33 - echo $CMAKE_COMPILER_SCRIPT
34 - echo $CMAKE_EXTRA_OPTIONS
35 - echo $CMAKE_SIMD_OPTIONS
36 - echo $CMAKE_GPU_OPTIONS
37 - echo $CMAKE_MPI_OPTIONS
38 - echo $CMAKE_PRECISION_OPTIONS
39 - echo $CMAKE_BUILD_TYPE_OPTIONS
40 - echo $CMAKE_GMXAPI_OPTIONS
41 - if [[ -d $BUILD_DIR ]] ; then
42 echo "Cleaning up build directory" ;
43 rm -rf $BUILD_DIR && mkdir $BUILD_DIR ;
45 echo "Preparing new build directory" ;
50 -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
51 $CMAKE_COMPILER_SCRIPT
55 $CMAKE_PRECISION_OPTIONS
56 $CMAKE_BUILD_TYPE_OPTIONS
59 -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
60 2>&1 | tee cmakeLog.log
61 - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
62 - if [ -s cmakeErrors.log ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
63 - cmake --build . -- -j8 2>&1 | tee buildLogFile.log
64 - cmake --build . --target tests -- -j8 2>&1 | tee testBuildLogFile.log
65 - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
66 | grep -v "CMake" | tee buildErrors.log || true
67 - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
68 - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
69 - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
70 - ctest -D ExperimentalTest --output-on-failure | tee ctestLog.log || true
71 - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
72 ctestLog.log | tee ctestErrors.log
73 - xsltproc scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/Test.xml > JUnitTestResults.xml
74 - if [ -s ctestErrors.log ] ; then
75 echo "Error during running ctest";
81 junit: $BUILD_DIR/JUnitTestResults.xml
87 # Jobs running in first pre-build stage
89 .gromacs:base:configure:
93 stage: configure-build
101 KUBERNETES_CPU_LIMIT: 1
102 KUBERNETES_CPU_REQUEST: 1
103 KUBERNETES_MEMORY_LIMIT: 2Gi
104 CMAKE_COMPILER_SCRIPT: ""
105 CMAKE_EXTRA_OPTIONS: ""
106 CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AUTO"
107 CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
108 CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
109 CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=Debug"
110 CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
111 CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
113 - echo $CMAKE_COMPILER_SCRIPT
114 - echo $CMAKE_EXTRA_OPTIONS
115 - echo $CMAKE_SIMD_OPTIONS
116 - echo $CMAKE_GPU_OPTIONS
117 - echo $CMAKE_MPI_OPTIONS
118 - echo $CMAKE_PRECISION_OPTIONS
119 - echo $CMAKE_BUILD_TYPE_OPTIONS
120 - echo $CMAKE_GMXAPI_OPTIONS
121 - if [[ -d $BUILD_DIR ]] ; then
122 rm -rf $BUILD_DIR && mkdir $BUILD_DIR ;
124 echo "Preparing new build directory" ;
129 -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
130 $CMAKE_COMPILER_SCRIPT
134 $CMAKE_PRECISION_OPTIONS
135 $CMAKE_BUILD_TYPE_OPTIONS
137 $CMAKE_GMXAPI_OPTIONS
138 -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
139 2>&1 | tee cmakeLog.log
140 - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
141 - if [ -s cmakeErrors.log ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
148 .gromacs:base:release:configure:
152 stage: release-configure
154 KUBERNETES_CPU_LIMIT: 1
155 KUBERNETES_CPU_REQUEST: 1
156 KUBERNETES_MEMORY_LIMIT: 2Gi
157 CMAKE_COMPILER_SCRIPT: ""
158 CMAKE_EXTRA_OPTIONS: ""
159 CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AUTO"
160 CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
161 CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
162 CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
163 CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
164 CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
165 RELEASE_BUILD_DIR: release-builds
166 RELEASE_SOURCE: release-source-from-tarball
167 RELEASE_REGRESSIONTESTS: release-regressiontests-from-tarball
176 - VERSION=`cat version.json |
177 python3 -c "import json,sys; print(json.load(sys.stdin)['version'])"`
178 - if [[ $GROMACS_RELEASE != "true" ]] ; then
179 VERSION=$VERSION-dev ;
181 - SOURCENAME=gromacs-$VERSION
182 - SOURCETARBALL=$SOURCENAME.tar.gz
183 - REGTESTNAME=regressiontests-$VERSION
184 - REGTESTTARBALL=$REGTESTNAME.tar.gz
185 - echo "$SOURCETARBALL"
186 - echo "$REGTESTTARBALL"
187 - RELEASE_TARBALLS=release-tarballs
188 - rm -rf $RELEASE_TARBALLS $RELEASE_SOURCE $RELEASE_REGRESSIONTESTS && mkdir $RELEASE_TARBALLS
189 - mv $SOURCETARBALL $RELEASE_TARBALLS
190 - mv $REGTESTTARBALL $RELEASE_TARBALLS
191 - cd $RELEASE_TARBALLS
192 # We rename the source and regressiontest directories
193 # to have names for them that don't change for different versions.
194 - tar -xf $SOURCETARBALL
195 - mv $SOURCENAME ../$RELEASE_SOURCE
196 - tar -xf $REGTESTTARBALL
197 - mv $REGTESTNAME ../$RELEASE_REGRESSIONTESTS
198 - rm $SOURCETARBALL $REGTESTTARBALL
200 - echo $CMAKE_COMPILER_SCRIPT
201 - echo $CMAKE_EXTRA_OPTIONS
202 - echo $CMAKE_SIMD_OPTIONS
203 - echo $CMAKE_GPU_OPTIONS
204 - echo $CMAKE_MPI_OPTIONS
205 - echo $CMAKE_PRECISION_OPTIONS
206 - echo $CMAKE_BUILD_TYPE_OPTIONS
207 - echo $CMAKE_GMXAPI_OPTIONS
208 - if [[ -d $RELEASE_BUILD_DIR ]] ; then
209 echo "Cleaning up build directory" ;
210 rm -rf $RELEASE_BUILD_DIR && mkdir $RELEASE_BUILD_DIR ;
212 echo "Preparing new build directory" ;
213 mkdir $RELEASE_BUILD_DIR ;
215 - cd $RELEASE_BUILD_DIR
216 - cmake ../$RELEASE_SOURCE/
217 -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
218 $CMAKE_COMPILER_SCRIPT
222 $CMAKE_PRECISION_OPTIONS
223 $CMAKE_BUILD_TYPE_OPTIONS
225 $CMAKE_GMXAPI_OPTIONS
226 "-DREGRESSIONTEST_PATH=../$RELEASE_REGRESSIONTESTS"
227 -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
228 2>&1 | tee cmakeLog.log
229 - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
230 - if [ -s cmakeErrors.log ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
236 - $RELEASE_REGRESSIONTESTS
239 # Templates for configuration stage
241 gromacs:gcc-7:configure:
243 - .gromacs:base:configure
252 gromacs:gcc-7:release:configure:
254 - .gromacs:base:release:configure
258 RELEASE_BUILD_DIR: release-builds-gcc
267 - package-archive-release
268 - package-regressiontests-release
269 - prepare-release-version
271 gromacs:gcc-7-simd-sse41:configure:
273 - .gromacs:base:configure
279 CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
284 gromacs:gcc-7-double:configure:
286 - .gromacs:base:configure
292 CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
297 gromacs:gcc-7-double:release:configure:
299 - .gromacs:base:release:configure
303 CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
304 RELEASE_BUILD_DIR: release-builds-gcc
313 - package-archive-release
314 - package-regressiontests-release
315 - prepare-release-version
317 gromacs:gcc-7:configure-gmxapi:
319 - .gromacs:base:configure
320 - .configure-gmxapi-template
329 gromacs:gcc-7:release:configure-gmxapi:
331 - .gromacs:base:release:configure
332 - .configure-gmxapi-template
336 RELEASE_BUILD_DIR: release-builds-gcc
345 - package-archive-release
346 - package-regressiontests-release
347 - prepare-release-version
349 gromacs:gcc-8:configure:
351 - .gromacs:base:configure
360 gromacs:gcc-8:release:configure:
362 - .gromacs:base:release:configure
366 RELEASE_BUILD_DIR: release-builds-gcc
375 - package-archive-release
376 - package-regressiontests-release
377 - prepare-release-version
379 gromacs:gcc-8-cuda-10.2:configure:
381 - .gromacs:base:configure
383 - .use-gcc8:cuda-10.2
391 # For version of clang before 7, we need to always provide the full version
392 # Use something like this instead in the download script:
393 # APT_COMPILER_VERSION=$(($COMPILER_MAJOR_VERSION < 7 ? "${COMPILER_MAJOR_VERSION}.0" : $COMPILER_MAJOR_VERSION))
394 gromacs:clang-6:configure:
396 - .gromacs:base:configure
402 COMPILER_MAJOR_VERSION: "6.0"
403 CMAKE_MPI_OPTIONS: -DGMX_OPENMP=OFF
408 gromacs:clang-7:configure:
410 - .gromacs:base:configure
419 gromacs:clang-7:release:configure:
421 - .gromacs:base:release:configure
425 RELEASE_BUILD_DIR: release-builds-clang
434 - package-archive-release
435 - package-regressiontests-release
436 - prepare-release-version
438 gromacs:clang-7:configure-gmxapi:
440 - .gromacs:base:configure
441 - .configure-gmxapi-template
450 gromacs:clang-7:release:configure-gmxapi:
452 - .gromacs:base:release:configure
453 - .configure-gmxapi-template
457 RELEASE_BUILD_DIR: release-builds-clang
466 - package-archive-release
467 - package-regressiontests-release
468 - prepare-release-version
470 gromacs:clang-8:configure:
472 - .gromacs:base:configure
481 gromacs:clang-8:release:configure:
483 - .gromacs:base:release:configure
487 RELEASE_BUILD_DIR: release-builds-clang
496 - package-archive-release
497 - package-regressiontests-release
498 - prepare-release-version
500 # Jobs running during build stage
503 # Dockerfiles are from dockerhub, user eriklindahl
504 # image in admin/dockerimages/ci-docs-py27
514 - cmake --build . -- -j8 2>&1 | tee buildLogFile.log
515 - cmake --build . --target tests -- -j8 2>&1 | tee testBuildLogFile.log
516 - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
517 | grep -v "CMake" | tee buildErrors.log || true
518 - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
519 - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
520 - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
530 - .gromacs:base:build
537 - job: gromacs:gcc-7:configure
543 gromacs:gcc-7:release:build:
545 - .gromacs:base:build
551 BUILD_DIR: release-builds-gcc
553 - job: gromacs:gcc-7:release:configure
563 gromacs:gcc-7-simd-sse41:build:
565 - .gromacs:base:build
572 - job: gromacs:gcc-7-simd-sse41:configure
578 gromacs:gcc-7-double:build:
580 - .gromacs:base:build
587 - job: gromacs:gcc-7-double:configure
593 gromacs:gcc-7:build-gmxapi:
595 - .gromacs:base:build
598 - .gmxapi-extra-installs
603 - job: gromacs:gcc-7:configure-gmxapi
609 gromacs:gcc-7-double:release:build:
611 - .gromacs:base:build
617 BUILD_DIR: release-builds-gcc
619 - job: gromacs:gcc-7-double:release:configure
629 gromacs:gcc-7:release:build-gmxapi:
631 - .gromacs:base:build
634 - .gmxapi-extra-installs
638 BUILD_DIR: release-builds-gcc
640 - job: gromacs:gcc-7:release:configure-gmxapi
652 - .gromacs:base:build
659 - job: gromacs:gcc-8:configure
665 gromacs:gcc-8:release:build:
667 - .gromacs:base:build
673 BUILD_DIR: release-builds-gcc
675 - job: gromacs:gcc-8:release:configure
685 gromacs:gcc-8-cuda-10.2:build:
687 - .gromacs:base:build
691 - .use-gcc8:cuda-10.2
695 - job: gromacs:gcc-8-cuda-10.2:configure
701 gromacs:clang-6:build:
703 - .gromacs:base:build
710 - job: gromacs:clang-6:configure
716 gromacs:clang-7:build:
718 - .gromacs:base:build
725 - job: gromacs:clang-7:configure
731 gromacs:clang-7:release:build:
733 - .gromacs:base:build
739 BUILD_DIR: release-builds-clang
741 - job: gromacs:clang-7:release:configure
751 gromacs:clang-7:build-gmxapi:
753 - .gromacs:base:build
756 - .gmxapi-extra-installs
761 - job: gromacs:clang-7:configure-gmxapi
767 gromacs:clang-7:release:build-gmxapi:
769 - .gromacs:base:build
772 - .gmxapi-extra-installs
776 BUILD_DIR: release-builds-clang
778 - job: gromacs:clang-7:release:configure-gmxapi
788 gromacs:clang-8:build:
790 - .gromacs:base:build
797 - job: gromacs:clang-8:configure
803 gromacs:clang-8:release:build:
805 - .gromacs:base:build
811 BUILD_DIR: release-builds-clang
813 - job: gromacs:clang-8:release:configure
824 # Jobs running during test stage
828 REGRESSIONTEST_TOTAL_RANK_NUMBER: 4
829 REGRESSIONTEST_OMP_RANK_NUMBER: 2
830 REGRESSIONTEST_PME_RANK_NUMBER: 1
831 REGRESSIONTEST_MPI_RUN_COMMAND: ""
832 REGRESSIONTEST_DOUBLE: ""
846 - ctest -D ExperimentalTest --output-on-failure | tee ctestLog.log || true
847 - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
848 ctestLog.log | tee ctestErrors.log
849 - xsltproc scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/Test.xml > JUnitTestResults.xml
850 - if [ -s ctestErrors.log ] ; then
851 echo "Error during running ctest";
855 - tar xzf gmx-regressiontests.tar.gz
856 - source $INSTALL_DIR/bin/GMXRC
858 - echo "perl gmxtest.pl -nt $REGRESSIONTEST_TOTAL_RANK_NUMBER -ntomp $REGRESSIONTEST_OMP_RANK_NUMBER -npme $REGRESSIONTEST_PME_RANK_NUMBER $REGRESSIONTEST_DOUBLE $REGRESSIONTEST_MPI_RUN_COMMAND"
859 - perl gmxtest.pl -nt $REGRESSIONTEST_TOTAL_RANK_NUMBER -ntomp $REGRESSIONTEST_OMP_RANK_NUMBER -npme $REGRESSIONTEST_PME_RANK_NUMBER $REGRESSIONTEST_DOUBLE $REGRESSIONTEST_MPI_RUN_COMMAND -xml all
862 junit: $BUILD_DIR/JUnitTestResults.xml
877 - job: gromacs:gcc-7:build
878 - job: prepare-regressiontests
883 gromacs:gcc-7:release:test:
889 BUILD_DIR: release-builds-gcc
891 - job: gromacs:gcc-7:release:configure
893 - job: gromacs:gcc-7:release:build
903 gromacs:gcc-7-simd-sse41:test:
910 - job: gromacs:gcc-7-simd-sse41:build
911 - job: prepare-regressiontests
916 gromacs:gcc-7-double:test:
921 REGRESSIONTEST_DOUBLE: "-double"
925 - job: gromacs:gcc-7-double:build
926 - job: prepare-regressiontests
931 gromacs:gcc-7-double:release:test:
937 BUILD_DIR: release-builds-gcc
939 - job: gromacs:gcc-7-double:release:configure
941 - job: gromacs:gcc-7-double:release:build
951 gromacs:gcc-7:test-gmxapi:
954 - .gmxapi-extra-installs
959 - job: gromacs:gcc-7:build-gmxapi
960 - job: prepare-regressiontests
965 gromacs:gcc-7:release:test-gmxapi:
968 - .gmxapi-extra-installs
972 BUILD_DIR: release-builds-gcc
974 - job: gromacs:gcc-7:release:configure-gmxapi
976 - job: gromacs:gcc-7:release:build-gmxapi
993 - job: gromacs:gcc-8:build
994 - job: prepare-regressiontests
999 gromacs:gcc-8:release:test:
1001 - .gromacs:base:test
1003 stage: release-tests
1005 BUILD_DIR: release-builds-gcc
1007 - job: gromacs:gcc-8:release:configure
1009 - job: gromacs:gcc-8:release:build
1019 gromacs:gcc-8-cuda-10.2:test:
1021 KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
1022 KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
1023 REGRESSIONTEST_PME_RANK_NUMBER: 0
1024 REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
1025 REGRESSIONTEST_OMP_RANK_NUMBER: 1
1027 - .gromacs:base:test
1029 - .use-gcc8:cuda-10.2
1033 - job: gromacs:gcc-8-cuda-10.2:build
1034 - job: prepare-regressiontests
1039 gromacs:clang-6:test:
1041 - .gromacs:base:test
1044 REGRESSIONTEST_OMP_RANK_NUMBER: 0
1048 - job: gromacs:clang-6:build
1049 - job: prepare-regressiontests
1054 gromacs:clang-7:test:
1056 - .gromacs:base:test
1061 - job: gromacs:clang-7:build
1062 - job: prepare-regressiontests
1067 gromacs:clang-7:release:test:
1069 - .gromacs:base:test
1071 stage: release-tests
1073 BUILD_DIR: release-builds-clang
1075 - job: gromacs:clang-7:release:configure
1077 - job: gromacs:clang-7:release:build
1087 gromacs:clang-7:test-gmxapi:
1089 - .gromacs:base:test
1090 - .gmxapi-extra-installs
1095 - job: gromacs:clang-7:build-gmxapi
1096 - job: prepare-regressiontests
1101 gromacs:clang-7:release:test-gmxapi:
1103 - .gromacs:base:test
1104 - .gmxapi-extra-installs
1106 stage: release-tests
1108 BUILD_DIR: release-builds-clang
1110 - job: gromacs:clang-7:release:configure-gmxapi
1112 - job: gromacs:clang-7:release:build-gmxapi
1122 gromacs:clang-8:test:
1124 - .gromacs:base:test
1129 - job: gromacs:clang-8:build
1130 - job: prepare-regressiontests
1135 gromacs:clang-8:release:test:
1137 - .gromacs:base:test
1139 stage: release-tests
1141 BUILD_DIR: release-builds-clang
1143 - job: gromacs:clang-8:release:configure
1145 - job: gromacs:clang-8:release:build