1 # Build, test, and install variously configured GROMACS installations.
3 # Initial build that always needs to pass before follow-up stages run
9 - .rules:not-for-release
12 KUBERNETES_CPU_LIMIT: 8
13 KUBERNETES_CPU_REQUEST: 4
14 KUBERNETES_MEMORY_LIMIT: 8Gi
15 CMAKE_COMPILER_SCRIPT: ""
16 CMAKE_EXTRA_OPTIONS: ""
17 CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=None"
18 CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
19 CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
20 CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=Debug"
21 CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
22 CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
23 BUILD_DIR: simple-build
25 - echo $CMAKE_COMPILER_SCRIPT
26 - echo $CMAKE_EXTRA_OPTIONS
27 - echo $CMAKE_SIMD_OPTIONS
28 - echo $CMAKE_GPU_OPTIONS
29 - echo $CMAKE_MPI_OPTIONS
30 - echo $CMAKE_PRECISION_OPTIONS
31 - echo $CMAKE_BUILD_TYPE_OPTIONS
32 - echo $CMAKE_GMXAPI_OPTIONS
33 - if [[ -d $BUILD_DIR ]] ; then
34 echo "Cleaning up build directory" ;
35 rm -rf $BUILD_DIR && mkdir $BUILD_DIR ;
37 echo "Preparing new build directory" ;
42 -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
43 $CMAKE_COMPILER_SCRIPT
47 $CMAKE_PRECISION_OPTIONS
48 $CMAKE_BUILD_TYPE_OPTIONS
51 -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
52 2>&1 | tee cmakeLog.log
53 - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
54 - if [ -s cmakeErrors.log ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
55 - cmake --build . -- -j8 2>&1 | tee buildLogFile.log
56 - cmake --build . --target tests -- -j8 2>&1 | tee testBuildLogFile.log
57 - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
58 | grep -v "CMake" | tee buildErrors.log || true
59 - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
60 - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
61 - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
62 - ctest -D ExperimentalTest --output-on-failure | tee ctestLog.log || true
63 - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
64 ctestLog.log | tee ctestErrors.log
65 - xsltproc scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/Test.xml > JUnitTestResults.xml
66 - if [ -s ctestErrors.log ] ; then
67 echo "Error during running ctest";
73 junit: $BUILD_DIR/JUnitTestResults.xml
79 # Jobs running in first pre-build stage
81 .gromacs:base:configure:
85 stage: configure-build
87 KUBERNETES_CPU_LIMIT: 1
88 KUBERNETES_CPU_REQUEST: 1
89 KUBERNETES_MEMORY_LIMIT: 2Gi
90 CMAKE_COMPILER_SCRIPT: ""
91 CMAKE_EXTRA_OPTIONS: ""
92 CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AUTO"
93 CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
94 CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
95 CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=Debug"
96 CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
98 - echo $CMAKE_COMPILER_SCRIPT
99 - echo $CMAKE_EXTRA_OPTIONS
100 - echo $CMAKE_SIMD_OPTIONS
101 - echo $CMAKE_GPU_OPTIONS
102 - echo $CMAKE_MPI_OPTIONS
103 - echo $CMAKE_PRECISION_OPTIONS
104 - echo $CMAKE_BUILD_TYPE_OPTIONS
105 - echo $CMAKE_GMXAPI_OPTIONS
106 - if [[ -d $BUILD_DIR ]] ; then
107 rm -rf $BUILD_DIR && mkdir $BUILD_DIR ;
109 echo "Preparing new build directory" ;
114 -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
115 $CMAKE_COMPILER_SCRIPT
119 $CMAKE_PRECISION_OPTIONS
120 $CMAKE_BUILD_TYPE_OPTIONS
122 $CMAKE_GMXAPI_OPTIONS
123 -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
124 2>&1 | tee cmakeLog.log
125 - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
126 - if [ -s cmakeErrors.log ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
133 .gromacs:base:release:configure:
137 stage: release-configure
139 KUBERNETES_CPU_LIMIT: 1
140 KUBERNETES_CPU_REQUEST: 1
141 KUBERNETES_MEMORY_LIMIT: 2Gi
142 CMAKE_COMPILER_SCRIPT: ""
143 CMAKE_EXTRA_OPTIONS: ""
144 CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AUTO"
145 CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
146 CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
147 CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
148 CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
149 RELEASE_BUILD_DIR: release-builds
150 RELEASE_SOURCE: release-source-from-tarball
151 RELEASE_REGRESSIONTESTS: release-regressiontests-from-tarball
153 - VERSION=`cat version.json |
154 python3 -c "import json,sys; print(json.load(sys.stdin)['version'])"`
155 - if [[ $GROMACS_RELEASE != "true" ]] ; then
156 VERSION=$VERSION-dev ;
158 - SOURCENAME=gromacs-$VERSION
159 - SOURCETARBALL=$SOURCENAME.tar.gz
160 - REGTESTNAME=regressiontests-$VERSION
161 - REGTESTTARBALL=$REGTESTNAME.tar.gz
162 - echo "$SOURCETARBALL"
163 - echo "$REGTESTTARBALL"
164 - RELEASE_TARBALLS=release-tarballs
165 - rm -rf $RELEASE_TARBALLS $RELEASE_SOURCE $RELEASE_REGRESSIONTESTS && mkdir $RELEASE_TARBALLS
166 - mv $SOURCETARBALL $RELEASE_TARBALLS
167 - mv $REGTESTTARBALL $RELEASE_TARBALLS
168 - cd $RELEASE_TARBALLS
169 # We rename the source and regressiontest directories
170 # to have names for them that don't change for different versions.
171 - tar -xf $SOURCETARBALL
172 - mv $SOURCENAME ../$RELEASE_SOURCE
173 - tar -xf $REGTESTTARBALL
174 - mv $REGTESTNAME ../$RELEASE_REGRESSIONTESTS
175 - rm $SOURCETARBALL $REGTESTTARBALL
177 - echo $CMAKE_COMPILER_SCRIPT
178 - echo $CMAKE_EXTRA_OPTIONS
179 - echo $CMAKE_SIMD_OPTIONS
180 - echo $CMAKE_GPU_OPTIONS
181 - echo $CMAKE_MPI_OPTIONS
182 - echo $CMAKE_PRECISION_OPTIONS
183 - echo $CMAKE_BUILD_TYPE_OPTIONS
184 - echo $CMAKE_GMXAPI_OPTIONS
185 - if [[ -d $RELEASE_BUILD_DIR ]] ; then
186 echo "Cleaning up build directory" ;
187 rm -rf $RELEASE_BUILD_DIR && mkdir $RELEASE_BUILD_DIR ;
189 echo "Preparing new build directory" ;
190 mkdir $RELEASE_BUILD_DIR ;
192 - cd $RELEASE_BUILD_DIR
193 - cmake ../$RELEASE_SOURCE/
194 -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
195 $CMAKE_COMPILER_SCRIPT
199 $CMAKE_PRECISION_OPTIONS
200 $CMAKE_BUILD_TYPE_OPTIONS
202 $CMAKE_GMXAPI_OPTIONS
203 "-DREGRESSIONTEST_PATH=../$RELEASE_REGRESSIONTESTS"
204 -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
205 2>&1 | tee cmakeLog.log
206 - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
207 - if [ -s cmakeErrors.log ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
213 - $RELEASE_REGRESSIONTESTS
216 # Templates for configuration stage
218 gromacs:gcc-7:configure:
220 - .gromacs:base:configure
222 - .rules:not-for-release
227 gromacs:gcc-7:release:configure:
229 - .gromacs:base:release:configure
231 - .rules:nightly-only-for-release
234 RELEASE_BUILD_DIR: release-builds-gcc
237 - regressiontests:package
238 - prepare-release-version
240 gromacs:gcc-7-simd-sse41:configure:
242 - .gromacs:base:configure
244 - .rules:not-for-release
249 CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
251 gromacs:gcc-7-double:configure:
253 - .gromacs:base:configure
255 - .rules:not-for-release
260 CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
262 gromacs:gcc-7-double:release:configure:
264 - .gromacs:base:release:configure
266 - .rules:nightly-only-for-release
269 CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
270 RELEASE_BUILD_DIR: release-builds-gcc
273 - regressiontests:package
274 - prepare-release-version
276 gromacs:gcc-8:configure:
278 - .gromacs:base:configure
280 - .rules:not-for-release
285 gromacs:gcc-8:release:configure:
287 - .gromacs:base:release:configure
289 - .rules:nightly-only-for-release
292 RELEASE_BUILD_DIR: release-builds-gcc
295 - regressiontests:package
296 - prepare-release-version
298 gromacs:gcc-8-cuda-10.2:configure:
300 - .gromacs:base:configure
302 - .use-gcc8:cuda-10.2
303 - .rules:not-for-release
305 CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
306 # TODO: Enable GMX_PYTHON_PACKAGE when dependencies are in Docker image.
311 # For version of clang before 7, we need to always provide the full version
312 # Use something like this instead in the download script:
313 # APT_COMPILER_VERSION=$(($COMPILER_MAJOR_VERSION < 7 ? "${COMPILER_MAJOR_VERSION}.0" : $COMPILER_MAJOR_VERSION))
314 gromacs:clang-6:configure:
316 - .gromacs:base:configure
318 - .rules:not-for-release
323 COMPILER_MAJOR_VERSION: "6.0"
324 CMAKE_MPI_OPTIONS: -DGMX_OPENMP=OFF
326 gromacs:clang-7:configure:
328 - .gromacs:base:configure
330 - .rules:not-for-release
335 gromacs:clang-7:release:configure:
337 - .gromacs:base:release:configure
339 - .rules:nightly-only-for-release
342 RELEASE_BUILD_DIR: release-builds-clang
345 - regressiontests:package
346 - prepare-release-version
348 gromacs:clang-8:configure:
350 - .gromacs:base:configure
352 - .rules:not-for-release
357 gromacs:clang-8:release:configure:
359 - .gromacs:base:release:configure
361 - .rules:nightly-only-for-release
364 RELEASE_BUILD_DIR: release-builds-clang
367 - regressiontests:package
368 - prepare-release-version
370 # Jobs running during build stage
373 # Dockerfiles are from dockerhub, user eriklindahl
374 # image in admin/dockerimages/ci-docs-py27
378 - cmake --build . -- -j8 2>&1 | tee buildLogFile.log
379 - cmake --build . --target tests -- -j8 2>&1 | tee testBuildLogFile.log
380 - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
381 | grep -v "CMake" | tee buildErrors.log || true
382 - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
383 - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
384 - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
394 - .gromacs:base:build
398 - .rules:not-for-release
402 - job: gromacs:gcc-7:configure
405 gromacs:gcc-7:release:build:
407 - .gromacs:base:build
411 - .rules:nightly-only-for-release
414 BUILD_DIR: release-builds-gcc
416 - job: gromacs:gcc-7:release:configure
419 gromacs:gcc-7-simd-sse41:build:
421 - .gromacs:base:build
425 - .rules:not-for-release
429 - job: gromacs:gcc-7-simd-sse41:configure
432 gromacs:gcc-7-double:build:
434 - .gromacs:base:build
438 - .rules:not-for-release
442 - job: gromacs:gcc-7-double:configure
445 gromacs:gcc-7-double:release:build:
447 - .gromacs:base:build
451 - .rules:nightly-only-for-release
454 BUILD_DIR: release-builds-gcc
456 - job: gromacs:gcc-7-double:release:configure
461 - .gromacs:base:build
465 - .rules:not-for-release
469 - job: gromacs:gcc-8:configure
472 gromacs:gcc-8:release:build:
474 - .gromacs:base:build
478 - .rules:nightly-only-for-release
481 BUILD_DIR: release-builds-gcc
483 - job: gromacs:gcc-8:release:configure
486 gromacs:gcc-8-cuda-10.2:build:
488 - .gromacs:base:build
492 - .use-gcc8:cuda-10.2
493 - .rules:not-for-release
495 CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
496 # TODO: Enable GMX_PYTHON_PACKAGE when dependencies are in Docker image.
500 - job: gromacs:gcc-8-cuda-10.2:configure
503 gromacs:clang-6:build:
505 - .gromacs:base:build
509 - .rules:not-for-release
513 - job: gromacs:clang-6:configure
516 gromacs:clang-7:build:
518 - .gromacs:base:build
522 - .rules:not-for-release
526 - job: gromacs:clang-7:configure
529 gromacs:clang-7:release:build:
531 - .gromacs:base:build
535 - .rules:nightly-only-for-release
538 BUILD_DIR: release-builds-clang
540 - job: gromacs:clang-7:release:configure
543 gromacs:clang-8:build:
545 - .gromacs:base:build
549 - .rules:not-for-release
553 - job: gromacs:clang-8:configure
556 gromacs:clang-8:release:build:
558 - .gromacs:base:build
562 - .rules:nightly-only-for-release
565 BUILD_DIR: release-builds-clang
567 - job: gromacs:clang-8:release:configure
570 # Jobs running during test stage
576 REGRESSIONTEST_TOTAL_RANK_NUMBER: 4
577 REGRESSIONTEST_OMP_RANK_NUMBER: 2
578 REGRESSIONTEST_PME_RANK_NUMBER: 1
579 REGRESSIONTEST_MPI_RUN_COMMAND: ""
580 REGRESSIONTEST_DOUBLE: ""
586 - ctest -D ExperimentalTest --output-on-failure | tee ctestLog.log || true
587 - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
588 ctestLog.log | tee ctestErrors.log
589 - xsltproc scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/Test.xml > JUnitTestResults.xml
590 - if [ -s ctestErrors.log ] ; then
591 echo "Error during running ctest";
595 - tar xzf gmx-regressiontests.tar.gz
596 - source $INSTALL_DIR/bin/GMXRC
598 - 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"
599 - 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
602 junit: $BUILD_DIR/JUnitTestResults.xml
614 - .rules:not-for-release
618 - job: gromacs:gcc-7:build
619 - job: regressiontests:prepare
621 gromacs:gcc-7:release:test:
625 - .rules:nightly-only-for-release
628 BUILD_DIR: release-builds-gcc
630 - job: gromacs:gcc-7:release:configure
632 - job: gromacs:gcc-7:release:build
635 gromacs:gcc-7-simd-sse41:test:
639 - .rules:not-for-release
643 - job: gromacs:gcc-7-simd-sse41:build
644 - job: regressiontests:prepare
646 gromacs:gcc-7-double:test:
650 - .rules:not-for-release
652 REGRESSIONTEST_DOUBLE: "-double"
656 - job: gromacs:gcc-7-double:build
657 - job: regressiontests:prepare
659 gromacs:gcc-7-double:release:test:
663 - .rules:nightly-only-for-release
666 BUILD_DIR: release-builds-gcc
668 - job: gromacs:gcc-7-double:release:configure
670 - job: gromacs:gcc-7-double:release:build
677 - .rules:not-for-release
681 - job: gromacs:gcc-8:build
682 - job: regressiontests:prepare
684 gromacs:gcc-8:release:test:
688 - .rules:nightly-only-for-release
691 BUILD_DIR: release-builds-gcc
693 - job: gromacs:gcc-8:release:configure
695 - job: gromacs:gcc-8:release:build
698 gromacs:gcc-8-cuda-10.2:test:
702 - .use-gcc8:cuda-10.2
703 - .rules:not-for-release
705 KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
706 KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
707 REGRESSIONTEST_PME_RANK_NUMBER: 0
708 REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
709 REGRESSIONTEST_OMP_RANK_NUMBER: 1
710 CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
711 # TODO: Enable GMX_PYTHON_PACKAGE when dependencies are in Docker image.
715 - job: gromacs:gcc-8-cuda-10.2:build
716 - job: regressiontests:prepare
718 gromacs:clang-6:test:
722 - .rules:not-for-release
724 REGRESSIONTEST_OMP_RANK_NUMBER: 0
728 - job: gromacs:clang-6:build
729 - job: regressiontests:prepare
731 gromacs:clang-7:test:
735 - .rules:not-for-release
739 - job: gromacs:clang-7:build
740 - job: regressiontests:prepare
742 gromacs:clang-7:release:test:
746 - .rules:nightly-only-for-release
749 BUILD_DIR: release-builds-clang
751 - job: gromacs:clang-7:release:configure
753 - job: gromacs:clang-7:release:build
756 gromacs:clang-8:test:
760 - .rules:not-for-release
764 - job: gromacs:clang-8:build
765 - job: regressiontests:prepare
767 gromacs:clang-8:release:test:
771 - .rules:nightly-only-for-release
774 BUILD_DIR: release-builds-clang
776 - job: gromacs:clang-8:release:configure
778 - job: gromacs:clang-8:release:build