gitlab-ci: Add runner with ThreadSanitizer
[uid_wrapper.git] / .gitlab-ci.yml
1 ---
2 variables:
3   GIT_DEPTH: 3
4   BUILD_IMAGES_PROJECT: cmocka/gitlab-build-images
5   FEDORA_BUILD: buildenv-fedora
6   CENTOS7_BUILD: buildenv-centos7
7   TUMBLEWEED_BUILD: buildenv-tumbleweed
8   MINGW_BUILD: buildenv-mingw
9   UBUNTU_BUILD: buildenv-ubuntu
10
11 stages:
12   - build
13   - test
14   - analysis
15
16 centos7/x86_64:
17   stage: test
18   image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$CENTOS7_BUILD
19   script:
20     - mkdir -p obj && cd obj && cmake3
21       -DCMAKE_BUILD_TYPE=RelWithDebInfo
22       -DPICKY_DEVELOPER=ON
23       -DUNIT_TESTING=ON .. &&
24       make -j$(nproc) && ctest --output-on-failure
25   tags:
26     - shared
27   except:
28     - tags
29   artifacts:
30     expire_in: 1 week
31     when: on_failure
32     paths:
33       - obj/
34
35 fedora/x86_64:
36   stage: test
37   image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD
38   script:
39     - mkdir -p obj && cd obj && cmake
40       -DCMAKE_INSTALL_PREFIX=/tmp/local
41       -DCMAKE_BUILD_TYPE=RelWithDebInfo
42       -DPICKY_DEVELOPER=ON
43       -DUNIT_TESTING=ON .. &&
44       make -j$(nproc) && ctest --output-on-failure && make install
45   tags:
46     - shared
47   except:
48     - tags
49   artifacts:
50     expire_in: 1 week
51     when: on_failure
52     paths:
53       - obj/
54
55 fedora/address-sanitizer:
56   stage: build
57   image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD
58   script:
59     - mkdir -p obj && cd obj && cmake
60       -DCMAKE_BUILD_TYPE=AddressSanitizer
61       -DPICKY_DEVELOPER=ON
62       -DUNIT_TESTING=ON .. &&
63       make -j$(nproc) && ctest --output-on-failure
64   tags:
65     - shared
66   except:
67     - tags
68   artifacts:
69     expire_in: 1 week
70     when: on_failure
71     paths:
72       - obj/
73
74 fedora/undefined-sanitizer:
75   stage: analysis
76   image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD
77   script:
78     - mkdir -p obj && cd obj && cmake
79       -DCMAKE_BUILD_TYPE=UndefinedSanitizer
80       -DUNIT_TESTING=ON ..
81       && make -j$(nproc) && ctest --output-on-failure
82   tags:
83     - shared
84   except:
85     - tags
86   artifacts:
87     expire_in: 1 week
88     when: on_failure
89     paths:
90       - obj/
91
92 fedora/thread-sanitizer:
93   stage: analysis
94   image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$TUMBLEWEED_BUILD
95   script:
96     - mkdir -p obj && cd obj && cmake
97       -DCMAKE_BUILD_TYPE=ThreadSanitizer
98       -DPICKY_DEVELOPER=ON
99       -DUNIT_TESTING=ON .. &&
100       make -j$(nproc) && ctest --output-on-failure
101   tags:
102     - shared
103   except:
104     - tags
105   artifacts:
106     expire_in: 1 week
107     when: on_failure
108     paths:
109       - obj/
110
111 fedora/csbuild:
112   stage: analysis
113   variables:
114     GIT_DEPTH: 20
115   image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD
116   script:
117     - |
118       if [[ -z "$CI_COMMIT_BEFORE_SHA" ]]; then
119           export CI_COMMIT_BEFORE_SHA=$(git rev-parse "${CI_COMMIT_SHA}~15")
120       fi
121
122       # Check if the commit exists in this branch
123       # This is not the case for a force push
124       git branch --contains $CI_COMMIT_BEFORE_SHA 2>/dev/null || export CI_COMMIT_BEFORE_SHA=$(git rev-parse "${CI_COMMIT_SHA}~15")
125
126       export CI_COMMIT_RANGE="$CI_COMMIT_BEFORE_SHA..$CI_COMMIT_SHA"
127
128     - csbuild
129       --build-dir=obj-csbuild
130       --prep-cmd="cmake -DCMAKE_BUILD_TYPE=Debug -DPICKY_DEVELOPER=ON -DUNIT_TESTING=ON @SRCDIR@"
131       --build-cmd "make clean && make -j$(nproc)"
132       --git-commit-range $CI_COMMIT_RANGE
133       --color
134       --print-current --print-fixed
135   tags:
136     - shared
137   except:
138     - tags
139   artifacts:
140     expire_in: 1 week
141     when: on_failure
142     paths:
143       - obj-csbuild/
144
145 freebsd/x86_64:
146   stage: test
147   image:
148   script:
149     - mkdir -p obj && cd obj && cmake
150       -DCMAKE_BUILD_TYPE=RelWithDebInfo
151       -DPICKY_DEVELOPER=ON
152       -DUNIT_TESTING=ON .. &&
153       make && ctest --output-on-failure
154   tags:
155     - freebsd
156   except:
157     - tags
158   only:
159     - branches@cwrap/uid_wrapper
160     - branches@cryptomilk/uid_wrapper
161   artifacts:
162     expire_in: 1 week
163     when: on_failure
164     paths:
165       - obj/
166
167 tumbleweed/x86_64/gcc:
168   stage: test
169   image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$TUMBLEWEED_BUILD
170   script:
171     - mkdir -p obj && cd obj && cmake
172       -DCMAKE_BUILD_TYPE=RelWithDebInfo
173       -DPICKY_DEVELOPER=ON
174       -DUNIT_TESTING=ON .. &&
175       make -j$(nproc) && ctest --output-on-failure
176   tags:
177     - shared
178   except:
179     - tags
180   artifacts:
181     expire_in: 1 week
182     when: on_failure
183     paths:
184       - obj/
185
186 tumbleweed/x86_64/gcc7:
187   stage: test
188   image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$TUMBLEWEED_BUILD
189   script:
190     - mkdir -p obj && cd obj && cmake
191       -DCMAKE_C_COMPILER=gcc-7 -DCMAKE_CXX_COMPILER=g++-7
192       -DCMAKE_BUILD_TYPE=RelWithDebInfo
193       -DPICKY_DEVELOPER=ON
194       -DUNIT_TESTING=ON .. &&
195       make -j$(nproc) && ctest --output-on-failure
196   tags:
197     - shared
198   except:
199     - tags
200   artifacts:
201     expire_in: 1 week
202     when: on_failure
203     paths:
204       - obj/
205
206 tumbleweed/x86_64/clang:
207   stage: test
208   image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$TUMBLEWEED_BUILD
209   script:
210     - mkdir -p obj && cd obj && cmake
211       -DCMAKE_BUILD_TYPE=RelWithDebInfo
212       -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
213       -DPICKY_DEVELOPER=ON
214       -DUNIT_TESTING=ON .. &&
215       make -j$(nproc) && ctest --output-on-failure
216   tags:
217     - shared
218   except:
219     - tags
220   artifacts:
221     expire_in: 1 week
222     when: on_failure
223     paths:
224       - obj/
225
226 tumbleweed/static-analysis:
227   stage: analysis
228   image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$TUMBLEWEED_BUILD
229   script:
230     - export CCC_CC=clang
231     - export CCC_CXX=clang++
232     - mkdir -p obj && cd obj && scan-build cmake
233       -DCMAKE_BUILD_TYPE=Debug
234       -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
235       -DPICKY_DEVELOPER=ON
236       -DUNIT_TESTING=ON .. &&
237       scan-build --status-bugs -o scan make -j$(nproc)
238   tags:
239     - shared
240   except:
241     - tags
242   artifacts:
243     expire_in: 1 week
244     when: on_failure
245     paths:
246       - obj/scan
247
248 ubuntu/x86_64:
249   stage: test
250   image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$UBUNTU_BUILD
251   script:
252     - mkdir -p obj && cd obj && cmake
253       -DCMAKE_BUILD_TYPE=RelWithDebInfo
254       -DPICKY_DEVELOPER=ON
255       -DUNIT_TESTING=ON .. &&
256       make -j$(nproc) && ctest --output-on-failure
257   tags:
258     - shared
259   except:
260     - tags
261   artifacts:
262     expire_in: 1 week
263     when: on_failure
264     paths:
265       - obj/