Newer
Older
check-build:
image: spacedot/build-base # TODO: push build-base
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
- 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
- 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
- mkdir cppcheck-html-report
- cppcheck-htmlreport --source-dir=. --title=html-report --file=report.xml --report-dir=cppcheck-html-report
- 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
- 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:
clang-analyzer:
image: spacedot/clang-tools:13.0.0-html-1.3.7
stage: analyze
before_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
ikos:
image: spacedot/ikos:3.0
stage: analyze
before_script:
- mkdir ikos-report
script:
- cd $CI_PROJECT_DIR
- ikos-scan cmake .
- 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
- 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
image: spacedot/build-base:latest # TODO: Latest tag is temporary
- 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
- "echo Artifacts for this build: ${CI_JOB_URL}/artifacts/browse"
- "echo Base page for this branch: ${CI_PAGES_URL}"
paths:
- public # Upload the resulting website