.gitlab-ci.yml 6.93 KB
Newer Older
1
stages:
2 3 4 5
  - build     # Build in various conf, keeps the artifacts
  - test      # Use the build artifacts to run the tests
  - packaging # Publish some packages (rpm, deb…)
  - external  # Interact with some external service (codecov, coverity…)
6

louiz’'s avatar
louiz’ committed
7
before_script:
louiz’'s avatar
louiz’ committed
8 9
  - uname -a
  - whoami
10 11
  - mkdir -p build/
  - cd build/
12 13 14 15 16
  # When we extract the artifacts from a previous build, the timestamp of all target are identicall to
  # the timestamps of the generated source files (like biboumi.h, etc), so Makefile thinks the targets
  # are not up to date, and everything is rebuilt.  We change the modification time of all these files
  # to be 15 minutes older, to avoid any unnecessary building.
  - find . \( -name \*.hpp -or -name \*.h -or -name \*.cpp \) -exec touch -r {} -d '-15 minute' {} \;
louiz’'s avatar
louiz’ committed
17

18 19 20 21
variables:
  COMPILER: "g++"
  BUILD_TYPE: "Debug"
  BOTAN: "-DWITH_BOTAN=1"
louiz’'s avatar
louiz’ committed
22
  UDNS: "-DWITH_UDNS=1"
23 24
  SYSTEMD: "-DWITH_SYSTEMD=1"
  LIBIDN: "-DWITH_LIBIDN=1"
25
  SQLITE3: "-DWITH_SQLITE3=1"
26 27 28 29 30

#
## Build jobs
#

31
.template:basic_build: &basic_build
louiz’'s avatar
louiz’ committed
32
  stage: build
33 34
  tags:
    - docker
louiz’'s avatar
louiz’ committed
35
  script:
36 37
    - "echo Running cmake with the following parameters: -DCMAKE_CXX_COMPILER=${COMPILER} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ${BOTAN} ${UDNS} ${SYSTEMD} ${LIBIDN} ${SQLITE3}"
    - cmake .. -DCMAKE_CXX_COMPILER=${COMPILER} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ${BOTAN} ${UDNS} ${SYSTEMD} ${LIBIDN} ${SQLITE3}
38
    - make everything -j$(nproc || echo 1)
39 40
    - make coverage_check -j$(nproc || echo 1)
  artifacts:
louiz’'s avatar
louiz’ committed
41
    expire_in: 2 weeks
42 43 44 45 46 47 48 49 50 51 52
    paths:
      - build/

.template:fedora_build: &fedora_build
  <<: *basic_build
  image: docker.louiz.org/biboumi-test-fedora:latest

.template:debian_build: &debian_build
  <<: *basic_build
  image: docker.louiz.org/biboumi-test-debian:latest

louiz’'s avatar
louiz’ committed
53 54 55 56 57 58
.template:alpine_build: &alpine_build
  variables:
    SYSTEMD: "-DWITHOUT_SYSTEMD=1"
  <<: *basic_build
  image: docker.louiz.org/biboumi-test-alpine:latest

59 60 61 62 63
build:fedora:
  <<: *fedora_build

build:debian:
  <<: *debian_build
64

louiz’'s avatar
louiz’ committed
65 66 67
build:alpine:
  <<: *alpine_build

68 69 70
build:1:
  variables:
    BOTAN: "-DWITHOUT_BOTAN=1"
71
  <<: *fedora_build
72 73 74

build:2:
  variables:
louiz’'s avatar
louiz’ committed
75
    UDNS: "-DWITHOUT_UDNS=1"
76
  <<: *fedora_build
77 78 79

build:3:
  variables:
80
    SQLITE3: "-DWITHOUT_SQLITE3=1"
81
  <<: *fedora_build
82 83 84

build:4:
  variables:
85
    SQLITE3: "-DWITHOUT_SQLITE3=1"
86
    BOTAN: "-DWITHOUT_BOTAN=1"
87
    LIBIDN: "-DWITHOUT_LIBIDN=1"
88
  <<: *fedora_build
89 90 91

build:5:
  variables:
92
    SQLITE3: "-DWITHOUT_SQLITE3=1"
louiz’'s avatar
louiz’ committed
93
    UDNS: "-DWITHOUT_UDNS=1"
94
  <<: *fedora_build
95 96 97 98

build:6:
  variables:
    BOTAN: "-DWITHOUT_BOTAN=1"
louiz’'s avatar
louiz’ committed
99
    UDNS: "-DWITHOUT_UDNS=1"
100
  <<: *fedora_build
101

102
build:7:
103
  variables:
louiz’'s avatar
louiz’ committed
104
    UDNS: "-DWITHOUT_UDNS=1"
105 106 107 108 109 110
  <<: *fedora_build


#
## Test jobs
#
111 112 113

.template:basic_test: &basic_test
  stage: test
114 115
  tags:
    - docker
116
  script:
117
    - make coverage_e2e -j$(nproc || echo 1)
118
    - make coverage
119
  artifacts:
120
    expire_in: 2 weeks
121
    paths:
122
      - build/coverage_test_suite/
123
      - build/coverage_e2e/
124
      - build/coverage_total/
125
      - build/coverage_e2e.info
louiz’'s avatar
louiz’ committed
126
    when: always
127
    name: $CI_PROJECT_NAME-test-$CI_JOB_ID
128 129

test:debian:
130
  image: docker.louiz.org/biboumi-test-debian:latest
131
  <<: *basic_test
132 133
  dependencies:
    - build:debian
134 135

test:fedora:
136
  image: docker.louiz.org/biboumi-test-fedora:latest
