# Repository cleanliness. Source tidiness, linting, and policy compliance.
-clang-tidy:configure:
+clang-tidy:configure-push:
extends:
- .gromacs:base:configure
- - .use-clang7
- - .rules:not-for-release
- needs:
- - job: simple-build
- artifacts: false
+ - .use-clang:base
+ - .rules:basic-push
+ image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-11-cuda-11.4.1
+ variables:
+ CMAKE: /usr/local/cmake-3.16.3/bin/cmake
+ COMPILER_MAJOR_VERSION: 11
+ BUILD_DIR: build-clang-tidy
+ CMAKE_EXTRA_OPTIONS: -DCLANG_TIDY=clang-tidy-$COMPILER_MAJOR_VERSION -DGMX_CLANG_TIDY=ON -DGMX_COMPILER_WARNINGS=ON -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
+
+clang-tidy:configure-schedule:
+ extends:
+ - .gromacs:base:configure
+ - .use-clang:base
+ - .rules:nightly-not-for-release
+ image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-11-cuda-11.4.1
variables:
+ CMAKE: /usr/local/cmake-3.16.3/bin/cmake
+ COMPILER_MAJOR_VERSION: 11
BUILD_DIR: build-clang-tidy
CMAKE_EXTRA_OPTIONS: -DCLANG_TIDY=clang-tidy-$COMPILER_MAJOR_VERSION -DGMX_CLANG_TIDY=ON -DGMX_COMPILER_WARNINGS=ON
- EXTRA_INSTALLS: clang-tidy-$COMPILER_MAJOR_VERSION
- CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
- # TODO: Enable GMX_PYTHON_PACKAGE for clang-tidy when dependencies are in Docker image.
+
+clang-tidy:configure-schedule-cuda:
+ extends:
+ - .gromacs:base:configure
+ - .use-clang:base
+ - .use-cuda
+ - .rules:nightly-not-for-release
+ image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-11-cuda-11.4.1
+ variables:
+ CMAKE: cmake
+ COMPILER_MAJOR_VERSION: 11
+ BUILD_DIR: build-clang-tidy
+ CMAKE_EXTRA_OPTIONS: -DCLANG_TIDY=clang-tidy-$COMPILER_MAJOR_VERSION -DGMX_CLANG_TIDY=ON -DGMX_COMPILER_WARNINGS=ON -DGMX_CLANG_CUDA=ON
clang-tidy:build:
extends:
- .gromacs:base:build
- .use-ccache
- .variables:default
- - .use-clang7
- - .rules:not-for-release
+ - .rules:nightly-not-for-release
stage: source-check
+ image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-11-cuda-11.4.1
needs:
- - job: simple-build
- artifacts: false
- - job: clang-tidy:configure
- artifacts: true
+ - job: clang-tidy:configure-schedule
variables:
+ CMAKE: /usr/local/cmake-3.16.3/bin/cmake
BUILD_DIR: build-clang-tidy
- EXTRA_INSTALLS: clang-tidy-$COMPILER_MAJOR_VERSION
-clang-format:
+clang-tidy:build-cuda:
extends:
- .gromacs:base:build
+ - .use-ccache
- .variables:default
- - .use-clang7
- - .rules:not-for-release
- cache: {}
+ - .rules:nightly-not-for-release
stage: source-check
- when: always
+ image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-11-cuda-11.4.1
needs:
- - job: simple-build
- artifacts: false
+ - job: clang-tidy:configure-schedule-cuda
variables:
+ CMAKE: cmake
+ BUILD_DIR: build-clang-tidy
+
+clang-tidy:test:
+ extends:
+ - .gromacs:base:build
+ - .variables:default
+ - .rules:basic-push
+ stage: source-check
+ image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-11-cuda-11.4.1
+ needs:
+ - job: clang-tidy:configure-push
+ variables:
+ CMAKE: /usr/local/cmake-3.16.3/bin/cmake
+ COMPILER_MAJOR_VERSION: 11
+ BUILD_DIR: build-clang-tidy
+ EXTRA_INSTALLS: clang-tidy-$COMPILER_MAJOR_VERSION
+ KUBERNETES_CPU_LIMIT: 4
+ KUBERNETES_CPU_REQUEST: 2
+ KUBERNETES_MEMORY_REQUEST: 4Gi
+ script:
+ # Make sure that a Python interpreter can be found for `/bin/env python`
+ - test -x /usr/bin/python || update-alternatives --install /usr/bin/python python /usr/bin/python3 1
+ # TODO (issue #3272) `master` is not appropriate for use on release-xxxx branches, how should we handle that?
+ - REV=$(git fetch -q https://gitlab.com/gromacs/gromacs.git master && git show -s --pretty=format:"%h" `git merge-base FETCH_HEAD HEAD`)
+ - HEAD_REV=$(git show -s --pretty=format:"%h" HEAD)
+ - if [[ "$REV" == "$HEAD_REV" ]] ; then
+ REV="HEAD~1" ;
+ fi
+ - echo "Revision used for branch point is $REV"
+ - git show -s $REV
+ - RUN_CLANG_TIDY=run-clang-tidy-$COMPILER_MAJOR_VERSION bash admin/clang-tidy.sh check --parallel=$KUBERNETES_CPU_LIMIT --warnings=clang-tidy.log --rev=$REV -B=$BUILD_DIR
+ - grep -i "found code issues|warnings" clang-tidy.log | tee code-lint.txt || true
+ - if [ -s code-lint.txt ] ; then echo "clang-tidy.sh found issues"; exit 1; fi
+ artifacts:
+ when: on_failure
+ paths:
+ - clang-tidy.log
+ - code-lint.txt
+
+clang-format:
+ extends:
+ - .variables:default
+ - .rules:basic-push
+ cache: {}
+ stage: pre-build
+ image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-11-cuda-11.4.1
+ variables:
+ COMPILER_MAJOR_VERSION: 11
KUBERNETES_CPU_LIMIT: 1
KUBERNETES_CPU_REQUEST: 1
- KUBERNETES_MEMORY_LIMIT: 2Gi
+ KUBERNETES_MEMORY_REQUEST: 2Gi
EXTRA_INSTALLS: clang-format-$COMPILER_MAJOR_VERSION
script:
- - export CLANG_FORMAT=clang-format-$COMPILER_MAJOR_VERSION
- - admin/clang-format.sh check --rev=HEAD^ --warnings=clang-format.log
- - grep -iq "needs formatting" clang-format.log | tee formatting.txt || true
+ # TODO (issue #3272) `master` is not appropriate for use on release-xxxx branches, how should we handle that?
+ - REV=$(git fetch -q https://gitlab.com/gromacs/gromacs.git master && git show -s --pretty=format:"%h" `git merge-base FETCH_HEAD HEAD`)
+ - HEAD_REV=$(git show -s --pretty=format:"%h" HEAD)
+ - if [[ "$REV" == "$HEAD_REV" ]] ; then
+ REV="HEAD~1" ;
+ fi
+ - echo "Revision used for branch point is $REV"
+ - git show -s $REV
+ - CLANG_FORMAT=clang-format-$COMPILER_MAJOR_VERSION admin/clang-format.sh check --rev=$REV --warnings=clang-format.log
+ - grep -i "needs formatting" clang-format.log | tee formatting.txt || true
- if [ -s formatting.txt ] ; then echo "clang-format.sh found issues"; exit 1; fi
artifacts:
when: on_failure
copyright-check:
extends:
- - .gromacs:base:build
- .variables:default
- - .use-clang7
- - .rules:not-for-release
+ - .rules:basic-push
cache: {}
- stage: source-check
- when: always
- needs:
- - job: simple-build
- artifacts: false
+ stage: pre-build
+ image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-11-cuda-11.4.1
variables:
KUBERNETES_CPU_LIMIT: 1
KUBERNETES_CPU_REQUEST: 1
- KUBERNETES_MEMORY_LIMIT: 2Gi
+ KUBERNETES_MEMORY_REQUEST: 2Gi
script:
- - admin/copyright.sh check --rev=HEAD^ --warnings=copyright.log
- - grep -iq "copyright year" copyright.log | tee years.log || true
- - grep -iq "copyright header" copyright.log | tee headers.log || true
+ - REV=$(git fetch -q https://gitlab.com/gromacs/gromacs.git master && git show -s --pretty=format:"%h" `git merge-base FETCH_HEAD HEAD`)
+ - HEAD_REV=$(git show -s --pretty=format:"%h" HEAD)
+ - if [[ "$REV" == "$HEAD_REV" ]] ; then
+ REV="HEAD~1" ;
+ fi
+ - echo "Revision used for branch point is $REV"
+ - git show -s $REV
+ - admin/copyright.sh check --rev=$REV --warnings=copyright.log
+ - grep -i "copyright year" copyright.log | tee years.log || true
+ - grep -i "copyright header" copyright.log | tee headers.log || true
- if [[ -s years.log || -s headers.log ]] ; then
echo "Copyright information needs updating" ;
exit 1 ;
- .variables:default
- .docs:build
- .before_script:default
- - .rules:not-for-release
+ - .rules:basic-push
cache: {}
stage: source-check
needs:
- - job: simple-build
- artifacts: false
- job: docs:build
artifacts: true
variables:
KUBERNETES_CPU_LIMIT: 1
KUBERNETES_CPU_REQUEST: 1
- KUBERNETES_MEMORY_LIMIT: 2Gi
+ KUBERNETES_MEMORY_REQUEST: 2Gi
BUILD_DIR: build-docs
script:
+ - CMAKE=${CMAKE:-$(which cmake)}
- cd $BUILD_DIR
- - cmake --build . --target check-source
- - grep -qi "error" docs/doxygen/doxygen*log docs/doxygen/check-source.log | tee doxygenError.txt || true
- - grep -qi "warning" docs/doxygen/doxygen*log docs/doxygen/check-source.log | tee -a doxygenError.txt || true
+ # TODO(#4092) Remove `pip install pybind11` once CI images are updated.
+ - /root/venv/py3.7/bin/pip install pybind11
+ - $CMAKE --build . --target check-source
+ - awk '/warning.*include style.*order/,/You can use.*rst|^$/' docs/doxygen/check-source.log | tee doxygenError.txt || true
+ - awk '/warning:.*includes/,/unnecessarily|^$/' docs/doxygen/check-source.log | tee -a doxygenError.txt || true
+ - awk '/Traceback/,/.*rror|^$/' docs/doxygen/doxygen*log docs/doxygen/check-source.log | tee -a doxygenError.txt || true
+ - awk '/warning:/,/in doxygen.*|^$/' docs/doxygen/doxygen*log | tee -a doxygenError.txt || true
+ - grep -i "unused cycle suppression" docs/doxygen/check-source.log | tee -a doxygenError.txt || true
- if [ -s doxygenError.txt ] ; then echo "Found errors while running doxygen"; exit 1; fi
artifacts:
name: docs-artifacts-$CI_COMMIT_REF_SLUG
variables:
KUBERNETES_CPU_LIMIT: 1
KUBERNETES_CPU_REQUEST: 1
- KUBERNETES_MEMORY_LIMIT: 2Gi
+ KUBERNETES_MEMORY_REQUEST: 2Gi
BUILD_DIR: build-docs
script:
- cd $BUILD_DIR
- - linkchecker docs/html/index.html -f ../docs/linkcheckerrc -Fxml --ignore-url html-full
+ - linkchecker docs/html/index.html -f $CI_PROJECT_DIR/docs/linkcheckerrc -Fxml --ignore-url html-full
--ignore-url html-user --ignore-url html-lib --ignore-url .tar.gz --ignore-url _sources
-o xml
artifacts: