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
27 - echo $CMAKE_COMPILER_SCRIPT
28 - echo $CMAKE_EXTRA_OPTIONS
29 - echo $CMAKE_SIMD_OPTIONS
30 - echo $CMAKE_GPU_OPTIONS
31 - echo $CMAKE_MPI_OPTIONS
32 - echo $CMAKE_PRECISION_OPTIONS
33 - echo $CMAKE_BUILD_TYPE_OPTIONS
34 - echo $CMAKE_GMXAPI_OPTIONS
35 - if [[ -d $BUILD_DIR ]] ; then
36 echo "Cleaning up build directory" ;
37 rm -rf $BUILD_DIR && mkdir $BUILD_DIR ;
39 echo "Preparing new build directory" ;
44 -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
45 $CMAKE_COMPILER_SCRIPT
49 $CMAKE_PRECISION_OPTIONS
50 $CMAKE_BUILD_TYPE_OPTIONS
53 -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
54 2>&1 | tee cmakeLog.log
55 - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
56 - if [ -s cmakeErrors.log ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
57 - cmake --build . -- -j8 2>&1 | tee buildLogFile.log
58 - cmake --build . --target tests -- -j8 2>&1 | tee testBuildLogFile.log
59 - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
60 | grep -v "CMake" | tee buildErrors.log || true
61 - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
62 - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
63 - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
64 - ctest -D ExperimentalTest --output-on-failure | tee ctestLog.log || true
65 - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
66 ctestLog.log | tee ctestErrors.log
67 - xsltproc scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/Test.xml > JUnitTestResults.xml
68 - if [ -s ctestErrors.log ] ; then
69 echo "Error during running ctest";
75 junit: $BUILD_DIR/JUnitTestResults.xml
81 # Jobs running in first pre-build stage
83 .gromacs:base:configure:
87 stage: configure-build
89 KUBERNETES_CPU_LIMIT: 1
90 KUBERNETES_CPU_REQUEST: 1
91 KUBERNETES_MEMORY_LIMIT: 2Gi
92 CMAKE_COMPILER_SCRIPT: ""
93 CMAKE_EXTRA_OPTIONS: ""
94 CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AUTO"
95 CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
96 CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
97 CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=Debug"
98 CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
99 CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
101 - echo $CMAKE_COMPILER_SCRIPT
102 - echo $CMAKE_EXTRA_OPTIONS
103 - echo $CMAKE_SIMD_OPTIONS
104 - echo $CMAKE_GPU_OPTIONS
105 - echo $CMAKE_MPI_OPTIONS
106 - echo $CMAKE_PRECISION_OPTIONS
107 - echo $CMAKE_BUILD_TYPE_OPTIONS
108 - echo $CMAKE_GMXAPI_OPTIONS
109 - if [[ -d $BUILD_DIR ]] ; then
110 rm -rf $BUILD_DIR && mkdir $BUILD_DIR ;
112 echo "Preparing new build directory" ;
117 -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
118 $CMAKE_COMPILER_SCRIPT
122 $CMAKE_PRECISION_OPTIONS
123 $CMAKE_BUILD_TYPE_OPTIONS
125 $CMAKE_GMXAPI_OPTIONS
126 -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
127 2>&1 | tee cmakeLog.log
128 - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
129 - if [ -s cmakeErrors.log ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
136 .gromacs:base:release:configure:
140 stage: release-configure
142 KUBERNETES_CPU_LIMIT: 1
143 KUBERNETES_CPU_REQUEST: 1
144 KUBERNETES_MEMORY_LIMIT: 2Gi
145 CMAKE_COMPILER_SCRIPT: ""
146 CMAKE_EXTRA_OPTIONS: ""
147 CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AUTO"
148 CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
149 CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
150 CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
151 CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
152 CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
153 RELEASE_BUILD_DIR: release-builds
154 RELEASE_SOURCE: release-source-from-tarball
155 RELEASE_REGRESSIONTESTS: release-regressiontests-from-tarball
164 - VERSION=`cat version.json |
165 python3 -c "import json,sys; print(json.load(sys.stdin)['version'])"`
166 - if [[ $GROMACS_RELEASE != "true" ]] ; then
167 VERSION=$VERSION-dev ;
169 - SOURCENAME=gromacs-$VERSION
170 - SOURCETARBALL=$SOURCENAME.tar.gz
171 - REGTESTNAME=regressiontests-$VERSION
172 - REGTESTTARBALL=$REGTESTNAME.tar.gz
173 - echo "$SOURCETARBALL"
174 - echo "$REGTESTTARBALL"
175 - RELEASE_TARBALLS=release-tarballs
176 - rm -rf $RELEASE_TARBALLS $RELEASE_SOURCE $RELEASE_REGRESSIONTESTS && mkdir $RELEASE_TARBALLS
177 - mv $SOURCETARBALL $RELEASE_TARBALLS
178 - mv $REGTESTTARBALL $RELEASE_TARBALLS
179 - cd $RELEASE_TARBALLS
180 # We rename the source and regressiontest directories
181 # to have names for them that don't change for different versions.
182 - tar -xf $SOURCETARBALL
183 - mv $SOURCENAME ../$RELEASE_SOURCE
184 - tar -xf $REGTESTTARBALL
185 - mv $REGTESTNAME ../$RELEASE_REGRESSIONTESTS
186 - rm $SOURCETARBALL $REGTESTTARBALL
188 - echo $CMAKE_COMPILER_SCRIPT
189 - echo $CMAKE_EXTRA_OPTIONS
190 - echo $CMAKE_SIMD_OPTIONS
191 - echo $CMAKE_GPU_OPTIONS
192 - echo $CMAKE_MPI_OPTIONS
193 - echo $CMAKE_PRECISION_OPTIONS
194 - echo $CMAKE_BUILD_TYPE_OPTIONS
195 - echo $CMAKE_GMXAPI_OPTIONS
196 - if [[ -d $RELEASE_BUILD_DIR ]] ; then
197 echo "Cleaning up build directory" ;
198 rm -rf $RELEASE_BUILD_DIR && mkdir $RELEASE_BUILD_DIR ;
200 echo "Preparing new build directory" ;
201 mkdir $RELEASE_BUILD_DIR ;
203 - cd $RELEASE_BUILD_DIR
204 - cmake ../$RELEASE_SOURCE/
205 -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
206 $CMAKE_COMPILER_SCRIPT
210 $CMAKE_PRECISION_OPTIONS
211 $CMAKE_BUILD_TYPE_OPTIONS
213 $CMAKE_GMXAPI_OPTIONS
214 "-DREGRESSIONTEST_PATH=../$RELEASE_REGRESSIONTESTS"
215 -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
216 2>&1 | tee cmakeLog.log
217 - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
218 - if [ -s cmakeErrors.log ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
224 - $RELEASE_REGRESSIONTESTS
227 # Templates for configuration stage
229 gromacs:gcc-7:configure:
231 - .gromacs:base:configure
240 gromacs:gcc-7:release:configure:
242 - .gromacs:base:release:configure
246 RELEASE_BUILD_DIR: release-builds-gcc
255 - package-archive-release
256 - package-regressiontests-release
257 - prepare-release-version
259 gromacs:gcc-7-simd-sse41:configure:
261 - .gromacs:base:configure
267 CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
272 gromacs:gcc-7-double:configure:
274 - .gromacs:base:configure
280 CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
285 gromacs:gcc-7-double:release:configure:
287 - .gromacs:base:release:configure
291 CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
292 RELEASE_BUILD_DIR: release-builds-gcc
301 - package-archive-release
302 - package-regressiontests-release
303 - prepare-release-version
305 gromacs:gcc-7:configure-gmxapi:
307 - .gromacs:base:configure
308 - .configure-gmxapi-template
317 gromacs:gcc-7:release:configure-gmxapi:
319 - .gromacs:base:release:configure
320 - .configure-gmxapi-template
324 RELEASE_BUILD_DIR: release-builds-gcc
333 - package-archive-release
334 - package-regressiontests-release
335 - prepare-release-version
337 gromacs:gcc-8:configure:
339 - .gromacs:base:configure
348 gromacs:gcc-8:release:configure:
350 - .gromacs:base:release:configure
354 RELEASE_BUILD_DIR: release-builds-gcc
363 - package-archive-release
364 - package-regressiontests-release
365 - prepare-release-version
367 gromacs:gcc-8-cuda-10.2:configure:
369 - .gromacs:base:configure
371 - .use-gcc8:cuda-10.2
379 # For version of clang before 7, we need to always provide the full version
380 # Use something like this instead in the download script:
381 # APT_COMPILER_VERSION=$(($COMPILER_MAJOR_VERSION < 7 ? "${COMPILER_MAJOR_VERSION}.0" : $COMPILER_MAJOR_VERSION))
382 gromacs:clang-6:configure:
384 - .gromacs:base:configure
390 COMPILER_MAJOR_VERSION: "6.0"
391 CMAKE_MPI_OPTIONS: -DGMX_OPENMP=OFF
396 gromacs:clang-7:configure:
398 - .gromacs:base:configure
407 gromacs:clang-7:release:configure:
409 - .gromacs:base:release:configure
413 RELEASE_BUILD_DIR: release-builds-clang
422 - package-archive-release
423 - package-regressiontests-release
424 - prepare-release-version
426 gromacs:clang-7:configure-gmxapi:
428 - .gromacs:base:configure
429 - .configure-gmxapi-template
438 gromacs:clang-7:release:configure-gmxapi:
440 - .gromacs:base:release:configure
441 - .configure-gmxapi-template
445 RELEASE_BUILD_DIR: release-builds-clang
454 - package-archive-release
455 - package-regressiontests-release
456 - prepare-release-version
458 gromacs:clang-8:configure:
460 - .gromacs:base:configure
469 gromacs:clang-8:release:configure:
471 - .gromacs:base:release:configure
475 RELEASE_BUILD_DIR: release-builds-clang
484 - package-archive-release
485 - package-regressiontests-release
486 - prepare-release-version
488 # Jobs running during build stage
491 # Dockerfiles are from dockerhub, user eriklindahl
492 # image in admin/dockerimages/ci-docs-py27
496 - cmake --build . -- -j8 2>&1 | tee buildLogFile.log
497 - cmake --build . --target tests -- -j8 2>&1 | tee testBuildLogFile.log
498 - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
499 | grep -v "CMake" | tee buildErrors.log || true
500 - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
501 - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
502 - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
512 - .gromacs:base:build
519 - job: gromacs:gcc-7:configure
525 gromacs:gcc-7:release:build:
527 - .gromacs:base:build
533 BUILD_DIR: release-builds-gcc
535 - job: gromacs:gcc-7:release:configure
545 gromacs:gcc-7-simd-sse41:build:
547 - .gromacs:base:build
554 - job: gromacs:gcc-7-simd-sse41:configure
560 gromacs:gcc-7-double:build:
562 - .gromacs:base:build
569 - job: gromacs:gcc-7-double:configure
575 gromacs:gcc-7:build-gmxapi:
577 - .gromacs:base:build
580 - .gmxapi-extra-installs
585 - job: gromacs:gcc-7:configure-gmxapi
591 gromacs:gcc-7-double:release:build:
593 - .gromacs:base:build
599 BUILD_DIR: release-builds-gcc
601 - job: gromacs:gcc-7-double:release:configure
611 gromacs:gcc-7:release:build-gmxapi:
613 - .gromacs:base:build
616 - .gmxapi-extra-installs
620 BUILD_DIR: release-builds-gcc
622 - job: gromacs:gcc-7:release:configure-gmxapi
634 - .gromacs:base:build
641 - job: gromacs:gcc-8:configure
647 gromacs:gcc-8:release:build:
649 - .gromacs:base:build
655 BUILD_DIR: release-builds-gcc
657 - job: gromacs:gcc-8:release:configure
667 gromacs:gcc-8-cuda-10.2:build:
669 - .gromacs:base:build
673 - .use-gcc8:cuda-10.2
677 - job: gromacs:gcc-8-cuda-10.2:configure
683 gromacs:clang-6:build:
685 - .gromacs:base:build
692 - job: gromacs:clang-6:configure
698 gromacs:clang-7:build:
700 - .gromacs:base:build
707 - job: gromacs:clang-7:configure
713 gromacs:clang-7:release:build:
715 - .gromacs:base:build
721 BUILD_DIR: release-builds-clang
723 - job: gromacs:clang-7:release:configure
733 gromacs:clang-7:build-gmxapi:
735 - .gromacs:base:build
738 - .gmxapi-extra-installs
743 - job: gromacs:clang-7:configure-gmxapi
749 gromacs:clang-7:release:build-gmxapi:
751 - .gromacs:base:build
754 - .gmxapi-extra-installs
758 BUILD_DIR: release-builds-clang
760 - job: gromacs:clang-7:release:configure-gmxapi
770 gromacs:clang-8:build:
772 - .gromacs:base:build
779 - job: gromacs:clang-8:configure
785 gromacs:clang-8:release:build:
787 - .gromacs:base:build
793 BUILD_DIR: release-builds-clang
795 - job: gromacs:clang-8:release:configure
806 # Jobs running during test stage
816 - ctest -D ExperimentalTest --output-on-failure | tee ctestLog.log || true
817 - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
818 ctestLog.log | tee ctestErrors.log
819 - xsltproc scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/Test.xml > JUnitTestResults.xml
820 - if [ -s ctestErrors.log ] ; then
821 echo "Error during running ctest";
827 junit: $BUILD_DIR/JUnitTestResults.xml
841 - job: gromacs:gcc-7:build
846 gromacs:gcc-7:release:test:
852 BUILD_DIR: release-builds-gcc
854 - job: gromacs:gcc-7:release:configure
856 - job: gromacs:gcc-7:release:build
866 gromacs:gcc-7-simd-sse41:test:
873 - job: gromacs:gcc-7-simd-sse41:build
878 gromacs:gcc-7-double:test:
885 - job: gromacs:gcc-7-double:build
890 gromacs:gcc-7-double:release:test:
896 BUILD_DIR: release-builds-gcc
898 - job: gromacs:gcc-7-double:release:configure
900 - job: gromacs:gcc-7-double:release:build
910 gromacs:gcc-7:test-gmxapi:
913 - .gmxapi-extra-installs
918 - job: gromacs:gcc-7:build-gmxapi
923 gromacs:gcc-7:release:test-gmxapi:
926 - .gmxapi-extra-installs
930 BUILD_DIR: release-builds-gcc
932 - job: gromacs:gcc-7:release:configure-gmxapi
934 - job: gromacs:gcc-7:release:build-gmxapi
951 - job: gromacs:gcc-8:build
956 gromacs:gcc-8:release:test:
962 BUILD_DIR: release-builds-gcc
964 - job: gromacs:gcc-8:release:configure
966 - job: gromacs:gcc-8:release:build
976 gromacs:gcc-8-cuda-10.2:test:
978 KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
979 KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
983 - .use-gcc8:cuda-10.2
987 - job: gromacs:gcc-8-cuda-10.2:build
992 gromacs:clang-6:test:
999 - job: gromacs:clang-6:build
1004 gromacs:clang-7:test:
1006 - .gromacs:base:test
1011 - job: gromacs:clang-7:build
1016 gromacs:clang-7:release:test:
1018 - .gromacs:base:test
1020 stage: release-tests
1022 BUILD_DIR: release-builds-clang
1024 - job: gromacs:clang-7:release:configure
1026 - job: gromacs:clang-7:release:build
1036 gromacs:clang-7:test-gmxapi:
1038 - .gromacs:base:test
1039 - .gmxapi-extra-installs
1044 - job: gromacs:clang-7:build-gmxapi
1049 gromacs:clang-7:release:test-gmxapi:
1051 - .gromacs:base:test
1052 - .gmxapi-extra-installs
1054 stage: release-tests
1056 BUILD_DIR: release-builds-clang
1058 - job: gromacs:clang-7:release:configure-gmxapi
1060 - job: gromacs:clang-7:release:build-gmxapi
1070 gromacs:clang-8:test:
1072 - .gromacs:base:test
1077 - job: gromacs:clang-8:build
1082 gromacs:clang-8:release:test:
1084 - .gromacs:base:test
1086 stage: release-tests
1088 BUILD_DIR: release-builds-clang
1090 - job: gromacs:clang-8:release:configure
1092 - job: gromacs:clang-8:release:build