137
  <<: *basic_test
138 139
  dependencies:
    - build:fedora
140

141 142 143 144
test:without_udns:
  image: docker.louiz.org/biboumi-test-fedora:latest
  <<: *basic_test
  dependencies:
145
    - build:7
146

louiz’'s avatar
louiz’ committed
147 148 149 150 151 152 153 154 155 156
test:alpine:
  image: docker.louiz.org/biboumi-test-alpine:latest
  stage: test
  tags:
    - docker
  script:
    - make e2e
  dependencies:
    - build:alpine

louiz’'s avatar
louiz’ committed
157
test:freebsd:
158
  only:
159
    - branches@louiz/biboumi
louiz’'s avatar
louiz’ committed
160 161 162 163 164 165
  tags:
    - freebsd
  variables:
    SYSTEMD: "-DWITHOUT_SYSTEMD=1"
  stage: test
  script:
166
    - cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ${BOTAN} ${UDNS} ${SYSTEMD} ${LIBIDN} ${SQLITE3}
louiz’'s avatar
louiz’ committed
167 168 169
    - make check
    - make e2e

170 171 172 173 174 175 176 177 178 179 180 181 182
#
## External jobs
#

.template:codecov: &codecov
  stage: external
  tags:
    - docker
  image: docker.louiz.org/biboumi-test-fedora:latest

.template:codecov_unittests: &codecov_unittests
  <<: *codecov
  script:
183
    - bash <(curl -s https://codecov.io/bash) -X gcov -X coveragepy -f ./coverage_test_suite.info -F $(echo $CI_JOB_NAME | sed s/:/_/g | sed s/codecov_//)
184 185 186 187

.template:codecov_e2e: &codecov_e2e
  <<: *codecov
  script:
188
    - bash <(curl -s https://codecov.io/bash) -X gcov -X coveragepy -f ./coverage_e2e.info -F $(echo $CI_JOB_NAME | sed s/:/_/g | sed s/codecov_//)
189 190 191 192 193 194

codecov:fedora:
  <<: *codecov_e2e
  dependencies:
    - test:fedora

195 196 197 198 199
codecov:without_udns:
  <<: *codecov_e2e
  dependencies:
    - test:without_udns

200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241
codecov:debian:
  <<: *codecov_e2e
  dependencies:
    - test:debian

codecov:build:1:
  <<: *codecov_unittests
  dependencies:
    - build:1

codecov:build:2:
  <<: *codecov_unittests
  dependencies:
    - build:2

codecov:build:3:
  <<: *codecov_unittests
  dependencies:
    - build:3

codecov:build:4:
  <<: *codecov_unittests
  dependencies:
    - build:4

codecov:build:5:
  <<: *codecov_unittests
  dependencies:
    - build:5

codecov:build:6:
  <<: *codecov_unittests
  dependencies:
    - build:6

codecov:build:7:
  <<: *codecov_unittests
  dependencies:
    - build:7

coverity:
  stage: external
242
  only:
243
    - branches@louiz/biboumi
244 245
  tags:
    - docker
246
  image: docker.louiz.org/biboumi-test-fedora:latest
247 248
  allow_failure: true
  when: manual
249 250 251
  script:
    - export PATH=$PATH:~/coverity/bin
    - cmake .. -DWITHOUT_SYSTEMD=1
252
    - cov-build --dir cov-int   make everything -j$(nproc || echo 1)
253 254
    - tar czvf biboumi_coverity.tgz cov-int
    - curl --form token=$COVERITY_TOKEN   --form email=louiz@louiz.org   --form file=@biboumi_coverity.tgz  --form version="$(git rev-parse --short HEAD)" --form description="Automatic submission by gitlab-ci" https://scan.coverity.com/builds?project=louiz%2Fbiboumi
255
  dependencies: []
256

257 258 259 260 261 262 263 264 265 266 267 268 269 270 271
packaging:rpm:
  stage: packaging
  only:
    - master@louiz/biboumi
  tags:
    - docker
  image: docker.louiz.org/biboumi-test-fedora:latest
  script:
    - make rpm -j$(nproc || echo 1)
  artifacts:
    paths:
      - build/rpmbuild/RPMS
      - build/rpmbuild/SRPMS
    when: always
    name: $CI_PROJECT_NAME-rpm-$CI_BUILD_ID
272 273
  dependencies:
    - build:fedora
274 275 276 277 278

packaging:deb:
  stage: packaging
  only:
    - master@louiz/biboumi
279
    - debian@louiz/biboumi
280 281 282
  tags:
    - docker
  image: docker.louiz.org/packaging-debian:latest
283
  before_script: []
284 285 286 287
  script:
    - git checkout debian
    - git merge --no-commit --no-ff master
    - mk-build-deps
288
    - apt update -y
289 290
    - apt install -y ./biboumi-build-deps*.deb
    - debuild -b -us -uc
291 292 293
    - mv ../*.deb .
    - mv ../*.build .
    - mv ../*.buildinfo .
294
  dependencies: []
295
  artifacts:
296
    untracked: true
297
    name: $CI_PROJECT_NAME-deb-$CI_BUILD_ID
298 299 300

packaging:archlinux:
  stage: packaging
301 302
  only:
    - master@louiz/biboumi
303 304 305 306 307 308 309
  tags:
    - docker
  image: docker.louiz.org/biboumi-test-archlinux:latest
  before_script: []
  script:
    - git clone https://aur.archlinux.org/biboumi-git.git
    - cd biboumi-git
310
    - makepkg -si --noconfirm
311
    - test -e /usr/bin/biboumi
312
  dependencies: []