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
- conan profile detect --force
- mkdir conan-build
- conan remote add conan https://artifactory.spacedot.gr/artifactory/api/conan/conan
- conan remote login -p $CONAN_PASSWORD conan $CONAN_USER
- conan install . --output-folder conan-build --build=missing
- cmake . -DCMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -fdiagnostics-color=always" -DCMAKE_TOOLCHAIN_FILE=conan-build/build/Release/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release
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
clang-tidy:
image: spacedot/clang-tools:13.0.0-html-1.4.1
stage: analyze
script:
- cd $CI_PROJECT_DIR
- conan profile detect --force
- mkdir conan-build
- conan remote add conan https://artifactory.spacedot.gr/artifactory/api/conan/conan
- conan remote login -p $CONAN_PASSWORD conan $CONAN_USER
- conan install . --output-folder conan-build --build=missing
- cmake -B ./build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_TOOLCHAIN_FILE=conan-build/build/Release/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release
- 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.4.1
stage: analyze
before_script:
- mkdir scan-build-html-report
script:
- cd $CI_PROJECT_DIR
- conan profile detect --force
- mkdir conan-build
- conan remote add conan https://artifactory.spacedot.gr/artifactory/api/conan/conan
- conan remote login -p $CONAN_PASSWORD conan $CONAN_USER
- conan install . --output-folder conan-build --build=missing
- scan-build cmake ./ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_TOOLCHAIN_FILE=conan-build/build/Release/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release
- scan-build -o ./scan-build-html-report make
artifacts:
paths:
- ./scan-build-html-report
ikos:
image: spacedot/ikos:3.0
stage: analyze
before_script:
- mkdir ikos-report
script:
- cd $CI_PROJECT_DIR
- conan profile detect --force
- cp conan-profile /root/.conan2/profiles/
- mkdir conan-build
- conan remote add conan https://artifactory.spacedot.gr/artifactory/api/conan/conan
- conan remote login -p $CONAN_PASSWORD conan $CONAN_USER
- conan install . --output-folder conan-build --build=missing -pr conan-profile
- ikos-scan cmake . -DCMAKE_TOOLCHAIN_FILE=conan-build/build/Debug/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Debug
- ikos-scan make x86_services
- ikos x86_services.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:
stage: test
when: always
before_script:
- mkdir gcovr
script:
- cd $CI_PROJECT_DIR
- conan profile detect --force
- mkdir conan-build
- conan remote add conan https://artifactory.spacedot.gr/artifactory/api/conan/conan
- conan remote login -p $CONAN_PASSWORD conan $CONAN_USER
- conan install . --output-folder conan-build --build=missing
- cmake . -DCMAKE_CXX_FLAGS="-g -O0 --coverage" -DCMAKE_TOOLCHAIN_FILE=conan-build/build/Release/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release && 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
image: spacedot/build-base:latest # TODO: Latest tag is temporary
- cp -r ./{gcovr,ikos-report,scan-build-html-report,clang-tidy-html-report,cppcheck-html-report} ./.public/ # TODO: USE THIS WHEN CLANG AND GCOVR HAVE BEEN FIXED
- cp -r ./{gcovr,ikos-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
conan:
image: spacedot/build-base
stage: deploy
script:
- conan profile detect --force
- cp conan-profile /root/.conan2/profiles/
- conan remote add conan https://artifactory.spacedot.gr/artifactory/api/conan/conan
- conan remote login -p $CONAN_PASSWORD conan $CONAN_USER
- conan create . --build=missing -pr conan-profile
- conan upload ecss-services/1.0 -r conan
rules: