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"
112 - echo $CMAKE_COMPILER_SCRIPT
113 - echo $CMAKE_EXTRA_OPTIONS
114 - echo $CMAKE_SIMD_OPTIONS
115 - echo $CMAKE_GPU_OPTIONS
116 - echo $CMAKE_MPI_OPTIONS
117 - echo $CMAKE_PRECISION_OPTIONS
118 - echo $CMAKE_BUILD_TYPE_OPTIONS
119 - echo $CMAKE_GMXAPI_OPTIONS
120 - if [[ -d $BUILD_DIR ]] ; then
121 rm -rf $BUILD_DIR && mkdir $BUILD_DIR ;
123 echo "Preparing new build directory" ;
128 -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
129 $CMAKE_COMPILER_SCRIPT
133 $CMAKE_PRECISION_OPTIONS
134 $CMAKE_BUILD_TYPE_OPTIONS
136 $CMAKE_GMXAPI_OPTIONS
137 -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
138 2>&1 | tee cmakeLog.log
139 - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
140 - if [ -s cmakeErrors.log ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
147 .gromacs:base:release:configure:
151 stage: release-configure
153 KUBERNETES_CPU_LIMIT: 1
154 KUBERNETES_CPU_REQUEST: 1
155 KUBERNETES_MEMORY_LIMIT: 2Gi
156 CMAKE_COMPILER_SCRIPT: ""
157 CMAKE_EXTRA_OPTIONS: ""
158 CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AUTO"
159 CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
160 CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
161 CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
162 CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
163 RELEASE_BUILD_DIR: release-builds
164 RELEASE_SOURCE: release-source-from-tarball
165 RELEASE_REGRESSIONTESTS: release-regressiontests-from-tarball
174 - VERSION=`cat version.json |
175 python3 -c "import json,sys; print(json.load(sys.stdin)['version'])"`
176 - if [[ $GROMACS_RELEASE != "true" ]] ; then
177 VERSION=$VERSION-dev ;
179 - SOURCENAME=gromacs-$VERSION
180 - SOURCETARBALL=$SOURCENAME.tar.gz
181 - REGTESTNAME=regressiontests-$VERSION
182 - REGTESTTARBALL=$REGTESTNAME.tar.gz
183 - echo "$SOURCETARBALL"
184 - echo "$REGTESTTARBALL"
185 - RELEASE_TARBALLS=release-tarballs
186 - rm -rf $RELEASE_TARBALLS $RELEASE_SOURCE $RELEASE_REGRESSIONTESTS && mkdir $RELEASE_TARBALLS
187 - mv $SOURCETARBALL $RELEASE_TARBALLS
188 - mv $REGTESTTARBALL $RELEASE_TARBALLS
189 - cd $RELEASE_TARBALLS
190 # We rename the source and regressiontest directories
191 # to have names for them that don't change for different versions.
192 - tar -xf $SOURCETARBALL
193 - mv $SOURCENAME ../$RELEASE_SOURCE
194 - tar -xf $REGTESTTARBALL
195 - mv $REGTESTNAME ../$RELEASE_REGRESSIONTESTS
196 - rm $SOURCETARBALL $REGTESTTARBALL
198 - echo $CMAKE_COMPILER_SCRIPT
199 - echo $CMAKE_EXTRA_OPTIONS
200 - echo $CMAKE_SIMD_OPTIONS
201 - echo $CMAKE_GPU_OPTIONS
202 - echo $CMAKE_MPI_OPTIONS
203 - echo $CMAKE_PRECISION_OPTIONS
204 - echo $CMAKE_BUILD_TYPE_OPTIONS
205 - echo $CMAKE_GMXAPI_OPTIONS
206 - if [[ -d $RELEASE_BUILD_DIR ]] ; then
207 echo "Cleaning up build directory" ;
208 rm -rf $RELEASE_BUILD_DIR && mkdir $RELEASE_BUILD_DIR ;
210 echo "Preparing new build directory" ;
211 mkdir $RELEASE_BUILD_DIR ;
213 - cd $RELEASE_BUILD_DIR
214 - cmake ../$RELEASE_SOURCE/
215 -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
216 $CMAKE_COMPILER_SCRIPT
220 $CMAKE_PRECISION_OPTIONS
221 $CMAKE_BUILD_TYPE_OPTIONS
223 $CMAKE_GMXAPI_OPTIONS
224 "-DREGRESSIONTEST_PATH=../$RELEASE_REGRESSIONTESTS"
225 -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
226 2>&1 | tee cmakeLog.log
227 - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
228 - if [ -s cmakeErrors.log ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
234 - $RELEASE_REGRESSIONTESTS
237 # Templates for configuration stage
239 gromacs:gcc-7:configure:
241 - .gromacs:base:configure
250 gromacs:gcc-7:release:configure:
252 - .gromacs:base:release:configure
256 RELEASE_BUILD_DIR: release-builds-gcc
265 - package-archive-release
266 - package-regressiontests-release
267 - prepare-release-version
269 gromacs:gcc-7-simd-sse41:configure:
271 - .gromacs:base:configure
277 CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
282 gromacs:gcc-7-double:configure:
284 - .gromacs:base:configure
290 CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
295 gromacs:gcc-7-double:release:configure:
297 - .gromacs:base:release:configure
301 CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
302 RELEASE_BUILD_DIR: release-builds-gcc
311 - package-archive-release
312 - package-regressiontests-release
313 - prepare-release-version
315 gromacs:gcc-8:configure:
317 - .gromacs:base:configure
326 gromacs:gcc-8:release:configure:
328 - .gromacs:base:release:configure
332 RELEASE_BUILD_DIR: release-builds-gcc
341 - package-archive-release
342 - package-regressiontests-release
343 - prepare-release-version
345 gromacs:gcc-8-cuda-10.2:configure:
347 - .gromacs:base:configure
349 - .use-gcc8:cuda-10.2
351 CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
352 # TODO: Enable GMX_PYTHON_PACKAGE when dependencies are in Docker image.
360 # For version of clang before 7, we need to always provide the full version
361 # Use something like this instead in the download script:
362 # APT_COMPILER_VERSION=$(($COMPILER_MAJOR_VERSION < 7 ? "${COMPILER_MAJOR_VERSION}.0" : $COMPILER_MAJOR_VERSION))
363 gromacs:clang-6:configure:
365 - .gromacs:base:configure
371 COMPILER_MAJOR_VERSION: "6.0"
372 CMAKE_MPI_OPTIONS: -DGMX_OPENMP=OFF
377 gromacs:clang-7:configure:
379 - .gromacs:base:configure
388 gromacs:clang-7:release:configure:
390 - .gromacs:base:release:configure
394 RELEASE_BUILD_DIR: release-builds-clang
403 - package-archive-release
404 - package-regressiontests-release
405 - prepare-release-version
407 gromacs:clang-8:configure:
409 - .gromacs:base:configure
418 gromacs:clang-8:release:configure:
420 - .gromacs:base:release:configure
424 RELEASE_BUILD_DIR: release-builds-clang
433 - package-archive-release
434 - package-regressiontests-release
435 - prepare-release-version
437 # Jobs running during build stage
440 # Dockerfiles are from dockerhub, user eriklindahl
441 # image in admin/dockerimages/ci-docs-py27
451 - cmake --build . -- -j8 2>&1 | tee buildLogFile.log
452 - cmake --build . --target tests -- -j8 2>&1 | tee testBuildLogFile.log
453 - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
454 | grep -v "CMake" | tee buildErrors.log || true
455 - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
456 - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
457 - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
467 - .gromacs:base:build
474 - job: gromacs:gcc-7:configure
480 gromacs:gcc-7:release:build:
482 - .gromacs:base:build
488 BUILD_DIR: release-builds-gcc
490 - job: gromacs:gcc-7:release:configure
500 gromacs:gcc-7-simd-sse41:build:
502 - .gromacs:base:build
509 - job: gromacs:gcc-7-simd-sse41:configure
515 gromacs:gcc-7-double:build:
517 - .gromacs:base:build
524 - job: gromacs:gcc-7-double:configure
530 gromacs:gcc-7-double:release:build:
532 - .gromacs:base:build
538 BUILD_DIR: release-builds-gcc
540 - job: gromacs:gcc-7-double:release:configure
552 - .gromacs:base:build
559 - job: gromacs:gcc-8:configure
565 gromacs:gcc-8:release:build:
567 - .gromacs:base:build
573 BUILD_DIR: release-builds-gcc
575 - job: gromacs:gcc-8:release:configure
585 gromacs:gcc-8-cuda-10.2:build:
587 - .gromacs:base:build
591 - .use-gcc8:cuda-10.2
593 CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
594 # TODO: Enable GMX_PYTHON_PACKAGE when dependencies are in Docker image.
598 - job: gromacs:gcc-8-cuda-10.2:configure
604 gromacs:clang-6:build:
606 - .gromacs:base:build
613 - job: gromacs:clang-6:configure
619 gromacs:clang-7:build:
621 - .gromacs:base:build
628 - job: gromacs:clang-7:configure
634 gromacs:clang-7:release:build:
636 - .gromacs:base:build
642 BUILD_DIR: release-builds-clang
644 - job: gromacs:clang-7:release:configure
654 gromacs:clang-8:build:
656 - .gromacs:base:build
663 - job: gromacs:clang-8:configure
669 gromacs:clang-8:release:build:
671 - .gromacs:base:build
677 BUILD_DIR: release-builds-clang
679 - job: gromacs:clang-8:release:configure
690 # Jobs running during test stage
694 REGRESSIONTEST_TOTAL_RANK_NUMBER: 4
695 REGRESSIONTEST_OMP_RANK_NUMBER: 2
696 REGRESSIONTEST_PME_RANK_NUMBER: 1
697 REGRESSIONTEST_MPI_RUN_COMMAND: ""
698 REGRESSIONTEST_DOUBLE: ""
712 - ctest -D ExperimentalTest --output-on-failure | tee ctestLog.log || true
713 - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
714 ctestLog.log | tee ctestErrors.log
715 - xsltproc scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/Test.xml > JUnitTestResults.xml
716 - if [ -s ctestErrors.log ] ; then
717 echo "Error during running ctest";
721 - tar xzf gmx-regressiontests.tar.gz
722 - source $INSTALL_DIR/bin/GMXRC
724 - 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"
725 - 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
728 junit: $BUILD_DIR/JUnitTestResults.xml
743 - job: gromacs:gcc-7:build
744 - job: prepare-regressiontests
749 gromacs:gcc-7:release:test:
755 BUILD_DIR: release-builds-gcc
757 - job: gromacs:gcc-7:release:configure
759 - job: gromacs:gcc-7:release:build
769 gromacs:gcc-7-simd-sse41:test:
776 - job: gromacs:gcc-7-simd-sse41:build
777 - job: prepare-regressiontests
782 gromacs:gcc-7-double:test:
787 REGRESSIONTEST_DOUBLE: "-double"
791 - job: gromacs:gcc-7-double:build
792 - job: prepare-regressiontests
797 gromacs:gcc-7-double:release:test:
803 BUILD_DIR: release-builds-gcc
805 - job: gromacs:gcc-7-double:release:configure
807 - job: gromacs:gcc-7-double:release:build
824 - job: gromacs:gcc-8:build
825 - job: prepare-regressiontests
830 gromacs:gcc-8:release:test:
836 BUILD_DIR: release-builds-gcc
838 - job: gromacs:gcc-8:release:configure
840 - job: gromacs:gcc-8:release:build
850 gromacs:gcc-8-cuda-10.2:test:
852 KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
853 KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
854 REGRESSIONTEST_PME_RANK_NUMBER: 0
855 REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
856 REGRESSIONTEST_OMP_RANK_NUMBER: 1
857 CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
858 # TODO: Enable GMX_PYTHON_PACKAGE when dependencies are in Docker image.
862 - .use-gcc8:cuda-10.2
866 - job: gromacs:gcc-8-cuda-10.2:build
867 - job: prepare-regressiontests
872 gromacs:clang-6:test:
877 REGRESSIONTEST_OMP_RANK_NUMBER: 0
881 - job: gromacs:clang-6:build
882 - job: prepare-regressiontests
887 gromacs:clang-7:test:
894 - job: gromacs:clang-7:build
895 - job: prepare-regressiontests
900 gromacs:clang-7:release:test:
906 BUILD_DIR: release-builds-clang
908 - job: gromacs:clang-7:release:configure
910 - job: gromacs:clang-7:release:build
920 gromacs:clang-8:test:
927 - job: gromacs:clang-8:build
928 - job: prepare-regressiontests
933 gromacs:clang-8:release:test:
939 BUILD_DIR: release-builds-clang
941 - job: gromacs:clang-8:release:configure
943 - job: gromacs:clang-8:release:build