xref: /petsc/.gitlab-ci.yml (revision d2522c19e8fa9bca20aaca277941d9a63e71db6a)
1#
2# stage-1 take only a few minutes; they do not run the full test suite or external packages.
3#
4# stage-2 runs on MCS systems and may take 10 to 15 minutes. They run the full test suite but with limited mixture of external packages
5#
6# stage-3 runs on MCS systems and may take an hour or more. They run the full test suite and heavily test external packages, utilize valgrind etc
7#
8# The stage-(n) tests are only started if all of the stage-(n-1) tests run without error
9#   You can limit the testing by using the variable STAGE with value 1 or 2
10#
11
12stages:
13  - stage-1
14  - stage-2
15  - stage-3
16variables:
17  GIT_STRATEGY: fetch
18  GIT_CLEAN_FLAGS: -ffdxq
19  PETSC_OPTIONS:  -checkfunctionlist
20  TIMEOUT: 450
21
22#
23# The most basic template that most tests will expand upon
24#
25
26.test-basic:
27  interruptible: true
28  only:
29    refs:
30#     Set with CI/CD Shedules - New Schedule
31      - schedules
32      - api
33#     Set with CI/CD Pipelines - Run Pipeline
34      - web
35      - merge_requests
36  dependencies: []
37
38.test:
39  extends: .test-basic
40  except:
41    variables:
42      # Skip if the docs-only label is attached to a merge request
43      - $CI_MERGE_REQUEST_LABELS =~ /(^|,)docs-only($|,)/
44      - $PETSC_CI_SCHEDULED =~ /yes/
45
46check-ci-settings:
47  extends: .test-basic
48  stage: .pre
49  tags:
50    - gce-stage1
51  script:
52    - lib/petsc/bin/maint/check-ci-settings.sh
53#
54#  This provides the basic order of operations and options template for cloud based stage 1 tests.
55#  Not all test-short need to follow this template but most will.
56#
57
58.stage-1:
59  extends: .test
60  stage: stage-1
61  tags:
62    - gce-stage1
63  before_script:
64    - date
65    - hostname
66    - grep PRETTY_NAME /etc/os-release
67    - nproc
68    - lscpu
69    - ccache --zero-stats
70    - printf "CONFIG_OPTS:${CONFIG_OPTS}\n"
71    - printf "PYTHON:${PYTHON}\n"
72  script:
73    - printf "PATH:$PATH\n"
74    - printf "PYTHONPATH:$PYTHONPATH\n"
75    - printf "PETSC_OPTIONS:$PETSC_OPTIONS\n"
76    - if [ ! -z ${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME+x} ]; then printf "CI_MERGE_REQUEST_SOURCE_BRANCH_NAME:$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME\n" ;fi
77    - ${PYTHON} ./configure --with-debugging=0 COPTFLAGS='-O3 -march=native' CXXOPTFLAGS='-O3 -march=native' FOPTFLAGS='-O3 -march=native' ${CONFIG_OPTS}
78    - make CFLAGS="${MAKE_CFLAGS}" CXXFLAGS="${MAKE_CXXFLAGS}" FFLAGS="${MAKE_FFLAGS}"
79    - make CFLAGS="${MAKE_TEST_CFLAGS}" CXXFLAGS="${MAKE_TEST_CXXFLAGS}" FFLAGS="${MAKE_TEST_FFLAGS}" allgtests-tap gmakesearch="${TEST_SEARCH}" TIMEOUT=${TIMEOUT}
80  variables:
81    PYTHON: python3
82    MAKE_CFLAGS: -Werror
83    MAKE_CXXFLAGS: -Werror -Wzero-as-null-pointer-constant
84    MAKE_FFLAGS: -Werror
85    MAKE_TEST_CFLAGS: -Werror
86    MAKE_TEST_CXXFLAGS: -Werror
87    MAKE_TEST_FFLAGS: -Werror
88  after_script:
89    - date
90    - ccache --show-stats
91  artifacts:
92    reports:
93      junit: arch-*/tests/testresults.xml
94    name: "$CI_JOB_NAME"
95    when: always
96    paths:
97    - arch-*/lib/petsc/conf/*.log
98    - arch-*/lib/pkgconfig/petsc.pc
99    - arch-*/tests/testresults.xml
100    - arch-*/tests/test_*_tap.log
101    - arch-*/tests/test_*_err.log
102    expire_in: 4 days
103
104#
105# The following tests run on the cloud as part of stage-1.
106#
107
108ompi-cuda:
109  extends: .stage-1
110  tags:
111  - cuda-stage1
112  variables:
113    CONFIG_OPTS: --with-mpi-dir=/nfs/gce/software/custom/linux-ubuntu22.04-x86_64/spack/opt/spack/linux-ubuntu22.04-x86_64/gcc-11.3.0/openmpi-4.1.3-qrpnszy --with-cuda=1 --with-fc=0
114    TEST_SEARCH: snes_tutorials-ex19_cuda%
115    MAKE_CXXFLAGS: -Werror
116
117mpich-cxx-py3:
118  extends: .stage-1
119  variables:
120    CONFIG_OPTS: --with-clanguage=cxx --with-fc=0 CXXFLAGS=-std=c++11
121    TEST_SEARCH: snes_tutorials-ex48%
122
123uni-complex-float-int64:
124  extends: .stage-1
125  variables:
126    CONFIG_OPTS: --with-mpi=0 --with-scalar-type=complex --with-precision=single --with-64-bit-indices
127    TEST_SEARCH: ts_tutorials-ex11_adv_2d_quad_%
128
129c99-mlib-static-py:
130  extends: .stage-1
131  variables:
132    CONFIG_OPTS: --with-single-library=0 --with-shared-libraries=0 CFLAGS=-std=c99
133    TEST_SEARCH: snes_tutorials-ex19% snes_tutorials-ex5f90t%
134    MAKE_TEST_FFLAGS: -Werror -std=f2008
135
136petsc4py-install:
137  extends: .stage-2
138  tags:
139    - gce-stage2
140  variables:
141    PYTHON: python3
142    T_PREFIX: petsc-install
143    T_DESTDIR: petsc-destdir
144    T_PETSC4PY: src/binding/petsc4py
145    T_VALIDATE_CMD: lib/petsc/bin/maint/validate-petsc4py.sh
146  script:
147    - printf "PATH:$PATH\n"
148    - mkdir hide
149    - if [ ! -z ${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME+x} ]; then printf "CI_MERGE_REQUEST_SOURCE_BRANCH_NAME:$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME\n" ;fi
150    - ${PYTHON} ./configure --prefix="${PWD}/${T_PREFIX}" --with-petsc4py=1 --with-debugging=0
151    - make CFLAGS=-Werror CXXFLAGS="-Werror -Wzero-as-null-pointer-constant" FFLAGS=-Werror
152    - printf "====== Test A. Install into staging directory then into prefix directory (mimics distro package recipe) =====\n"
153    - make install DESTDIR="${PWD}/${T_DESTDIR}"
154    - test "$(find ${PWD}/${T_PREFIX} -mindepth 1 | wc -l)" -eq 0
155    - test "$(find ${PWD}/${T_DESTDIR} -mindepth 1 | wc -l)" -gt 0
156    - (cd "${PWD}/${T_DESTDIR}" && find * -exec install -v -D "{}" "/{}" \; )
157    - mv arch-* hide/ && PETSC_DIR="${PWD}/${T_PREFIX}" ${T_VALIDATE_CMD} && mv hide/arch-* ./
158    - rm -r "${PWD}/${T_PREFIX}" "${PWD}/${T_DESTDIR}" && mkdir "${PWD}/${T_PREFIX}"
159    - printf "====== Test B. Install directly into prefix directory =====\n"
160    - make install
161    - test "$(find ${PWD}/${T_PREFIX} -mindepth 1 | wc -l)" -gt 0
162    - mv arch-* hide/ && PETSC_DIR="${PWD}/${T_PREFIX}" ${T_VALIDATE_CMD} && mv hide/arch-* ./
163    - rm -r "${PWD}/${T_PREFIX}"/*/petsc4py*
164    - printf "====== Test C. Install manually with setuptools =====\n"
165    - export PETSC_DIR="${PWD}/${T_PREFIX}" && (cd "${T_PETSC4PY}" && ${PYTHON} setup.py build)
166    - export PETSC_DIR="${PWD}/${T_PREFIX}" P="${PWD}" && (cd "${T_PETSC4PY}" && ${PYTHON} setup.py install --install-lib="${P}/${T_PREFIX}/lib")
167    - mv arch-* hide/ && PETSC_DIR="${PWD}/${T_PREFIX}" ${T_VALIDATE_CMD} && mv hide/arch-* ./
168    - rm -r "${PWD}/${T_PREFIX}"/*/petsc4py*
169    - printf "====== Test D. Install manually with setuptools with staging =====\n"
170    - export PETSC_DIR="${PWD}/${T_PREFIX}" P="${PWD}" && (cd "${T_PETSC4PY}" && ${PYTHON} setup.py install --root="${P}/${T_DESTDIR}" --install-lib="${P}/${T_PREFIX}/lib")
171    - (cd "${PWD}/${T_DESTDIR}" && find * -exec install -v -D "{}" "/{}" \; )
172    - mv arch-* hide/ && PETSC_DIR="${PWD}/${T_PREFIX}" ${T_VALIDATE_CMD} && mv hide/arch-* ./
173
174petsc4py-pip:
175  extends: .stage-2
176  tags:
177    - gce-stage2
178  variables:
179    PETSC_CONFIGURE_OPTIONS: --with-mpi=0 --with-fc=0
180    CFLAGS: -O0
181  script:
182    - python3 -m venv pip-builds
183    - source pip-builds/bin/activate
184    - python3 -m pip install --upgrade pip
185    - python3 -m pip install .
186    - python3 -m pip install src/binding/petsc4py
187    - python3 -m petsc4py
188
189checksource:
190  extends: .test-basic
191  stage: .pre
192  tags:
193    - gce-u22-stage1
194  script:
195    - python3 ./configure --with-mpi=0 --with-fc=0 --with-cxx=0
196    - vermin --version
197    - make vermin
198    - make checkclangformat SHELL=bash
199    - make checkbadSource SHELL=bash
200    - make -f gmakefile check_output SHELL=bash
201    - make check_petsc4py_rst
202  artifacts:
203    name: "$CI_JOB_NAME"
204    when: always
205    paths:
206    - arch-*/lib/petsc/conf/*.diff
207    expire_in: 4 days
208
209pause-for-approval:
210  extends: .test
211  stage: .pre
212  tags:
213    - gce-stage1
214  only:
215    refs:
216      - merge_requests
217    variables:
218      - $CI_MERGE_REQUEST_EVENT_TYPE == "merged_result"
219      - $CI_MERGE_REQUEST_EVENT_TYPE == "detached"
220  script:
221    - echo "pause-for-approval has no script to run"
222  variables:
223    GIT_STRATEGY: none
224  when: manual
225  allow_failure: false
226
227#
228# This provides the basic order of operations and options template for stage-2,3 tests.
229# Not all stage-2,3 need to follow this template, but most will.
230#
231.stage-23:
232  extends: .test
233  script:
234    - if [ -d ${HOME}/petsc-hash-pkgs/ ]; then find ${HOME}/petsc-hash-pkgs/ -maxdepth 1 -mindepth 1 -type d -mtime +25 -exec rm -rf {} \; ; fi
235    - printf "PATH:$PATH\n"
236    - printf "PYTHONPATH:$PYTHONPATH\n"
237    - printf "PETSC_OPTIONS:$PETSC_OPTIONS\n"
238    - if [ ! -z ${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME+x} ]; then printf "CI_MERGE_REQUEST_SOURCE_BRANCH_NAME:$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME\n" ;fi
239    - printf "./config/examples/${TEST_ARCH}.py\n"
240    - cat ./config/examples/${TEST_ARCH}.py
241    - ./config/examples/${TEST_ARCH}.py
242    - make CFLAGS="${MAKE_CFLAGS}" CXXFLAGS="${MAKE_CXXFLAGS}" FFLAGS="${MAKE_FFLAGS}"
243    - make CFLAGS="${MAKE_CFLAGS}" CXXFLAGS="${MAKE_CXXFLAGS}" FFLAGS="${MAKE_FFLAGS}" check
244    - make updatedatafiles
245    - if [ -z ${DISABLE_PETSC4PY_TESTS+x} ]; then if [ -z ${ENABLE_PETSC4PY_LDPRELOAD+x} ]; then echo "NOT using LD_PRELOAD"; make petsc4pytest; else echo "using LD_PRELOAD"; LD_PRELOAD=${PWD}/${TEST_ARCH}/lib/libpetsc.so make petsc4pytest; fi; fi
246    - if [ -z ${DISABLE_TESTS+x} ]; then make CFLAGS="${MAKE_CFLAGS}" CXXFLAGS="${MAKE_CXXFLAGS}" FFLAGS="${MAKE_FFLAGS}" cleantest allgtests-tap TIMEOUT=${TIMEOUT}  ${TEST_OPTS}; fi
247    - if [ ! -z ${RUN_GCOV+x} ]; then make gcov; fi
248  artifacts:
249    reports:
250      junit: ${TEST_ARCH}/tests/testresults.xml
251    name: "$CI_JOB_NAME"
252    when: always
253    paths:
254    - ${TEST_ARCH}/lib/petsc/conf/*.log
255    - ${TEST_ARCH}/lib/pkgconfig/petsc.pc
256    - ${TEST_ARCH}/tests/testresults.xml
257    - ${TEST_ARCH}/tests/test_${TEST_ARCH}_tap.log
258    - ${TEST_ARCH}/tests/test_${TEST_ARCH}_err.log
259    - ${TEST_ARCH}/gcov.tar.gz
260    expire_in: 4 days
261  variables:
262    OPENBLAS_NUM_THREADS: 1
263
264.stage-2:
265  extends: .stage-23
266  stage: stage-2
267
268.stage-3:
269  extends: .stage-23
270  stage: stage-3
271
272#
273# The following provide templates for various OSes for pre/post info
274#
275
276.linux_test_noflags:
277  before_script:
278    - date
279    - hostname
280    - grep PRETTY_NAME /etc/os-release
281    - nproc
282    - lscpu
283    - ccache --zero-stats
284    - if [ ! -z ${LOAD_MODULES+x} ]; then module --trace load ${LOAD_MODULES}; module list; fi
285    - if [ ! -z ${INIT_SCRIPT+x} ]; then echo "sourcing ${INIT_SCRIPT}"; source ${INIT_SCRIPT}; fi
286  after_script:
287    - date
288    - ccache --show-stats
289
290.linux_test_nofflags:
291  extends: .linux_test_noflags
292  variables:
293    MAKE_CFLAGS: -Werror
294    MAKE_CXXFLAGS: -Werror
295
296.linux_test:
297  extends: .linux_test_noflags
298  variables:
299    MAKE_CFLAGS: -Werror
300    MAKE_CXXFLAGS: -Werror
301    MAKE_FFLAGS: -Werror
302
303.freebsd_test:
304  variables:
305    MAKE_CFLAGS: -Werror
306    MAKE_CXXFLAGS: -Werror
307    MAKE_FFLAGS: -Werror
308  before_script:
309    - date
310    - hostname
311    - freebsd-version
312    - echo $(sysctl -n hw.ncpu)
313    - ccache --zero-stats
314  after_script:
315    - date
316    - ccache --show-stats
317
318.osx_test:
319  variables:
320    MAKE_CFLAGS: -Werror
321    MAKE_CXXFLAGS: -Werror
322    MAKE_FFLAGS: -Werror
323  before_script:
324    - date
325    - hostname
326    - sw_vers -productVersion
327    - echo $(sysctl -n hw.ncpu)
328    - ccache --zero-stats
329    - if [ ! -z ${INIT_SCRIPT+x} ]; then echo "sourcing ${INIT_SCRIPT}"; source ${INIT_SCRIPT}; fi
330  after_script:
331    - date
332    - ccache --show-stats
333
334.opensolaris_test:
335  before_script:
336    - date
337    - hostname
338    - uname -a
339    - nproc
340    - isainfo -x
341  after_script:
342    - date
343
344.mswin_test:
345  before_script:
346    - date
347    - hostname
348    - uname -a
349    - nproc
350  after_script:
351    - date
352
353#
354# The following tests run as part of stage-2.
355#
356# The tags variable used in the tests below connects the particular test with the runners
357# listed on the left hand side of https://gitlab.com/petsc/petsc/-/settings/ci_cd.
358# For example the test linux-sycl-double any runner that has the tags 'gce-nfs, linux-fast'
359# (in a blue box beneath it)
360#
361
362osx-m1:
363  extends:
364    - .stage-3
365    - .osx_test
366  tags:
367    - os:macos-m1
368  variables:
369    TEST_ARCH: arch-ci-osx-m1
370    PETSC_OPTIONS: -check_pointer_intensity 0 -error_output_stdout -nox -nox_warning -malloc_dump
371    INIT_SCRIPT: /Volumes/Scratch/svcpetsc/soft/py3venv/cython3setup.sh
372
373freebsd-cxx-cmplx-64idx-dbg:
374  extends:
375    - .stage-2
376    - .freebsd_test
377  tags:
378    - os:fbsd
379  variables:
380    TEST_ARCH: arch-ci-freebsd-cxx-cmplx-64idx-dbg
381
382freebsd-c-single-opt:
383  extends:
384    - .stage-2
385    - .freebsd_test
386  tags:
387    - os:fbsd
388  variables:
389    TEST_ARCH: arch-ci-freebsd-c-single-opt
390
391mswin-opt-impi:
392  extends:
393    - .stage-2
394    - .mswin_test
395  tags:
396    - mswin-stage2
397  variables:
398    TEST_ARCH: arch-ci-mswin-opt-impi
399    TEST_OPTS: search='ksp_ksp_tests*'
400
401linux-gcc-quad-64idx-dbg:
402  extends:
403    - .stage-2
404    - .linux_test
405  tags:
406    - gce-stage2
407  variables:
408    TEST_ARCH: arch-ci-linux-gcc-quad-64idx-dbg
409
410linux-gcc-pkgs-opt:
411  extends:
412    - .stage-2
413    - .linux_test
414  tags:
415    - gce-stage2
416  variables:
417    TEST_ARCH: arch-ci-linux-gcc-pkgs-opt
418
419linux-gcc-complex-opt-32bit:
420  extends:
421    - .stage-2
422    - .linux_test
423  tags:
424    - gce-stage2
425  variables:
426    TEST_ARCH: arch-ci-linux-gcc-complex-opt-32bit
427
428#
429# The following tests run as part of stage-3.
430#
431
432freebsd-cxx-cmplx-pkgs-dbg:
433  extends:
434    - .stage-3
435    - .freebsd_test
436  tags:
437    - os:fbsd
438  variables:
439    TEST_ARCH: arch-ci-freebsd-cxx-cmplx-pkgs-dbg
440
441freebsd-cxx-pkgs-opt:
442  extends:
443    - .stage-3
444    - .freebsd_test
445  tags:
446    - os:fbsd
447  variables:
448    PETSC_OPTIONS: -vecscatter_mpi1 false -options_left false -checkfunctionlist
449    TEST_ARCH: arch-ci-freebsd-cxx-pkgs-opt
450
451freebsd-pkgs-opt:
452  extends:
453    - .stage-3
454    - .freebsd_test
455  tags:
456    - os:fbsd
457  variables:
458    TEST_ARCH: arch-ci-freebsd-pkgs-opt
459
460linux-hip-double:
461  extends:
462    - .stage-3
463    - .linux_test_noflags
464  tags:
465    - gpu:amd, os:linux
466  variables:
467    TEST_ARCH: arch-ci-linux-hip-double
468
469linux-sycl-double:
470  extends:
471    - .stage-3
472    - .linux_test_noflags
473  tags:
474    - gce-nfs, linux-fast
475  variables:
476    TEST_ARCH: arch-ci-linux-sycl-double
477    LOAD_MODULES: compiler/latest mpi/latest cmake/3.20.5-yjp2hz6
478    TEST_OPTS: query=requires queryval=kokkos_kernels
479
480linux-cuda-pkgs:
481  extends:
482    - .stage-3
483    - .linux_test
484  tags:
485    - cuda-stage3
486  variables:
487    TEST_ARCH: arch-ci-linux-cuda-pkgs
488    TEST_OPTS: -j3 query=requires queryval=cuda
489
490linux-cuda112-omp:
491  extends:
492    - .stage-3
493    - .linux_test
494  tags:
495    - cuda-stage3
496  variables:
497    TEST_ARCH: arch-ci-linux-cuda112-omp
498    TEST_OPTS: -j4 query=requires queryval=kokkos_kernels
499    LOAD_MODULES: cuda/11.2.2 u-gcc-9/9.4.0
500    OMP_PROC_BIND: "false"
501    OMP_NUM_THREADS: 1
502
503linux-cuda-cmplx:
504  extends:
505    - .stage-3
506    - .linux_test
507  tags:
508    - cuda-stage3
509  variables:
510    TEST_ARCH: arch-ci-linux-cuda-cmplx
511
512linux-cuda-double-64idx:
513  extends:
514    - .stage-3
515    - .linux_test
516  tags:
517    - cuda-stage3
518  variables:
519    TEST_ARCH: arch-ci-linux-cuda-double-64idx
520    TEST_OPTS: -j15 query=requires queryval=cuda
521
522linux-cuda-single-cxx:
523  extends:
524    - .stage-3
525    - .linux_test_noflags
526  tags:
527    - cuda-stage3
528  variables:
529    TEST_ARCH: arch-ci-linux-cuda-single-cxx
530    LOAD_MODULES: nvhpc/22.3
531    TEST_OPTS: -j15 query=requires queryval=cuda
532
533linux-cuda-uni-pkgs:
534  extends:
535    - .stage-3
536    - .linux_test
537  tags:
538    - cuda-stage3
539  variables:
540    TEST_ARCH: arch-ci-linux-cuda-uni-pkgs
541    TEST_OPTS: -j20 query=requires queryval=cuda
542
543linux-viennacl:
544  extends:
545    - .stage-3
546    - .linux_test
547  tags:
548    - cuda-stage3
549  variables:
550    TEST_ARCH: arch-ci-linux-viennacl
551    MAKE_CXXFLAGS: -Werror -Wno-ignored-attributes
552    TEST_OPTS: -j20 query=requires queryval=viennacl
553
554linux-without-fc:
555  extends:
556    - .stage-3
557    - .linux_test
558  tags:
559    - gce-nfs
560  variables:
561    TEST_ARCH: arch-ci-linux-without-fc
562
563linux-cmplx-single:
564  extends:
565    - .stage-3
566    - .linux_test
567  tags:
568    - name:si
569  variables:
570    FLEXIBLAS: netlib
571    TEST_ARCH: arch-ci-linux-cmplx-single
572
573linux-gcc-cxx-avx2:
574  extends:
575    - .stage-3
576    - .linux_test
577  tags:
578    - name:isdp001
579  variables:
580    TEST_ARCH: arch-ci-linux-gcc-cxx-avx2
581
582linux-clang-avx:
583  extends:
584    - .stage-3
585    - .linux_test
586  tags:
587    - name:isdp001
588  variables:
589    TEST_ARCH: arch-ci-linux-clang-avx
590
591linux-knl:
592  extends:
593    - .stage-3
594    - .linux_test
595  tags:
596    - name:isdp001
597  variables:
598    MAKE_FFLAGS: -warn errors
599    TEST_ARCH: arch-ci-linux-knl
600
601linux-intel-mkl-single:
602  extends:
603    - .stage-3
604    - .linux_test_nofflags
605  tags:
606    - name:isdp001
607  variables:
608    TEST_ARCH: arch-ci-linux-intel-mkl-single
609
610linux-cxx-cmplx-pkgs-64idx:
611  extends:
612    - .stage-3
613    - .linux_test
614  tags:
615    - gce-nfs
616  variables:
617    TEST_ARCH: arch-ci-linux-cxx-cmplx-pkgs-64idx
618    LOAD_MODULES: llvm/9.0.0-7fyffox gcc/8.3.0-fjpc5ys cmake/3.14.2-rl3q676
619
620# Set env vars for 'Kokkos + OpenMP' tests, so that they won't give warnings
621linux-pkgs-dbg-ftn-interfaces:
622  extends:
623    - .stage-3
624    - .linux_test
625  tags:
626    - gce-nfs
627  variables:
628    TEST_ARCH: arch-ci-linux-pkgs-dbg-ftn-interfaces
629    LOAD_MODULES: cmake/3.20.5-yjp2hz6
630    OMP_PROC_BIND: "false"
631    OMP_NUM_THREADS: 4
632
633linux-pkgs-cxx-mlib:
634  extends:
635    - .stage-3
636    - .linux_test
637  tags:
638    - gce-u22-stage3
639  variables:
640    TEST_ARCH: arch-ci-linux-pkgs-cxx-mlib
641
642linux-pkgs-valgrind:
643  extends:
644    - .stage-3
645    - .linux_test
646  tags:
647    - gce-valgrind
648  variables:
649    TEST_ARCH: arch-ci-linux-pkgs-valgrind
650    TIMEOUT: 7200
651
652linux-pkgs-opt:
653  extends:
654    - .stage-3
655    - .linux_test
656  tags:
657    - gce-nfs, linux-fast
658  variables:
659    TEST_ARCH: arch-ci-linux-pkgs-opt
660    LOAD_MODULES: gcc/10.1.0-5hiqhdh
661
662linux-pkgs-gcov:
663  extends:
664    - .stage-3
665    - .linux_test
666  tags:
667    - gce-nfs, linux-gcov
668  variables:
669    TEST_ARCH: arch-ci-linux-pkgs-gcov
670    RUN_GCOV: 1
671
672linux-cmplx-gcov:
673  extends:
674    - .stage-3
675    - .linux_test
676  tags:
677    - gce-nfs, linux-gcov
678  variables:
679    PETSC_OPTIONS:  -vecscatter_mpi1 false -options_left false -checkfunctionlist
680    TEST_ARCH: arch-ci-linux-cmplx-gcov
681    LOAD_MODULES: gcc/8.3.0-fjpc5ys
682    RUN_GCOV: 1
683
684linux-matlab-ilp64-gcov:
685  extends:
686    - .stage-3
687    - .linux_test
688  tags:
689    - gce-nfs, linux-gcov
690  variables:
691    TEST_ARCH: arch-ci-linux-matlab-ilp64-gcov
692    LOAD_MODULES: matlab/R2018a
693    RUN_GCOV: 1
694  allow_failure: true
695
696linux-gcov:
697  extends:
698    - .stage-3
699    - .linux_test
700  tags:
701    - gce-nfs, linux-gcov
702  variables:
703    TEST_ARCH: arch-ci-linux-gcov
704    RUN_GCOV: 1
705
706linux-pgi:
707  extends:
708    - .stage-3
709    - .linux_test_noflags
710  tags:
711    - gce-nfs, linux-mcpu
712  variables:
713    TEST_ARCH: arch-ci-linux-pgi
714    LOAD_MODULES: hpc_sdk/20.9
715
716# If the Nag license server fails then ${PETSC_DIR}/naglicenseproblem is created and the job is marked as failed but allow_failure
717linux-nagfor:
718  extends:
719    - .stage-3
720    - .linux_test_nofflags
721  tags:
722    - gce-nfs, linux-mcpu
723  script:
724    - rm -f naglicenseproblem
725    - printf "PATH:$PATH\n"
726    - printf "PETSC_OPTIONS:$PETSC_OPTIONS\n"
727    - if [ ! -z ${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME+x} ]; then printf "CI_MERGE_REQUEST_SOURCE_BRANCH_NAME:$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME\n" ;fi
728    - printf "./config/examples/${TEST_ARCH}.py\n"
729    - cat ./config/examples/${TEST_ARCH}.py
730    - ./config/examples/${TEST_ARCH}.py || if [ -f naglicenseproblem ]; then exit 126; else exit 1; fi
731    - make CFLAGS="${MAKE_CFLAGS}" CXXFLAGS="${MAKE_CXXFLAGS}" FFLAGS="${MAKE_FFLAGS}" || if [ -f naglicenseproblem ]; then exit 126; else exit 1; fi
732    - make CFLAGS="${MAKE_CFLAGS}" CXXFLAGS="${MAKE_CXXFLAGS}" FFLAGS="${MAKE_FFLAGS}" check || if [ -f naglicenseproblem ]; then exit 126; else exit 1; fi
733    - make updatedatafiles
734    - make CFLAGS="${MAKE_CFLAGS}" CXXFLAGS="${MAKE_CXXFLAGS}" FFLAGS="${MAKE_FFLAGS}" cleantest allgtests-tap TIMEOUT=${TIMEOUT}  ${TEST_OPTS} || if [ -f naglicenseproblem ]; then exit 126; else exit 1; fi
735  variables:
736    LOAD_MODULES: nag/6.1
737    TEST_ARCH: arch-ci-linux-nagfor
738  allow_failure:
739    exit_codes: 126
740
741linux-intel-cmplx:
742  extends:
743    - .stage-3
744    - .linux_test_nofflags
745  tags:
746    - gce-nfs
747  variables:
748    TEST_ARCH: arch-ci-linux-intel-cmplx
749    LOAD_MODULES: intel-mkl/19.5 intel/19.0-nompilib cmake/3.20.5-yjp2hz6
750    ENABLE_PETSC4PY_LDPRELOAD: 1
751
752linux-xsdk-dbg:
753  extends:
754    - .stage-3
755    - .linux_test
756  tags:
757    - gce-nfs
758  variables:
759    TEST_ARCH: arch-ci-linux-xsdk-dbg
760    LOAD_MODULES: gcc/8.3.0-fjpc5ys
761
762linux-analyzer:
763  extends:
764    - .stage-2
765    - .linux_test
766  tags:
767    - gce-u22-stage2
768  script:
769    - printf "PATH:$PATH\n"
770    - printf "PYTHONPATH:$PYTHONPATH\n"
771    - printf "PETSC_OPTIONS:$PETSC_OPTIONS\n"
772    - if [ ! -z ${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME+x} ]; then printf "CI_MERGE_REQUEST_SOURCE_BRANCH_NAME:$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME\n" ;fi
773    - printf "./config/examples/${TEST_ARCH}.py\n"
774    - cat ./config/examples/${TEST_ARCH}.py
775    - ./config/examples/${TEST_ARCH}.py
776    - make LINTER_OPTIONS="${LINTER_OPTIONS}" test-lint
777    - make LINTER_OPTIONS="${LINTER_OPTIONS}" lint
778  variables:
779    TEST_ARCH: arch-ci-linux-analyzer
780    LINTER_OPTIONS: "--PETSC_ARCH=${TEST_ARCH} --clang_lib=`llvm-config-14 --libdir`/libclang.so.1 --verbose --werror"
781  artifacts:
782    paths:
783    - ${TEST_ARCH}/lib/petsc/conf/*.log
784    - ./petscLintPatches/*.patch
785
786linux-intel:
787  extends:
788    - .stage-3
789    - .linux_test_nofflags
790  tags:
791    - gce-nfs
792  variables:
793    TEST_ARCH: arch-ci-linux-intel
794    LOAD_MODULES: intel-mkl/19.5 intel/19.0-nompilib
795
796linux-opt-misc:
797  extends:
798    - .stage-3
799    - .linux_test
800  tags:
801    - gce-nfs, linux-fast
802  variables:
803    TEST_ARCH: arch-ci-linux-opt-misc
804    LOAD_MODULES: gcc/6.5.0-57usejd
805
806linux-pkgs-64idx:
807  extends:
808    - .stage-3
809    - .linux_test
810  tags:
811    - gce-nfs, linux-mcpu
812  variables:
813    TEST_ARCH: arch-ci-linux-pkgs-64idx
814    LOAD_MODULES: cmake/3.20.5-yjp2hz6 intel-mkl/19.5
815
816linux-64idx-i8:
817  extends:
818    - .stage-3
819    - .linux_test
820  tags:
821    - gce-nfs
822  variables:
823    TEST_ARCH: arch-ci-linux-64idx-i8
824
825linux-gcc-ifc-cmplx:
826  extends:
827    - .stage-3
828    - .linux_test_nofflags
829  tags:
830    - gce-nfs
831  variables:
832    TEST_ARCH: arch-ci-linux-gcc-ifc-cmplx
833    LOAD_MODULES: intel/19.0-nompilib cmake/3.20.0-vov726r
834
835linux-opt-cxx-quad:
836  extends:
837    - .stage-3
838    - .linux_test
839  tags:
840    - gce-nfs
841  variables:
842    TEST_ARCH: arch-ci-linux-opt-cxx-quad
843
844linux-ILP64:
845  extends:
846    - .stage-3
847    - .linux_test
848  tags:
849    - gce-nfs
850  variables:
851    TEST_ARCH: arch-ci-linux-ILP64
852    LOAD_MODULES: mpich/2-1.5-gcc750
853
854linux-64idx-i8-uni:
855  extends:
856    - .stage-3
857    - .linux_test
858  tags:
859    - gce-nfs
860  variables:
861    TEST_ARCH: arch-ci-linux-64idx-i8-uni
862
863mswin-intel-cxx-cmplx:
864  extends:
865    - .stage-3
866    - .mswin_test
867  tags:
868    - mswin-stage3
869  variables:
870    TEST_ARCH: arch-ci-mswin-intel-cxx-cmplx
871
872mswin-uni:
873  extends:
874    - .stage-3
875    - .mswin_test
876  tags:
877    - mswin-stage3
878  variables:
879    PETSC_OPTIONS: -check_pointer_intensity 0 -error_output_stdout -nox -nox_warning -malloc_dump
880    TEST_ARCH: arch-ci-mswin-uni
881
882mswin-gnu:
883  extends:
884    - .stage-3
885    - .mswin_test
886  tags:
887    - mswin-stage3
888  variables:
889    TEST_ARCH: arch-ci-mswin-gnu
890    MAKE_CFLAGS: -Werror
891    MAKE_CXXFLAGS: -Werror
892    MAKE_FFLAGS: -Werror
893    DISABLE_TESTS: 1
894  artifacts:
895    reports:
896    paths:
897    - arch-*/lib/petsc/conf/*.log
898    expire_in: 4 days
899
900#mswin-intel:
901#  extends:
902#    - .stage-3
903#    - .mswin_test
904#  tags:
905#    - os:win
906#  variables:
907#    TEST_ARCH: arch-ci-mswin-intel
908
909opensolaris-pkgs-opt:
910  extends:
911    - .stage-3
912    - .opensolaris_test
913  tags:
914    - name:n-gage
915  variables:
916    TEST_ARCH: arch-ci-opensolaris-pkgs-opt
917
918opensolaris-cmplx-pkgs-dbg:
919  extends:
920    - .stage-3
921    - .opensolaris_test
922  tags:
923    - name:n-gage
924  variables:
925    TEST_ARCH: arch-ci-opensolaris-cmplx-pkgs-dbg
926
927opensolaris-misc:
928  extends:
929    - .stage-3
930    - .opensolaris_test
931  tags:
932    - name:n-gage
933  variables:
934    TEST_ARCH: arch-ci-opensolaris-misc
935
936osx-cxx-cmplx-pkgs-dbg:
937  extends:
938    - .stage-3
939    - .osx_test
940  tags:
941    - os:macos
942  variables:
943    TEST_ARCH: arch-ci-osx-cxx-cmplx-pkgs-dbg
944    INIT_SCRIPT: /Users/glci/bin/py3.sh
945
946osx-cxx-pkgs-opt:
947  extends:
948    - .stage-3
949    - .osx_test
950  tags:
951    - os:macos, opt
952  variables:
953    PETSC_OPTIONS: -vecscatter_mpi1 false -options_left false -checkfunctionlist
954    TEST_ARCH: arch-ci-osx-cxx-pkgs-opt
955    MAKE_CXXFLAGS: -Werror -Wno-pass-failed
956
957osx-dbg:
958  extends:
959    - .stage-3
960    - .osx_test
961  tags:
962    - os:macos
963  variables:
964    TEST_ARCH: arch-ci-osx-dbg
965
966osx-xsdk-opt:
967  extends:
968    - .stage-3
969    - .osx_test
970  tags:
971    - os:macos, opt
972  variables:
973    TEST_ARCH: arch-ci-osx-xsdk-opt
974
975# job for analyzing the final coverage results
976analyze-pipeline:
977  extends: .test
978  stage: .post
979  tags:
980    - gce-nfs-short
981  dependencies:
982    - linux-pkgs-gcov
983    - linux-cmplx-gcov
984    - linux-matlab-ilp64-gcov
985    - linux-gcov
986  variables:
987    PETSC_ARCH: arch-ci-analyze-pipeline
988  before_script:
989    - date
990    - hostname
991  script:
992  - ./configure --with-mpi=0 --with-cxx=0 --with-c2html
993  - make srchtml
994  - make mergegcov
995  artifacts:
996    name: "$CI_JOB_NAME"
997    when: always
998    paths:
999    - arch-ci-analyze-pipeline/*
1000    expire_in: 4 days
1001
1002
1003#
1004# Base job for a documentation build
1005#
1006.docs:
1007  stage: stage-3
1008  tags:
1009    - gce-stage2
1010  before_script:
1011    - VENV=venv-petsc-docs &&
1012      python3 -m venv $VENV &&
1013      . $VENV/bin/activate &&
1014      cd doc &&
1015      pip install -r requirements.txt
1016
1017#
1018# Build documentation and make available for review using GitLab pages
1019#
1020docs-review:
1021  extends:
1022    - .docs
1023    - .test-basic
1024  script:
1025    - (make html BUILDDIR="../public" SPHINXOPTS="-T -E -W --keep-going") || (printf "Sphinx build failed (warnings count as errors)\n" && false)
1026    - (make latexpdf SPHINXOPTS="-T -E -W --keep-going") || (printf "Sphinx build failed (warnings count as errors)\n" && false)
1027    - cp _build/latex/manual.pdf ../public/html/docs/manual/
1028  environment:
1029    name: review/$CI_COMMIT_REF_NAME
1030    url: https://$CI_PROJECT_NAMESPACE.gitlab.io/-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/public/html/index.html
1031  artifacts:
1032    paths:
1033      - public
1034  except:
1035    variables:
1036      - $PETSC_CI_SCHEDULED =~ /yes/
1037
1038#
1039# Deploy documentation using GitLab pages
1040#
1041pages:  # this job name has special meaning to GitLab
1042  extends: .docs
1043  interruptible: true
1044  script:
1045    - mkdir -p ../public/ && cp public/* ../public/
1046    - git fetch --unshallow --no-tags origin +release:remotes/origin/release +main:remotes/origin/main
1047    - git checkout origin/main && pip install -r requirements.txt && make website-deploy BUILDDIR="../public/main" && make latexpdf && mkdir -p ../public/main/docs/manual && cp _build/latex/manual.pdf ../public/main/docs/manual/
1048    - make clean BUILDDIR="../public/release"
1049    - git checkout origin/release && pip install -r requirements.txt && make website-deploy BUILDDIR="../public/release" && make latexpdf && mkdir -p ../public/release/docs/manual && cp _build/latex/manual.pdf ../public/release/docs/manual/
1050  only:
1051    variables:
1052      - $PETSC_CI_SCHEDULED == "yes"
1053  artifacts:
1054    paths:
1055      - public
1056
1057#
1058#
1059# The following tests are experimental; more tests by users at other sites may be added below this.  Experimental test
1060# that fail produce a warning, but do not block execution of a pipeline.
1061#
1062
1063.test-experimental:
1064  extends: .test
1065  allow_failure: true
1066
1067