# Repository cleanliness. Source tidiness, linting, and policy compliance. clang-tidy:configure-push: extends: - .gromacs:base:configure - .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 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 - .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: clang-tidy:configure-schedule variables: CMAKE: /usr/local/cmake-3.16.3/bin/cmake BUILD_DIR: build-clang-tidy clang-tidy:build-cuda: extends: - .gromacs:base:build - .use-ccache - .variables:default - .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: 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_REQUEST: 2Gi EXTRA_INSTALLS: clang-format-$COMPILER_MAJOR_VERSION script: # 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 paths: - clang-format.log - formatting.txt copyright-check: 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: KUBERNETES_CPU_LIMIT: 1 KUBERNETES_CPU_REQUEST: 1 KUBERNETES_MEMORY_REQUEST: 2Gi script: - 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 ; fi artifacts: when: on_failure paths: - copyright.log - years.log - headers.log check-source: extends: - .variables:default - .docs:build - .before_script:default - .rules:basic-push cache: {} stage: source-check needs: - job: docs:build artifacts: true variables: KUBERNETES_CPU_LIMIT: 1 KUBERNETES_CPU_REQUEST: 1 KUBERNETES_MEMORY_REQUEST: 2Gi BUILD_DIR: build-docs script: - CMAKE=${CMAKE:-$(which cmake)} - cd $BUILD_DIR - which $CMAKE - $CMAKE --version - $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 when: always expire_in: 1 week paths: - $BUILD_DIR/docs/doxygen/doxygen-xml.log - $BUILD_DIR/docs/doxygen/check-source.log linkchecker: extends: - .webpage:build - .rules:nightly-not-for-release stage: nightly-build dependencies: - webpage:build variables: KUBERNETES_CPU_LIMIT: 1 KUBERNETES_CPU_REQUEST: 1 KUBERNETES_MEMORY_REQUEST: 2Gi BUILD_DIR: build-docs script: - cd $BUILD_DIR - 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: reports: junit: $BUILD_DIR/linkchecker-out.xml