-
Notifications
You must be signed in to change notification settings - Fork 2
/
.gitlab-ci.yml
131 lines (122 loc) · 4.34 KB
/
.gitlab-ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
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:
- cd $CI_PROJECT_DIR
- 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 --checks=* `find $CI_PROJECT_DIR/src -type f -regextype posix-egrep -regex '.*\.(cpp|hpp|c|h)'` >> clang-tidy-output.log
after_script:
- mkdir clang-tidy-html-report
- clang-tidy-html clang-tidy-output.log
- mv clang.html clang-tidy-html-report
artifacts:
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/scan-build-html-report
- 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.4-4-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-report
- ikos-scan cmake ../
- ikos-scan make
- ikos-report -o=ikos-report.txt physical_layer.db
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
- mkdir build
- cd build
- 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 Base page for this branch: ${CI_PAGES_URL}"
artifacts:
paths:
- public # Upload the resulting website