6b52e1fbace857c7f68455b152c07dfc90fefd2b
[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     - which $CMAKE
91     - $CMAKE --version
92     - $CMAKE ../$RELEASE_SOURCE/
93       -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
94       $CMAKE_COMPILER_SCRIPT
95       $CMAKE_EXTRA_OPTIONS
96       $CMAKE_SIMD_OPTIONS
97       $CMAKE_MPI_OPTIONS
98       $CMAKE_PRECISION_OPTIONS
99       $CMAKE_BUILD_TYPE_OPTIONS
100       $CMAKE_GPU_OPTIONS
101       $CMAKE_GMXAPI_OPTIONS
102       $CMAKE_REGRESSIONTEST_OPTIONS
103       -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR
104       2>&1 | tee cmakeLog.log
105     - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
106     - if [ -s cmakeErrors.log  ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
107     - cd ..
108   artifacts:
109     when: always
110     paths:
111       - $RELEASE_BUILD_DIR
112       - $RELEASE_REGRESSIONTESTS
113       - $RELEASE_SOURCE
114
115 .gromacs:base:build:
116   stage: build
117   script:
118     - bash -x admin/ci-scripts/gromacs-base-build.sh
119   artifacts:
120     when: always
121     paths:
122       - $BUILD_DIR
123       - $INSTALL_DIR/
124
125 .gromacs:static-analyzer-build:
126   stage: build
127   script:
128     - CMAKE=${CMAKE:-$(which cmake)}
129     - cd $BUILD_DIR
130     - which $CMAKE
131     - $CMAKE --version
132     - scan-build -o scan_html $CMAKE --build . -- -j8 2>&1 | tee buildLogFile.log
133     - awk '/warning/,/warning.*generated|^$/' buildLogFile.log
134       | grep -v "CMake" | tee buildErrors.log || true
135     - grep "cannot be built" buildLogFile.log | tee -a buildErrors.log || true
136     - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
137     - cd ..
138   artifacts:
139     when: always
140     paths:
141       - $BUILD_DIR/scan_html
142
143 .gromacs:base:test:
144   extends:
145     - .variables:default
146   stage: test
147   cache: {}
148   retry:
149     max: 1
150   variables:
151     CTEST_RUN_MODE: "ExperimentalTest"
152   script:
153     - bash -x admin/ci-scripts/gromacs-base-test.sh
154   artifacts:
155     reports:
156       junit: $BUILD_DIR/JUnitTestResults.xml
157     paths:
158       - $BUILD_DIR/Testing
159       - $BUILD_DIR/tests
160     when: always
161     expire_in: 1 week
162
163 .gromacs:base:regressiontest:
164   extends:
165     - .variables:default
166   variables:
167     KUBERNETES_CPU_LIMIT: 4
168     KUBERNETES_CPU_REQUEST: 4
169     KUBERNETES_MEMORY_REQUEST: 4Gi
170     REGRESSIONTEST_TOTAL_RANK_NUMBER: 4
171     REGRESSIONTEST_OMP_RANK_NUMBER: 2
172     REGRESSIONTEST_PME_RANK_NUMBER: 1
173     REGRESSIONTEST_MPI_RUN_COMMAND: ""
174     REGRESSIONTEST_DOUBLE: ""
175     REGRESSIONTEST_PARALLEL: "-nt"
176   stage: test
177   cache: {}
178   retry:
179     max: 1
180   script:
181     - export LSAN_OPTIONS="suppressions=$CI_PROJECT_DIR/admin/lsan-suppressions.txt:print_suppressions=0"
182     - 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"
183     # Needed to run MPI enabled code in the docker images, until we set up different users
184     - export OMPI_ALLOW_RUN_AS_ROOT=1
185     - export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
186     - tar xzf gmx-regressiontests.tar.gz
187     - source $INSTALL_DIR/bin/GMXRC
188     - cd regressiontests
189     - 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
190   artifacts:
191     paths:
192       - regressiontests/gmxtest.xml
193     when: always
194     expire_in: 1 week
195
196 include:
197   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-8-cuda-11.0-release.gitlab-ci.yml'
198   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-8.gitlab-ci.yml'
199   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-13-mpi.gitlab-ci.yml'
200   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-13-release.gitlab-ci.yml'
201   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-12-cuda-11.4.1.gitlab-ci.yml'
202   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-ASAN.gitlab-ci.yml'
203   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-static-analyzer.gitlab-ci.yml'
204   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-TSAN.gitlab-ci.yml'
205   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-UBSAN.gitlab-ci.yml'
206   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11.gitlab-ci.yml'
207   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-coverage.gitlab-ci.yml'
208   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-7-cuda-11.0.gitlab-ci.yml'
209   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-7-cuda-11.0-mpi.gitlab-ci.yml'
210   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-cuda-11.4.1.gitlab-ci.yml'
211   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-cuda-11.4.1-release.gitlab-ci.yml'
212   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-release.gitlab-ci.yml'
213   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.hipsycl-dev.gitlab-ci.yml'
214   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.oneapi-2021.4.0-opencl.gitlab-ci.yml'
215   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.oneapi-2021.4.0-opencl-release.gitlab-ci.yml'
216   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.oneapi-2021.4.0-sycl.gitlab-ci.yml'
217   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.oneapi-2021.4.0-sycl-nightly.gitlab-ci.yml'
218