-
Notifications
You must be signed in to change notification settings - Fork 1
/
.gitlab-ci.yml
152 lines (140 loc) · 4.84 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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
variables:
GIT_SUBMODULE_STRATEGY: recursive
stages:
- build
- analyze
- test
- deploy
check-build:
image: spacedot/build-base # temporary till I figure out how to 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.3.7
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.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 doxygen.conf
artifacts:
paths:
- ./doxygen-output
ikos:
image: spacedot/ikos:3.0
stage: analyze
before_script:
- mkdir ikos-report
allow_failure: true #FIXME:
script:
- cd $CI_PROJECT_DIR
- ikos-scan cmake .
- ikos-scan make
- ikos tests.bc
- ikos adcs-onboard-software.bc
- ikos-report -o=ikos-report.txt output.db
after_script:
- mv ikos-report.txt ikos-report
artifacts:
paths:
- ./ikos-report
unit-tests:
image: spacedot/build-base:latest # LATEST TAG IS TEMPORARY
stage: test
when: always
coverage: '/^TOTAL.*\s+(\d+\%)$/'
script:
- cmake .
- make tests -j4
- ./tests --use-colour yes # Run the tests
after_script:
- ./tests -r junit -o junit.xml
artifacts:
expire_in: 1 week
reports:
junit: junit.xml
coverage:
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 all -j4
- lcov -q --capture --initial --directory . -o coverage_base
- ./tests --use-colour yes
- 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 # LATEST TAG IS TEMPORARY
stage: deploy
script:
- mkdir .public
# FIXME:
# - cp -r ./{doxygen-output,gcovr,ikos-report,scan-build-html-report,clang-tidy-html-report,cppcheck-html-report} ./.public/
- cp -r ./{doxygen-output,gcovr,scan-build-html-report,clang-tidy-html-report,cppcheck-html-report} ./.public/
- ls ./.public
- find ./.public
- mv .public public
artifacts:
paths:
- public # Upload the resulting website
# only:
# - branches # Deploy on all branches