variables: GIT_SUBMODULE_STRATEGY: recursive stages: - build - analyze - test - deploy check-build: image: spacedot/build-base # TODO: push build-base stage: build variables: GCC_COLORS: "error=31;1:warning=35;1:note=36;1:range1=32:range2=34:locus=39;1:quote=39;1:fixit-insert=32:fixit-delete=31:diff-filename=39;1:diff-hunk=32:diff-delete=31:diff-insert=32:type-diff=32;1" CLICOLOR_FORCE: 1 # Necessary for cmake to output colours script: - cmake . -DCMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -fdiagnostics-color=always" - make -j$(nproc) cppcheck: image: spacedot/cppcheck:2.5 stage: analyze before_script: - cppcheck --version allow_failure: true script: - cd $CI_PROJECT_DIR - cppcheck --enable=all --addon=misra --suppress=misra-c2012-3.1 --suppress=misra-c2012-5.1 --suppress=misra-c2012-5.2 \ --suppress=misra-c2012-5.3 --suppress=misra-c2012-12.3 --suppress=misra-c2012-13.4 --suppress=misra-c2012-14.4 \ --suppress=misra-c2012-15.5 --suppress=misra-c2012-16.3 --suppress=misra-c2012-18.4 --suppress=misra-c2012-18.8 \ --suppress=unusedFunction --suppress=noExplicitConstructor --force --inline-suppr --error-exitcode=1 \ --xml --xml-version=2 2>report.xml -I ./inc ./src after_script: - mkdir cppcheck-html-report - cppcheck-htmlreport --source-dir=. --title=html-report --file=report.xml --report-dir=cppcheck-html-report artifacts: when: on_failure paths: - ./cppcheck-html-report clang-tidy: image: spacedot/clang-tools:13.0.0-html-1.4.1 stage: analyze script: - cd $CI_PROJECT_DIR - cmake -B ./build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON - clang-tidy -p $CI_PROJECT_DIR/build/compile_commands.json --config-file=$CI_PROJECT_DIR/ci/.clang-tidy --use-color `find $CI_PROJECT_DIR/src $CI_PROJECT_DIR/inc -not -path "*/Platform/*" -type f -regextype posix-egrep -regex '.*\.(cpp|hpp|c|h)'` | tee clang-tidy-output.log after_script: - sed -e 's/\x1b\[[0-9;]*m//g' -i clang-tidy-output.log - mkdir clang-tidy-html-report - clang-tidy-html clang-tidy-output.log - mv clang.html clang-tidy-html-report artifacts: when: always paths: - ./clang-tidy-html-report clang-analyzer: image: spacedot/clang-tools:13.0.0-html-1.3.7 stage: analyze before_script: - mkdir scan-build-html-report script: - cd $CI_PROJECT_DIR - scan-build cmake ./ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ - scan-build -o ./scan-build-html-report make artifacts: paths: - ./scan-build-html-report doxygen: image: spacedot/doxygen:1.9.2-awesomecss-1.6.0 stage: analyze script: - cd $CI_PROJECT_DIR - doxygen artifacts: paths: - ./docs/html ikos: image: spacedot/ikos:3.0 stage: analyze before_script: - mkdir ikos-report script: - cd $CI_PROJECT_DIR - ikos-scan cmake . - ikos-scan make tests - ikos tests.bc - ikos-report -o=ikos-report.txt output.db after_script: - mv ikos-report.txt ikos-report - mv output.db ikos-report artifacts: paths: - ./ikos-report tests: image: spacedot/coverage:gcovr-5.0-lcov-1.15 stage: test when: always before_script: - mkdir gcovr script: - cd $CI_PROJECT_DIR - cmake . -DCMAKE_CXX_FLAGS="-g -O0 --coverage" && make tests -j$(nproc) - lcov -q --capture --initial --directory . -o coverage_base - ./tests --colour-mode ansi - lcov -q --capture --directory . -o coverage_tests - lcov -q -a coverage_base -a coverage_tests -o coverage_total_unfiltered - lcov -q --remove coverage_total_unfiltered "${PWD}/lib/*" "${PWD}/CMakeFiles/*" "${PWD}/test/*" "${PWD}/src/main.cpp" -o coverage_total_filtered - gcovr -s -p -e "^.*(test|lib|main.cpp|CMakeFiles)" --html --html-details --html-title "Code coverage ${CI_PROJECT_NAME}/${CI_COMMIT_REF_NAME}" -o ./gcovr/gcovr.html - gcovr -e "^.*(test|lib|main.cpp|CMakeFiles)" - genhtml --demangle-cpp -t "${CI_COMMIT_REF_NAME}" --html-epilog ci/page_style/epilog.html -o ./gcovr coverage_total_filtered artifacts: paths: - ./gcovr pages: image: spacedot/build-base:latest # TODO: Latest tag is temporary stage: deploy script: - mkdir .public - cp -r ./docs/html ./.public/docs - cp -r ./{gcovr,ikos-report,scan-build-html-report,clang-tidy-html-report,cppcheck-html-report} ./.public/ - ls ./.public - find ./.public - mv .public public after_script: - "echo Artifacts for this build: ${CI_JOB_URL}/artifacts/browse" - "echo Base page for this branch: ${CI_PAGES_URL}" artifacts: expose_as: 'build artifacts and documentation' paths: - public # Upload the resulting website # only: # - branches # Deploy on all branches