f137ac945d09c84d27f943a8a44229871458b724
[alexxy/gromacs.git] / admin / gitlab-ci / gromacs.matrix.gitlab-ci.yml
1 # Build, test, and install variously configured GROMACS installations.
2 #
3 # This file contains job templates. Actual job configurations are inside gromacs.matrix/ directory.
4
5 .gromacs:base:configure:
6   extends:
7     - .variables:default
8   stage: configure-build
9   cache: {}
10   variables:
11     KUBERNETES_CPU_LIMIT: 1
12     KUBERNETES_CPU_REQUEST: 1
13     KUBERNETES_MEMORY_REQUEST: 2Gi
14     CMAKE_COMPILER_SCRIPT: ""
15     CMAKE_EXTRA_OPTIONS: ""
16     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AVX2_256"
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   script:
22     - bash -x admin/ci-scripts/gromacs-base-configure.sh
23   artifacts:
24     when: always
25     paths:
26       - $BUILD_DIR
27
28 .gromacs:base:release:configure:
29   extends:
30     - .variables:default
31   stage: release-configure
32   cache: {}
33   variables:
34     KUBERNETES_CPU_LIMIT: 1
35     KUBERNETES_CPU_REQUEST: 1
36     KUBERNETES_MEMORY_REQUEST: 2Gi
37     CMAKE_COMPILER_SCRIPT: ""
38     CMAKE_EXTRA_OPTIONS: ""
39     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AVX2_256"
40     CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
41     CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
42     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
43     CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
44     CMAKE_REGRESSIONTEST_OPTIONS: "-DREGRESSIONTEST_PATH=../\\$RELEASE_REGRESSIONTESTS"
45     RELEASE_BUILD_DIR: release-builds
46     RELEASE_SOURCE: release-source-from-tarball
47     RELEASE_REGRESSIONTESTS: release-regressiontests-from-tarball
48   script:
49     - CMAKE=${CMAKE:-$(which cmake)}
50     - VERSION=`cat version.json |
51       python3 -c "import json,sys; print(json.load(sys.stdin)['version'])"`
52     - if [[ $GROMACS_RELEASE != "true" ]] ; then
53       VERSION=$VERSION-dev ;
54       fi
55     - SOURCENAME=gromacs-$VERSION
56     - SOURCETARBALL=$SOURCENAME.tar.gz
57     - REGTESTNAME=regressiontests-$VERSION
58     - REGTESTTARBALL=$REGTESTNAME.tar.gz
59     - echo "$SOURCETARBALL"
60     - echo "$REGTESTTARBALL"
61     - RELEASE_TARBALLS=release-tarballs
62     - rm -rf $RELEASE_TARBALLS $RELEASE_SOURCE $RELEASE_REGRESSIONTESTS && mkdir $RELEASE_TARBALLS
63     - mv $SOURCETARBALL $RELEASE_TARBALLS
64     - mv $REGTESTTARBALL $RELEASE_TARBALLS
65     - cd $RELEASE_TARBALLS
66     # We rename the source and regressiontest directories
67     # to have names for them that don't change for different versions.
68     - tar -xf $SOURCETARBALL
69     - mv $SOURCENAME ../$RELEASE_SOURCE
70     - tar -xf $REGTESTTARBALL
71     - mv $REGTESTNAME ../$RELEASE_REGRESSIONTESTS
72     - rm $SOURCETARBALL $REGTESTTARBALL
73     - cd ..
74     - echo $CMAKE_COMPILER_SCRIPT
75     - echo $CMAKE_EXTRA_OPTIONS
76     - echo $CMAKE_SIMD_OPTIONS
77     - echo $CMAKE_GPU_OPTIONS
78     - echo $CMAKE_MPI_OPTIONS
79     - echo $CMAKE_PRECISION_OPTIONS
80     - echo $CMAKE_BUILD_TYPE_OPTIONS
81     - echo $CMAKE_GMXAPI_OPTIONS
82     - if [[ -d $RELEASE_BUILD_DIR ]] ; then
83       echo "Cleaning up build directory" ;
84       rm -rf $RELEASE_BUILD_DIR && mkdir $RELEASE_BUILD_DIR ;
85       else
86       echo "Preparing new build directory" ;
87       mkdir $RELEASE_BUILD_DIR ;
88       fi
89     - cd $RELEASE_BUILD_DIR
90     - cmake ../$RELEASE_SOURCE/
91       -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
92       $CMAKE_COMPILER_SCRIPT
93       $CMAKE_EXTRA_OPTIONS
94       $CMAKE_SIMD_OPTIONS
95       $CMAKE_MPI_OPTIONS
96       $CMAKE_PRECISION_OPTIONS
97       $CMAKE_BUILD_TYPE_OPTIONS
98       $CMAKE_GPU_OPTIONS
99       $CMAKE_GMXAPI_OPTIONS
100       $CMAKE_REGRESSIONTEST_OPTIONS
101       -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR
102       2>&1 | tee cmakeLog.log
103     - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
104     - if [ -s cmakeErrors.log  ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
105     - cd ..
106   artifacts:
107     when: always
108     paths:
109       - $RELEASE_BUILD_DIR
110       - $RELEASE_REGRESSIONTESTS
111       - $RELEASE_SOURCE
112
113 .gromacs:base:build:
114   stage: build
115   script:
116     - bash -x admin/ci-scripts/gromacs-base-build.sh
117   artifacts:
118     when: always
119     paths:
120       - $BUILD_DIR
121       - $INSTALL_DIR/
122
123 .gromacs:static-analyzer-build:
124   stage: build
125   script:
126     - CMAKE=${CMAKE:-$(which cmake)}
127     - cd $BUILD_DIR
128     - scan-build -o scan_html $CMAKE --build . -- -j8 2>&1 | tee buildLogFile.log
129     - awk '/warning/,/warning.*generated|^$/' buildLogFile.log
130       | grep -v "CMake" | tee buildErrors.log || true
131     - grep "cannot be built" buildLogFile.log | tee -a buildErrors.log || true
132     - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
133     - cd ..
134   artifacts:
135     when: always
136     paths:
137       - $BUILD_DIR/scan_html
138
139 .gromacs:base:test:
140   extends:
141     - .variables:default
142   stage: test
143   cache: {}
144   retry:
145     max: 1
146   variables:
147     CTEST_RUN_MODE: "ExperimentalTest"
148   script:
149     - bash -x admin/ci-scripts/gromacs-base-test.sh
150   artifacts:
151     reports:
152       junit: $BUILD_DIR/JUnitTestResults.xml
153     paths:
154       - $BUILD_DIR/Testing
155       - $BUILD_DIR/tests
156     when: always
157     expire_in: 1 week
158
159 .gromacs:base:regressiontest:
160   extends:
161     - .variables:default
162   variables:
163     KUBERNETES_CPU_LIMIT: 4
164     KUBERNETES_CPU_REQUEST: 4
165     KUBERNETES_MEMORY_REQUEST: 4Gi
166     REGRESSIONTEST_TOTAL_RANK_NUMBER: 4
167     REGRESSIONTEST_OMP_RANK_NUMBER: 2
168     REGRESSIONTEST_PME_RANK_NUMBER: 1
169     REGRESSIONTEST_MPI_RUN_COMMAND: ""
170     REGRESSIONTEST_DOUBLE: ""
171     REGRESSIONTEST_PARALLEL: "-nt"
172   stage: test
173   cache: {}
174   retry:
175     max: 1
176   script:
177     - export LSAN_OPTIONS="suppressions=$CI_PROJECT_DIR/admin/lsan-suppressions.txt:print_suppressions=0"
178     - export ASAN_OPTIONS="check_initialization_order=1:detect_invalid_pointer_pairs=1:strict_init_order=true:strict_string_checks=true:detect_stack_use_after_return=true"
179     # Needed to run MPI enabled code in the docker images, until we set up different users
180     - export OMPI_ALLOW_RUN_AS_ROOT=1
181     - export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
182     - tar xzf gmx-regressiontests.tar.gz
183     - source $INSTALL_DIR/bin/GMXRC
184     - cd regressiontests
185     - perl gmxtest.pl $REGRESSIONTEST_PARALLEL $REGRESSIONTEST_TOTAL_RANK_NUMBER -ntomp $REGRESSIONTEST_OMP_RANK_NUMBER -npme $REGRESSIONTEST_PME_RANK_NUMBER $REGRESSIONTEST_DOUBLE $REGRESSIONTEST_MPI_RUN_COMMAND -xml all
186   artifacts:
187     paths:
188       - regressiontests/gmxtest.xml
189     when: always
190     expire_in: 1 week
191
192 include:
193   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-8-cuda-11.0-release.gitlab-ci.yml'
194   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-8.gitlab-ci.yml'
195   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-13-mpi.gitlab-ci.yml'
196   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-13-release.gitlab-ci.yml'
197   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-12-cuda-11.4.1.gitlab-ci.yml'
198   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-ASAN.gitlab-ci.yml'
199   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-static-analyzer.gitlab-ci.yml'
200   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-TSAN.gitlab-ci.yml'
201   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-UBSAN.gitlab-ci.yml'
202   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11.gitlab-ci.yml'
203   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-coverage.gitlab-ci.yml'
204   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-7-cuda-11.0.gitlab-ci.yml'
205   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-7-cuda-11.0-mpi.gitlab-ci.yml'
206   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-cuda-11.4.1.gitlab-ci.yml'
207   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-cuda-11.4.1-release.gitlab-ci.yml'
208   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-release.gitlab-ci.yml'
209   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.hipsycl-dev.gitlab-ci.yml'
210   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.oneapi-2021.4.0-opencl.gitlab-ci.yml'
211   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.oneapi-2021.4.0-opencl-release.gitlab-ci.yml'
212   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.oneapi-2021.4.0-sycl.gitlab-ci.yml'
213   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.oneapi-2021.4.0-sycl-nightly.gitlab-ci.yml'
214