Use CMake to propagate versions and hashes to gitlab jobs
[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=`sed -n -e '/GMX_VERSION_STRING\b/ s/.*"\(.*\)")/\1/p' VersionInfo-partial.cmake.cmakein`
51     - if [[ $GROMACS_RELEASE != "true" ]] ; then
52       VERSION=$VERSION-dev ;
53       fi
54     - SOURCENAME=gromacs-$VERSION
55     - SOURCETARBALL=$SOURCENAME.tar.gz
56     - REGTESTNAME=regressiontests-$VERSION
57     - REGTESTTARBALL=$REGTESTNAME.tar.gz
58     - echo "$SOURCETARBALL"
59     - echo "$REGTESTTARBALL"
60     - RELEASE_TARBALLS=release-tarballs
61     - rm -rf $RELEASE_TARBALLS $RELEASE_SOURCE $RELEASE_REGRESSIONTESTS && mkdir $RELEASE_TARBALLS
62     - mv $SOURCETARBALL $RELEASE_TARBALLS
63     - mv $REGTESTTARBALL $RELEASE_TARBALLS
64     - cd $RELEASE_TARBALLS
65     # We rename the source and regressiontest directories
66     # to have names for them that don't change for different versions.
67     - tar -xf $SOURCETARBALL
68     - mv $SOURCENAME ../$RELEASE_SOURCE
69     - tar -xf $REGTESTTARBALL
70     - mv $REGTESTNAME ../$RELEASE_REGRESSIONTESTS
71     - rm $SOURCETARBALL $REGTESTTARBALL
72     - cd ..
73     - echo $CMAKE_COMPILER_SCRIPT
74     - echo $CMAKE_EXTRA_OPTIONS
75     - echo $CMAKE_SIMD_OPTIONS
76     - echo $CMAKE_GPU_OPTIONS
77     - echo $CMAKE_MPI_OPTIONS
78     - echo $CMAKE_PRECISION_OPTIONS
79     - echo $CMAKE_BUILD_TYPE_OPTIONS
80     - echo $CMAKE_GMXAPI_OPTIONS
81     - if [[ -d $RELEASE_BUILD_DIR ]] ; then
82       echo "Cleaning up build directory" ;
83       rm -rf $RELEASE_BUILD_DIR && mkdir $RELEASE_BUILD_DIR ;
84       else
85       echo "Preparing new build directory" ;
86       mkdir $RELEASE_BUILD_DIR ;
87       fi
88     - cd $RELEASE_BUILD_DIR
89     - which $CMAKE
90     - $CMAKE --version
91     - $CMAKE ../$RELEASE_SOURCE/
92       -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
93       $CMAKE_COMPILER_SCRIPT
94       $CMAKE_EXTRA_OPTIONS
95       $CMAKE_SIMD_OPTIONS
96       $CMAKE_MPI_OPTIONS
97       $CMAKE_PRECISION_OPTIONS
98       $CMAKE_BUILD_TYPE_OPTIONS
99       $CMAKE_GPU_OPTIONS
100       $CMAKE_GMXAPI_OPTIONS
101       $CMAKE_REGRESSIONTEST_OPTIONS
102       -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR
103       2>&1 | tee cmakeLog.log
104     - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
105     - if [ -s cmakeErrors.log  ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
106     - cd ..
107   artifacts:
108     when: always
109     paths:
110       - $RELEASE_BUILD_DIR
111       - $RELEASE_REGRESSIONTESTS
112       - $RELEASE_SOURCE
113
114 .gromacs:base:build:
115   stage: build
116   script:
117     - bash -x admin/ci-scripts/gromacs-base-build.sh
118   artifacts:
119     when: always
120     paths:
121       - $BUILD_DIR
122       - $INSTALL_DIR/
123
124 .gromacs:static-analyzer-build:
125   stage: build
126   script:
127     - CMAKE=${CMAKE:-$(which cmake)}
128     - cd $BUILD_DIR
129     - which $CMAKE
130     - $CMAKE --version
131     - scan-build -o scan_html $CMAKE --build . -- -j8 2>&1 | tee buildLogFile.log
132     - awk '/warning/,/warning.*generated|^$/' buildLogFile.log
133       | grep -v "CMake" | tee buildErrors.log || true
134     - grep "cannot be built" buildLogFile.log | tee -a buildErrors.log || true
135     - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
136     - cd ..
137   artifacts:
138     when: always
139     paths:
140       - $BUILD_DIR/scan_html
141
142 .gromacs:base:test:
143   extends:
144     - .variables:default
145   stage: test
146   cache: {}
147   retry:
148     max: 1
149   variables:
150     CTEST_RUN_MODE: "ExperimentalTest"
151   script:
152     - bash -x admin/ci-scripts/gromacs-base-test.sh
153   artifacts:
154     reports:
155       junit: $BUILD_DIR/JUnitTestResults.xml
156     paths:
157       - $BUILD_DIR/Testing
158       - $BUILD_DIR/tests
159     when: always
160     expire_in: 1 week
161
162 .gromacs:base:regressiontest:
163   extends:
164     - .variables:default
165   variables:
166     KUBERNETES_CPU_LIMIT: 4
167     KUBERNETES_CPU_REQUEST: 4
168     KUBERNETES_MEMORY_REQUEST: 4Gi
169     REGRESSIONTEST_TOTAL_RANK_NUMBER: 4
170     REGRESSIONTEST_OMP_RANK_NUMBER: 2
171     REGRESSIONTEST_PME_RANK_NUMBER: 1
172     REGRESSIONTEST_MPI_RUN_COMMAND: ""
173     REGRESSIONTEST_DOUBLE: ""
174     REGRESSIONTEST_PARALLEL: "-nt"
175   stage: test
176   cache: {}
177   retry:
178     max: 1
179   script:
180     - export LSAN_OPTIONS="suppressions=$CI_PROJECT_DIR/admin/lsan-suppressions.txt:print_suppressions=0"
181     - 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"
182     # Needed to run MPI enabled code in the docker images, until we set up different users
183     - export OMPI_ALLOW_RUN_AS_ROOT=1
184     - export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
185     - tar xzf gmx-regressiontests.tar.gz
186     - source $INSTALL_DIR/bin/GMXRC
187     - cd regressiontests
188     - 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
189   artifacts:
190     paths:
191       - regressiontests/gmxtest.xml
192     when: always
193     expire_in: 1 week
194
195 include:
196   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-8-cuda-11.0-release.gitlab-ci.yml'
197   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-8.gitlab-ci.yml'
198   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-13-mpi.gitlab-ci.yml'
199   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-13-release.gitlab-ci.yml'
200   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-12-cuda-11.4.1.gitlab-ci.yml'
201   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-ASAN.gitlab-ci.yml'
202   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-static-analyzer.gitlab-ci.yml'
203   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-TSAN.gitlab-ci.yml'
204   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-UBSAN.gitlab-ci.yml'
205   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11.gitlab-ci.yml'
206   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-coverage.gitlab-ci.yml'
207   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-7-cuda-11.0.gitlab-ci.yml'
208   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-7-cuda-11.0-mpi.gitlab-ci.yml'
209   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-cuda-11.4.1.gitlab-ci.yml'
210   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-cuda-11.4.1-release.gitlab-ci.yml'
211   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-release.gitlab-ci.yml'
212   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.hipsycl-dev.gitlab-ci.yml'
213   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.oneapi-2021.4.0-opencl.gitlab-ci.yml'
214   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.oneapi-2021.4.0-opencl-release.gitlab-ci.yml'
215   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.oneapi-2021.4.0-sycl.gitlab-ci.yml'
216   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.oneapi-2021.4.0-sycl-nightly.gitlab-ci.yml'
217