diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3e2203675..c21843012 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,381 +1,443 @@ stages: - configure - build - test - deploy .docker_build: image: 'docker:19.03.11' stage: .pre services: - docker:19.03.11-dind variables: # Use TLS https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#tls-enabled DOCKER_HOST: tcp://docker:2376 DOCKER_TLS_CERTDIR: "/certs" before_script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY script: - cd test/ci/${IMAGE_NAME}/ - docker build -t registry.gitlab.com/akantu/akantu/${IMAGE_NAME} . - docker push registry.gitlab.com/akantu/akantu/${IMAGE_NAME} docker build:debian-testing: variables: IMAGE_NAME: debian:testing extends: .docker_build rules: - changes: - test/ci/debian:testing/Dockerfile docker build:ubuntu-lts: variables: IMAGE_NAME: ubuntu:lts extends: .docker_build rules: - changes: - test/ci/ubuntu:lts/Dockerfile .configure: stage: configure except: - tags variables: BLA_VENDOR: 'Generic' script: - cmake -E make_directory build - cd build - cmake -DAKANTU_COHESIVE_ELEMENT:BOOL=TRUE -DAKANTU_IMPLICIT:BOOL=TRUE -DAKANTU_PARALLEL:BOOL=TRUE -DAKANTU_STRUCTURAL_MECHANICS:BOOL=TRUE -DAKANTU_HEAT_TRANSFER:BOOL=TRUE -DAKANTU_DAMAGE_NON_LOCAL:BOOL=TRUE -DAKANTU_PHASE_FIELD:BOOL=TRUE -DAKANTU_PYTHON_INTERFACE:BOOL=TRUE -DAKANTU_CONTACT_MECHANICS:BOOL=TRUE -DAKANTU_EXAMPLES:BOOL=TRUE -DAKANTU_BUILD_ALL_EXAMPLES:BOOL=TRUE -DAKANTU_TESTS:BOOL=TRUE -DAKANTU_RUN_IN_DOCKER:BOOL=TRUE -DAKANTU_TEST_EXAMPLES:BOOL=${TEST_EXAMPLES} -DCMAKE_BUILD_TYPE:STRING=${BUILD_TYPE} .. - cp compile_commmands.json .. artifacts: when: on_success paths: - build - compile_commands.json expire_in: 10h .build: stage: build script: - cmake --build build/src > >(tee -a build-${output}-out.log) 2> >(tee -a build-${output}-err.log >&2) - cmake --build build/python > >(tee -a build-${output}-out.log) 2> >(tee -a build-${output}-err.log >&2) - cmake --build build/test/ > >(tee -a build-${output}-out.log) 2> >(tee -a build-${output}-err.log >&2) - cmake --build build/examples > >(tee -a build-${output}-out.log) 2> >(tee -a build-${output}-err.log >&2) artifacts: when: on_success paths: - build/ - build-${output}-err.log - compile_commands.json exclude: - build/**/*.o expire_in: 10h .tests: stage: test script: - cd build - ctest -T test --output-on-failure --no-compress-output --timeout 1800 after_script: - cd build - tag=$(head -n 1 < Testing/TAG) - if [ -e Testing/${tag}/Test.xml ]; then - xsltproc -o ./juint.xml ${CI_PROJECT_DIR}/test/ci/ctest2junit.xsl Testing/${tag}/Test.xml; - fi - if [ ${CMAKE_BUILD_TYPE} = "Coverage" ]; then - gcovr --xml --gcov-executable "${GCOV_EXECUTABLE}" --output coverage.xml --object-directory ${CI_PROJECT_DIR}/build --root ${CI_PROJECT_DIR} -s || true - fi artifacts: when: always paths: - build/juint.xml - build/coverage.xml reports: junit: - build/juint.xml cobertura: - build/coverage.xml # ------------------------------------------------------------------------------ .cache_build: variables: CCACHE_BASEDIR: ${CI_PROJECT_DIR}/ CCACHE_DIR: ${CI_PROJECT_DIR}/.ccache #CCACHE_NOHASHDIR: 1 #CCACHE_COMPILERCHECK: content cache: key: ${output}_${BUILD_TYPE} policy: pull-push paths: - .ccache/ - third-party/google-test - third-party/pybind11 before_script: - ccache --zero-stats || true after_script: - ccache --show-stats || true # ------------------------------------------------------------------------------ .image_debian_testing: image: registry.gitlab.com/akantu/akantu/debian:testing .image_ubuntu_lts: image: registry.gitlab.com/akantu/akantu/ubuntu:lts # ------------------------------------------------------------------------------ .compiler_gcc: variables: CC: /usr/lib/ccache/gcc CXX: /usr/lib/ccache/g++ FC: gfortran GCOV_EXECUTABLE: gcov .compiler_clang: variables: CC: /usr/lib/ccache/clang CXX: /usr/lib/ccache/clang++ FC: gfortran GCOV_EXECUTABLE: llvm-cov gcov .build_coverage: variables: TEST_EXAMPLES: 'FALSE' BUILD_TYPE: 'Coverage' .build_release: variables: TEST_EXAMPLES: 'TRUE' BUILD_TYPE: 'Release' .build_valgrind: variables: TEST_EXAMPLES: 'FALSE' BUILD_TYPE: 'Valgrind' # ------------------------------------------------------------------------------ .debian_testing_gcc: variables: output: debian_testing_gcc extends: - .compiler_gcc - .image_debian_testing - .cache_build .debian_testing_clang: variables: output: debian_testing_clang extends: - .compiler_clang - .image_debian_testing - .cache_build .ubuntu_lts_gcc: variables: output: ubuntu_lts_gcc extends: - .compiler_gcc - .image_ubuntu_lts - .cache_build # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ configure:debian_testing_gcc: extends: - .debian_testing_gcc - .build_coverage - .configure build:debian_testing_gcc: extends: - .debian_testing_gcc - .build_coverage - .build needs: - job: configure:debian_testing_gcc test:debian_testing_gcc: extends: - .debian_testing_gcc - .build_coverage - .tests needs: - job: build:debian_testing_gcc # ------------------------------------------------------------------------------ configure:debian_testing_gcc_valgrind: extends: - .debian_testing_gcc - .build_valgrind - .configure build:debian_testing_gcc_valgrind: extends: - .debian_testing_gcc - .build_valgrind - .build needs: - job: configure:debian_testing_gcc_valgrind test:debian_testing_gcc_valgrind: extends: - .debian_testing_gcc - .build_valgrind - .tests needs: - job: build:debian_testing_gcc_valgrind # ------------------------------------------------------------------------------ configure:debian_testing_clang: extends: - .debian_testing_clang - .build_coverage - .configure build:debian_testing_clang: extends: - .debian_testing_clang - .build_coverage - .build needs: - job: configure:debian_testing_clang test:debian_testing_clang: extends: - .debian_testing_clang - .build_coverage - .tests needs: - job: build:debian_testing_clang # ------------------------------------------------------------------------------ configure:ubuntu_lts_gcc: extends: - .ubuntu_lts_gcc - .build_release - .configure build:ubuntu_lts_gcc: extends: - .ubuntu_lts_gcc - .build_release - .build needs: - job: configure:ubuntu_lts_gcc test:ubuntu_lts_gcc: extends: - .ubuntu_lts_gcc - .build_release - .tests needs: - job: build:ubuntu_lts_gcc # ------------------------------------------------------------------------------ -include: - - template: Code-Quality.gitlab-ci.yml - code_quality: + stage: test + image: docker:19.03.12 + allow_failure: true + services: + - docker:19.03.12-dind + variables: + DOCKER_DRIVER: overlay2 + DOCKER_TLS_CERTDIR: "" + CODE_QUALITY_IMAGE: "registry.gitlab.com/gitlab-org/ci-cd/codequality:0.85.24" + needs: [] + script: + - export SOURCE_CODE=$PWD + - | + if ! docker info &>/dev/null; then + if [ -z "$DOCKER_HOST" -a "$KUBERNETES_PORT" ]; then + export DOCKER_HOST='tcp://localhost:2375' + fi + fi + - | # this is required to avoid undesirable reset of Docker image ENV variables being set on build stage + function propagate_env_vars() { + CURRENT_ENV=$(printenv) + + for VAR_NAME; do + echo $CURRENT_ENV | grep "${VAR_NAME}=" > /dev/null && echo "--env $VAR_NAME " + done + } + - docker pull --quiet "$CODE_QUALITY_IMAGE" + - | + docker run --rm \ + $(propagate_env_vars \ + SOURCE_CODE \ + TIMEOUT_SECONDS \ + CODECLIMATE_DEBUG \ + CODECLIMATE_DEV \ + REPORT_STDOUT \ + REPORT_FORMAT \ + ENGINE_MEMORY_LIMIT_BYTES \ + CODECLIMATE_PREFIX \ + ) \ + --volume "$PWD":/code \ + --volume /var/run/docker.sock:/var/run/docker.sock \ + "$CODE_QUALITY_IMAGE" /code + artifacts: + paths: + - gl-code-quality-report.json + expire_in: 1 week needs: - job: build:debian_testing_clang - artifacts: - paths: [gl-code-quality-report.json] + rules: + - if: '$CODE_QUALITY_DISABLED' + when: never + - if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH' -clang_tools: +.clang_tools: stage: test extends: - .debian_testing_clang - script: + before_script: - if [ 'x${CI_MERGE_REQUEST_ID}' != 'x' ]; then - git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME - git diff --name-only $CI_COMMIT_SHA $CI_MERGE_REQUEST_TARGET_BRANCH_NAME > file_list - FILE_LIST_ARG='-f file_list' - fi + needs: + - job: build:debian_testing_clang + allow_failure: true + rules: + - if: '$CODE_QUALITY_DISABLED' + when: never + - if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH' + +clang_tidy: + extends: + - .clang_tools + script: - test/ci/scripts/cq -x third-party -x extra-packages ${FILE_LIST_ARG} clang-tidy - -p ${CI_PROJECT_DIR}/build > clang-tidy-report.json + -p ${CI_PROJECT_DIR}/build > gl-clang-tidy-report.json + artifacts: + paths: + - gl-clang-tidy-report.json + +clang_format: + extends: + - .clang_tools + script: - test/ci/scripts/cq -x third-party -x extra-packages clang-format - -p ${CI_PROJECT_DIR}/build > clang-format-report.json - - needs: - - job: build:debian_testing_clang - allow_failure: true + -p ${CI_PROJECT_DIR}/build > gl-clang-format-report.json artifacts: paths: - - clang-tidy-report.json - - clang-format-report.json - artifacts: - reports: - codequality: [clang-tidy-report.json, clang-format-report.json] - rules: - - if: '$CODE_QUALITY_DISABLED' - when: never - - if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH' + - gl-clang-format-report.json compilation_warnings: stage: test image: python:latest script: - pip install warning-parser termcolor Click - ls build-*-err.log - test/ci/scripts/cq -x third-party -x extra-packages warnings - build-*-err.log > warnings-report.json + build-*-err.log > gl-warnings-report.json needs: - job: build:debian_testing_clang - job: build:debian_testing_gcc - job: build:ubuntu_lts_gcc - allow_failure: true artifacts: paths: - - warnings-report.json + - gl-warnings-report.json + +merge_code_quality: + stage: deploy + extends: + - .debian_testing_clang + script: + - jq -s '[.[][]]' gl-*-report.json > gl-codequality.json + needs: + -job: code_quality + -job: clang_tidy + -job: clang_format + -job: compilation_warnings + artifacts: + paths: + - gl-codequality.json artifacts: reports: - codequality: warnings-report.json - rules: - - if: '$CODE_QUALITY_DISABLED' - when: never - - if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH' - + codequality: [gl-codequality.json] # ------------------------------------------------------------------------------ pages: stage: deploy extends: - .debian_testing_gcc script: - cd build - cmake -DAKANTU_DOCUMENTATION=ON .. - cmake --build . -t sphinx-doc - mv doc/dev-doc/html ../public needs: - job: build:debian_testing_gcc artifacts: paths: - public only: - master