.gitlab-ci.yml 7.08 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 25
  SYSTEMD: "-DWITH_SYSTEMD=1"
  LIBIDN: "-DWITH_LIBIDN=1"
  LITESQL: "-DWITH_LITESQL=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:
louiz’'s avatar
louiz’ committed
36 37
    - "echo Running cmake with the following parameters: -DCMAKE_CXX_COMPILER=${COMPILER} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ${BOTAN} ${UDNS} ${SYSTEMD} ${LIBIDN} ${LITESQL}"
    - cmake .. -DCMAKE_CXX_COMPILER=${COMPILER} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ${BOTAN} ${UDNS} ${SYSTEMD} ${LIBIDN} ${LITESQL}
38
    - make everything -j$(nproc || echo 1)
39 40 41 42 43 44 45 46 47 48 49 50 51 52
    - make coverage_check -j$(nproc || echo 1)
  artifacts:
    expire_in: 8 hours
    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 80

build:3:
  variables:
    LITESQL: "-DWITHOUT_LITESQL=1"
81
  <<: *fedora_build
82 83 84 85 86

build:4:
  variables:
    LITESQL: "-DWITHOUT_LITESQL=1"
    BOTAN: "-DWITHOUT_BOTAN=1"
87
    LIBIDN: "-DWITHOUT_LIBIDN=1"
88
  <<: *fedora_build
89 90 91 92

build:5:
  variables:
    LITESQL: "-DWITHOUT_LITESQL=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 120
  artifacts:
    paths:
121
      - build/coverage_test_suite/
122
      - build/coverage_e2e/
123
      - build/coverage_total/
124
      - build/coverage_e2e.info
louiz’'s avatar
louiz’ committed
125
    when: always
126
    name: $CI_PROJECT_NAME-test-$CI_JOB_ID
127 128

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

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

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

louiz’'s avatar
louiz’ committed
146 147 148 149 150 151 152 153 154 155
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
156
test:freebsd:
157 158
  only:
    - master@louiz/biboumi
louiz’'s avatar
louiz’ committed
159 160 161 162 163 164
  tags:
    - freebsd
  variables:
    SYSTEMD: "-DWITHOUT_SYSTEMD=1"
  stage: test
  script:
louiz’'s avatar
louiz’ committed
165
    - cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ${BOTAN} ${UDNS} ${SYSTEMD} ${LIBIDN} ${LITESQL}
louiz’'s avatar
louiz’ committed
166 167 168
    - make check
    - make e2e

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

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

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

.template:codecov_e2e: &codecov_e2e
  <<: *codecov
  script:
187
    - 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_//)
188 189 190 191 192 193

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

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

199 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
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
241 242
  only:
    - master@louiz/biboumi
243 244
  tags:
    - docker
245
  image: docker.louiz.org/biboumi-test-fedora:latest
246 247
  allow_failure: true
  when: manual
248 249 250
  script:
    - export PATH=$PATH:~/coverity/bin
    - cmake .. -DWITHOUT_SYSTEMD=1
251
    - cov-build --dir cov-int   make everything -j$(nproc || echo 1)
252 253
    - 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
254
  dependencies: []
255

256 257 258 259 260 261 262 263 264 265 266 267 268 269 270
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
271 272
  dependencies:
    - build:fedora
273 274 275 276 277

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

packaging:archlinux:
  stage: packaging
  tags:
    - docker
  image: docker.louiz.org/biboumi-test-archlinux:latest
  before_script: []
  script:
305
    - sudo pacman -Syuu --noconfirm
306 307 308 309 310 311 312 313
    - git clone https://aur.archlinux.org/litesql-git.git
    - cd litesql-git
    - makepkg --noconfirm -s && makepkg -f && sudo pacman --noconfirm -U *.pkg.*
    - cd ..
    - git clone https://aur.archlinux.org/biboumi-git.git
    - cd biboumi-git
    - makepkg --noconfirm -s && makepkg -f && sudo pacman --noconfirm -U *.pkg.*
  dependencies: []