1 # Build, test, and install variously configured GROMACS installations.
3 # Initial build that always needs to pass before follow-up stages run
13 KUBERNETES_CPU_LIMIT: 8
14 KUBERNETES_CPU_REQUEST: 4
15 KUBERNETES_MEMORY_LIMIT: 8Gi
16 CMAKE_COMPILER_SCRIPT: ""
17 CMAKE_EXTRA_OPTIONS: ""
18 CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=None"
19 CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
20 CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
21 CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=Debug"
22 CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
23 CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
24 BUILD_DIR: simple-build
26 - echo $CMAKE_COMPILER_SCRIPT
27 - echo $CMAKE_EXTRA_OPTIONS
28 - echo $CMAKE_SIMD_OPTIONS
29 - echo $CMAKE_GPU_OPTIONS
30 - echo $CMAKE_MPI_OPTIONS
31 - echo $CMAKE_PRECISION_OPTIONS
32 - echo $CMAKE_BUILD_TYPE_OPTIONS
33 - echo $CMAKE_GMXAPI_OPTIONS
34 - if [[ -d $BUILD_DIR ]] ; then
35 echo "Cleaning up build directory" ;
36 rm -rf $BUILD_DIR && mkdir $BUILD_DIR ;
38 echo "Preparing new build directory" ;
43 -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
44 $CMAKE_COMPILER_SCRIPT
48 $CMAKE_PRECISION_OPTIONS
49 $CMAKE_BUILD_TYPE_OPTIONS
52 -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
53 2>&1 | tee cmakeLog.log
54 - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
55 - if [ -s cmakeErrors.log ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
56 - cmake --build . -- -j8 2>&1 | tee buildLogFile.log
57 - cmake --build . --target tests -- -j8 2>&1 | tee testBuildLogFile.log
58 - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
59 | grep -v "CMake" | tee buildErrors.log || true
60 - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
61 - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
62 - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
63 - ctest -D ExperimentalTest --output-on-failure | tee ctestLog.log || true
64 - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
65 ctestLog.log | tee ctestErrors.log
66 - xsltproc scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/Test.xml > JUnitTestResults.xml
67 - if [ -s ctestErrors.log ] ; then
68 echo "Error during running ctest";
74 junit: $BUILD_DIR/JUnitTestResults.xml
80 # Jobs running in first pre-build stage
82 .gromacs:base:configure:
86 stage: configure-build
88 KUBERNETES_CPU_LIMIT: 1
89 KUBERNETES_CPU_REQUEST: 1
90 KUBERNETES_MEMORY_LIMIT: 2Gi
91 CMAKE_COMPILER_SCRIPT: ""
92 CMAKE_EXTRA_OPTIONS: ""
93 CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AUTO"
94 CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
95 CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
96 CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=Debug"
97 CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
99 - echo $CMAKE_COMPILER_SCRIPT
100 - echo $CMAKE_EXTRA_OPTIONS
101 - echo $CMAKE_SIMD_OPTIONS
102 - echo $CMAKE_GPU_OPTIONS
103 - echo $CMAKE_MPI_OPTIONS
104 - echo $CMAKE_PRECISION_OPTIONS
105 - echo $CMAKE_BUILD_TYPE_OPTIONS
106 - echo $CMAKE_GMXAPI_OPTIONS
107 - if [[ -d $BUILD_DIR ]] ; then
108 rm -rf $BUILD_DIR && mkdir $BUILD_DIR ;
110 echo "Preparing new build directory" ;
115 -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
116 $CMAKE_COMPILER_SCRIPT
120 $CMAKE_PRECISION_OPTIONS
121 $CMAKE_BUILD_TYPE_OPTIONS
123 $CMAKE_GMXAPI_OPTIONS
124 -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
125 2>&1 | tee cmakeLog.log
126 - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
127 - if [ -s cmakeErrors.log ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
134 .gromacs:base:release:configure:
138 stage: release-configure
140 KUBERNETES_CPU_LIMIT: 1
141 KUBERNETES_CPU_REQUEST: 1
142 KUBERNETES_MEMORY_LIMIT: 2Gi
143 CMAKE_COMPILER_SCRIPT: ""
144 CMAKE_EXTRA_OPTIONS: ""
145 CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AUTO"
146 CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
147 CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
148 CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
149 CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
150 RELEASE_BUILD_DIR: release-builds
151 RELEASE_SOURCE: release-source-from-tarball
152 RELEASE_REGRESSIONTESTS: release-regressiontests-from-tarball
154 - VERSION=`cat version.json |
155 python3 -c "import json,sys; print(json.load(sys.stdin)['version'])"`
156 - if [[ $GROMACS_RELEASE != "true" ]] ; then
157 VERSION=$VERSION-dev ;
159 - SOURCENAME=gromacs-$VERSION
160 - SOURCETARBALL=$SOURCENAME.tar.gz
161 - REGTESTNAME=regressiontests-$VERSION
162 - REGTESTTARBALL=$REGTESTNAME.tar.gz
163 - echo "$SOURCETARBALL"
164 - echo "$REGTESTTARBALL"
165 - RELEASE_TARBALLS=release-tarballs
166 - rm -rf $RELEASE_TARBALLS $RELEASE_SOURCE $RELEASE_REGRESSIONTESTS && mkdir $RELEASE_TARBALLS
167 - mv $SOURCETARBALL $RELEASE_TARBALLS
168 - mv $REGTESTTARBALL $RELEASE_TARBALLS
169 - cd $RELEASE_TARBALLS
170 # We rename the source and regressiontest directories
171 # to have names for them that don't change for different versions.
172 - tar -xf $SOURCETARBALL
173 - mv $SOURCENAME ../$RELEASE_SOURCE
174 - tar -xf $REGTESTTARBALL
175 - mv $REGTESTNAME ../$RELEASE_REGRESSIONTESTS
176 - rm $SOURCETARBALL $REGTESTTARBALL
178 - echo $CMAKE_COMPILER_SCRIPT
179 - echo $CMAKE_EXTRA_OPTIONS
180 - echo $CMAKE_SIMD_OPTIONS
181 - echo $CMAKE_GPU_OPTIONS
182 - echo $CMAKE_MPI_OPTIONS
183 - echo $CMAKE_PRECISION_OPTIONS
184 - echo $CMAKE_BUILD_TYPE_OPTIONS
185 - echo $CMAKE_GMXAPI_OPTIONS
186 - if [[ -d $RELEASE_BUILD_DIR ]] ; then
187 echo "Cleaning up build directory" ;
188 rm -rf $RELEASE_BUILD_DIR && mkdir $RELEASE_BUILD_DIR ;
190 echo "Preparing new build directory" ;
191 mkdir $RELEASE_BUILD_DIR ;
193 - cd $RELEASE_BUILD_DIR
194 - cmake ../$RELEASE_SOURCE/
195 -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
196 $CMAKE_COMPILER_SCRIPT
200 $CMAKE_PRECISION_OPTIONS
201 $CMAKE_BUILD_TYPE_OPTIONS
203 $CMAKE_GMXAPI_OPTIONS
204 "-DREGRESSIONTEST_PATH=../$RELEASE_REGRESSIONTESTS"
205 -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
206 2>&1 | tee cmakeLog.log
207 - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
208 - if [ -s cmakeErrors.log ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
214 - $RELEASE_REGRESSIONTESTS
217 # Templates for configuration stage
219 gromacs:gcc-7:configure:
221 - .gromacs:base:configure
223 - .rules:not-for-release
226 gromacs:gcc-7:release:configure:
228 - .gromacs:base:release:configure
230 - .rules:nightly-only-for-release
233 RELEASE_BUILD_DIR: release-builds-gcc
236 - regressiontests:package
237 - prepare-release-version
239 gromacs:gcc-7-simd-sse41:configure:
241 - .gromacs:base:configure
243 - .rules:not-for-release
246 CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
248 gromacs:gcc-7-double:configure:
250 - .gromacs:base:configure
252 - .rules:not-for-release
255 CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
257 gromacs:gcc-7-double:release:configure:
259 - .gromacs:base:release:configure
261 - .rules:nightly-only-for-release
264 CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
265 RELEASE_BUILD_DIR: release-builds-gcc
268 - regressiontests:package
269 - prepare-release-version
271 gromacs:gcc-8:configure:
273 - .gromacs:base:configure
275 - .rules:not-for-release
278 gromacs:gcc-8:release:configure:
280 - .gromacs:base:release:configure
282 - .rules:nightly-only-for-release
285 RELEASE_BUILD_DIR: release-builds-gcc
288 - regressiontests:package
289 - prepare-release-version
291 gromacs:gcc-8-cuda-10.2:configure:
293 - .gromacs:base:configure
295 - .use-gcc8:cuda-10.2
296 - .rules:not-for-release
298 CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
299 # TODO: Enable GMX_PYTHON_PACKAGE when dependencies are in Docker image.
302 # For version of clang before 7, we need to always provide the full version
303 # Use something like this instead in the download script:
304 # APT_COMPILER_VERSION=$(($COMPILER_MAJOR_VERSION < 7 ? "${COMPILER_MAJOR_VERSION}.0" : $COMPILER_MAJOR_VERSION))
305 gromacs:clang-6:configure:
307 - .gromacs:base:configure
309 - .rules:not-for-release
312 COMPILER_MAJOR_VERSION: "6.0"
313 CMAKE_MPI_OPTIONS: -DGMX_OPENMP=OFF
315 gromacs:clang-7:configure:
317 - .gromacs:base:configure
319 - .rules:not-for-release
322 gromacs:clang-7:release:configure:
324 - .gromacs:base:release:configure
326 - .rules:nightly-only-for-release
329 RELEASE_BUILD_DIR: release-builds-clang
332 - regressiontests:package
333 - prepare-release-version
335 gromacs:clang-8:configure:
337 - .gromacs:base:configure
339 - .rules:not-for-release
342 gromacs:clang-8:release:configure:
344 - .gromacs:base:release:configure
346 - .rules:nightly-only-for-release
349 RELEASE_BUILD_DIR: release-builds-clang
352 - regressiontests:package
353 - prepare-release-version
355 # Jobs running during build stage
358 # Dockerfiles are from dockerhub, user eriklindahl
359 # image in admin/dockerimages/ci-docs-py27
363 - cmake --build . -- -j8 2>&1 | tee buildLogFile.log
364 - cmake --build . --target tests -- -j8 2>&1 | tee testBuildLogFile.log
365 - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
366 | grep -v "CMake" | tee buildErrors.log || true
367 - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
368 - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
369 - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
379 - .gromacs:base:build
383 - .rules:not-for-release
385 - job: gromacs:gcc-7:configure
388 gromacs:gcc-7:release:build:
390 - .gromacs:base:build
394 - .rules:nightly-only-for-release
397 BUILD_DIR: release-builds-gcc
399 - job: gromacs:gcc-7:release:configure
402 gromacs:gcc-7-simd-sse41:build:
404 - .gromacs:base:build
408 - .rules:not-for-release
410 - job: gromacs:gcc-7-simd-sse41:configure
413 gromacs:gcc-7-double:build:
415 - .gromacs:base:build
419 - .rules:not-for-release
421 - job: gromacs:gcc-7-double:configure
424 gromacs:gcc-7-double:release:build:
426 - .gromacs:base:build
430 - .rules:nightly-only-for-release
433 BUILD_DIR: release-builds-gcc
435 - job: gromacs:gcc-7-double:release:configure
440 - .gromacs:base:build
444 - .rules:not-for-release
446 - job: gromacs:gcc-8:configure
449 gromacs:gcc-8:release:build:
451 - .gromacs:base:build
455 - .rules:nightly-only-for-release
458 BUILD_DIR: release-builds-gcc
460 - job: gromacs:gcc-8:release:configure
463 gromacs:gcc-8-cuda-10.2:build:
465 - .gromacs:base:build
469 - .use-gcc8:cuda-10.2
470 - .rules:not-for-release
472 CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
473 # TODO: Enable GMX_PYTHON_PACKAGE when dependencies are in Docker image.
475 - job: gromacs:gcc-8-cuda-10.2:configure
478 gromacs:clang-6:build:
480 - .gromacs:base:build
484 - .rules:not-for-release
486 - job: gromacs:clang-6:configure
489 gromacs:clang-7:build:
491 - .gromacs:base:build
495 - .rules:not-for-release
497 - job: gromacs:clang-7:configure
500 gromacs:clang-7:release:build:
502 - .gromacs:base:build
506 - .rules:nightly-only-for-release
509 BUILD_DIR: release-builds-clang
511 - job: gromacs:clang-7:release:configure
514 gromacs:clang-8:build:
516 - .gromacs:base:build
520 - .rules:not-for-release
522 - job: gromacs:clang-8:configure
525 gromacs:clang-8:release:build:
527 - .gromacs:base:build
531 - .rules:nightly-only-for-release
534 BUILD_DIR: release-builds-clang
536 - job: gromacs:clang-8:release:configure
539 # Jobs running during test stage
545 REGRESSIONTEST_TOTAL_RANK_NUMBER: 4
546 REGRESSIONTEST_OMP_RANK_NUMBER: 2
547 REGRESSIONTEST_PME_RANK_NUMBER: 1
548 REGRESSIONTEST_MPI_RUN_COMMAND: ""
549 REGRESSIONTEST_DOUBLE: ""
555 - ctest -D ExperimentalTest --output-on-failure | tee ctestLog.log || true
556 - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
557 ctestLog.log | tee ctestErrors.log
558 - xsltproc scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/Test.xml > JUnitTestResults.xml
559 - if [ -s ctestErrors.log ] ; then
560 echo "Error during running ctest";
564 - tar xzf gmx-regressiontests.tar.gz
565 - source $INSTALL_DIR/bin/GMXRC
567 - 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"
568 - 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
571 junit: $BUILD_DIR/JUnitTestResults.xml
583 - .rules:not-for-release
585 - job: gromacs:gcc-7:build
586 - job: regressiontests:prepare
588 gromacs:gcc-7:release:test:
592 - .rules:nightly-only-for-release
595 BUILD_DIR: release-builds-gcc
597 - job: gromacs:gcc-7:release:configure
599 - job: gromacs:gcc-7:release:build
601 - job: regressiontests:package
603 gromacs:gcc-7-simd-sse41:test:
607 - .rules:not-for-release
609 - job: gromacs:gcc-7-simd-sse41:build
610 - job: regressiontests:prepare
612 gromacs:gcc-7-double:test:
616 - .rules:not-for-release
618 REGRESSIONTEST_DOUBLE: "-double"
620 - job: gromacs:gcc-7-double:build
621 - job: regressiontests:prepare
623 gromacs:gcc-7-double:release:test:
627 - .rules:nightly-only-for-release
630 BUILD_DIR: release-builds-gcc
632 - job: gromacs:gcc-7-double:release:configure
634 - job: gromacs:gcc-7-double:release:build
636 - job: regressiontests:package
642 - .rules:not-for-release
644 - job: gromacs:gcc-8:build
645 - job: regressiontests:prepare
647 gromacs:gcc-8:release:test:
651 - .rules:nightly-only-for-release
654 BUILD_DIR: release-builds-gcc
656 - job: gromacs:gcc-8:release:configure
658 - job: gromacs:gcc-8:release:build
660 - job: regressiontests:package
662 gromacs:gcc-8-cuda-10.2:test:
666 - .use-gcc8:cuda-10.2
667 - .rules:not-for-release
669 KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
670 KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
671 REGRESSIONTEST_PME_RANK_NUMBER: 0
672 REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
673 REGRESSIONTEST_OMP_RANK_NUMBER: 1
674 CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
675 # TODO: Enable GMX_PYTHON_PACKAGE when dependencies are in Docker image.
677 - job: gromacs:gcc-8-cuda-10.2:build
678 - job: regressiontests:prepare
680 gromacs:clang-6:test:
684 - .rules:not-for-release
686 REGRESSIONTEST_OMP_RANK_NUMBER: 0
688 - job: gromacs:clang-6:build
689 - job: regressiontests:prepare
691 gromacs:clang-7:test:
695 - .rules:not-for-release
697 - job: gromacs:clang-7:build
698 - job: regressiontests:prepare
700 gromacs:clang-7:release:test:
704 - .rules:nightly-only-for-release
707 BUILD_DIR: release-builds-clang
709 - job: gromacs:clang-7:release:configure
711 - job: gromacs:clang-7:release:build
713 - job: regressiontests:package
715 gromacs:clang-8:test:
719 - .rules:not-for-release
721 - job: gromacs:clang-8:build
722 - job: regressiontests:prepare
724 gromacs:clang-8:release:test:
728 - .rules:nightly-only-for-release
731 BUILD_DIR: release-builds-clang
733 - job: gromacs:clang-8:release:configure
735 - job: gromacs:clang-8:release:build
737 - job: regressiontests:package