.gitlab-ci.yml 19.4 KB
Newer Older
1
# SPDX-License-Identifier: GPL-3.0-or-later
Tomas Krizek's avatar
Tomas Krizek committed
2
# vim:foldmethod=marker
Ondřej Surý's avatar
Ondřej Surý committed
3 4 5
variables:
  DEBIAN_FRONTEND: noninteractive
  LC_ALL: C.UTF-8
6
  GIT_SUBMODULE_STRATEGY: recursive
Vladimír Čunát's avatar
Vladimír Čunát committed
7
  GIT_STRATEGY: clone # sometimes unclean submodule dirs otherwise
8
  RESPDIFF_PRIORITY: 5
9
  DISTROTEST_PRIORITY: 6
10
  RESPDIFF_COUNT: 1
11
  RESPDIFF_FORCE: 0
Tomas Krizek's avatar
Tomas Krizek committed
12
  RESPERF_FORCE: 0
Tomas Krizek's avatar
Tomas Krizek committed
13
  KNOT_VERSION: '2.9'
14 15
  LIBKRES_ABI: 9
  LIBKRES_NAME: libkres
Tomas Krizek's avatar
Tomas Krizek committed
16
  MESON_TEST: meson test -C build_ci* -t 4 --print-errorlogs
Tomas Krizek's avatar
Tomas Krizek committed
17
  PREFIX: $CI_PROJECT_DIR/.local
18

Tomas Krizek's avatar
Tomas Krizek committed
19
image: $CI_REGISTRY/knot/knot-resolver/ci/debian-buster:knot-$KNOT_VERSION
20

21 22 23
stages:
  - build
  - test
24
  - extended
25
  - deploy
26
  - deploy-test
27

Tomas Krizek's avatar
Tomas Krizek committed
28
# build {{{
29
.build: &build
Ondřej Surý's avatar
Ondřej Surý committed
30
  stage: build
31
  except:
32
    refs:
33 34
      - master@knot/knot-resolver
      - master@knot/security/knot-resolver
35 36
    variables:
      - $SKIP_CI == "1"
37
  artifacts:
38 39 40
    when: always
    paths:
      - .local
Tomas Krizek's avatar
Tomas Krizek committed
41
      - build_ci*
Tomas Krizek's avatar
Tomas Krizek committed
42
      - build_dist/meson-dist/*.tar.xz
Ondřej Surý's avatar
Ondřej Surý committed
43 44 45 46 47
  tags:
    - docker
    - linux
    - amd64

Tomas Krizek's avatar
Tomas Krizek committed
48 49 50 51 52
archive:
  <<: *build
  variables:
    GIT_COMMITER_NAME: 'ci'
    EMAIL: 'ci@nic'
53
  except: null
Tomas Krizek's avatar
Tomas Krizek committed
54
  script:
55 56 57 58 59 60
    - >
      if [[ -z "${CI_COMMIT_TAG}" ]]; then
        ./scripts/make-dev-archive.sh
      else
        meson build_dist; ninja -C build_dist dist
      fi
Tomas Krizek's avatar
Tomas Krizek committed
61

Tomas Krizek's avatar
Tomas Krizek committed
62
build:
63
  <<: *build
Tomas Krizek's avatar
Tomas Krizek committed
64
  script:
65
    - meson build_ci --default-library=static --prefix=$PREFIX -Dwerror=true -Dextra_tests=enabled
66 67
    - ninja -C build_ci
    - ninja -C build_ci install >/dev/null
Tomas Krizek's avatar
Tomas Krizek committed
68
    - ${MESON_TEST} --suite unit --suite config
69

Tomas Krizek's avatar
Tomas Krizek committed
70
build-asan:
71
  <<: *build
72
  script:
73
    - CC=clang CXX=clang++ meson build_ci_asan --default-library=static --prefix=$PREFIX -Db_sanitize=address -Dextra_tests=enabled
74 75
    - ninja -C build_ci_asan
    - ninja -C build_ci_asan install >/dev/null
76 77
      # TODO _leaks: not sure what exactly is wrong in leak detection on config tests
      # TODO skip_asan: all three of these disappear locally when using gcc 9.1 (except some leaks)
78
    - ASAN_OPTIONS=detect_leaks=0 ${MESON_TEST} --suite unit --suite config --no-suite skip_asan
Tomas Krizek's avatar
Tomas Krizek committed
79 80

# NOTE: build for turris when meson is available and packaging files updated
Tomas Krizek's avatar
Tomas Krizek committed
81
#build:turris:
Tomas Krizek's avatar
Tomas Krizek committed
82
#  <<: *build
Tomas Krizek's avatar
Tomas Krizek committed
83 84 85 86 87 88 89 90 91 92 93 94 95 96
#  image: $CI_REGISTRY/knot/knot-resolver/ci/turris:omnia
#  script:
#    - ./scripts/make-archive.sh
#    - cp knot-resolver*.tar.xz /tmp/turris/dl/
#    - ./scripts/make-distrofiles.sh
#    - cp -r distro/turris /tmp/turris/package/knot-resolver
#    - pushd /tmp/turris
#    - export PATH=$PATH:$PWD/staging_dir/toolchain-*/bin
#    - USE_CCACHE=n make CC=arm-openwrt-linux-gcc CXX=arm-openwrt-linux-g++ LD=arm-openwrt-linux-ld -C $PWD V=s
#    - popd
#    - cp /tmp/turris/bin/mvebu-musl/packages/base/*.ipk ./
#  artifacts:
#    paths:
#      - "*.ipk"
97

98
kres-gen:
Tomas Krizek's avatar
Tomas Krizek committed
99
  <<: *build
100 101 102
  tags:
    - docker
  script:
103
    - meson build_ci_lib --prefix=$PREFIX
104
    - ninja -C build_ci_lib daemon/kresd
105
    - ninja -C build_ci_lib kres-gen
106
    - git diff --quiet || (git diff; exit 1)
Tomas Krizek's avatar
Tomas Krizek committed
107 108 109
# }}}

# test {{{
Tomas Krizek's avatar
Tomas Krizek committed
110 111 112
.test: &test
  stage: test
  except:
113
    refs:
114 115
      - master@knot/knot-resolver
      - master@knot/security/knot-resolver
116 117
    variables:
      - $SKIP_CI == "1"
Tomas Krizek's avatar
Tomas Krizek committed
118 119 120 121 122
  tags:
    - docker
    - linux
    - amd64
  dependencies:
123
    - build
Tomas Krizek's avatar
Tomas Krizek committed
124 125 126
  before_script:
    # meson detects changes and performs useless rebuild; hide the log
    - ninja -C build_ci* &>/dev/null
127
    - rm build_ci*/meson-logs/testlog*.txt  # start with clean testlog
Tomas Krizek's avatar
Tomas Krizek committed
128 129 130
  artifacts:
    when: always
    paths:
131
      - build_ci*/meson-logs/testlog*.txt
Tomas Krizek's avatar
Tomas Krizek committed
132
      - tmpdeckard*
Tomas Krizek's avatar
Tomas Krizek committed
133 134 135

.test_flaky: &test_flaky
  <<: *test
136 137 138 139
  retry:
    max: 1
    when:
      - script_failure
Tomas Krizek's avatar
Tomas Krizek committed
140

141 142 143
.test_nodep: &test_nodep
  stage: test
  except:
144
    refs:
145 146
      - master@knot/knot-resolver
      - master@knot/security/knot-resolver
147 148
    variables:
      - $SKIP_CI == "1"
149 150 151 152
  dependencies: []  # do not download build artifacts
  tags:
    - docker

153 154 155
build:darwin:
  <<: *test_nodep
  when: delayed
156 157 158 159
  only:  # trigger job only in the main repo
    refs:
      - branches@knot/knot-resolver
  except:
160
    refs:
161
      - master@knot/knot-resolver
162 163
    variables:
      - $SKIP_CI == "1"
164 165 166 167
  start_in: 3 minutes  # give the build in Travis CI time to finish
  script:
    - ci/travis.py ${CI_COMMIT_REF_NAME}

Tomas Krizek's avatar
Tomas Krizek committed
168 169
deckard:
  <<: *test_flaky
170 171
  tags:
    - privileged
Tomas Krizek's avatar
Tomas Krizek committed
172 173
  variables:
    TMPDIR: $CI_PROJECT_DIR
Tomas Krizek's avatar
Tomas Krizek committed
174
  script:
Tomas Krizek's avatar
Tomas Krizek committed
175
    - ${MESON_TEST} --suite integration
Tomas Krizek's avatar
Tomas Krizek committed
176

Tomas Krizek's avatar
Tomas Krizek committed
177
doc:
Tomas Krizek's avatar
Tomas Krizek committed
178
  <<: *test_nodep
Tomas Krizek's avatar
Tomas Krizek committed
179 180
  when: delayed
  start_in: '30 seconds'
Petr Špaček's avatar
Petr Špaček committed
181
  script:
Tomas Krizek's avatar
Tomas Krizek committed
182
    - meson build_doc -Ddoc=enabled
183
    - ninja -C build_doc doc-strict
184
  artifacts:
185
    expire_in: 6 hour
186
    paths:
Tomas Krizek's avatar
Tomas Krizek committed
187
      - doc/html
188

Tomas Krizek's avatar
Tomas Krizek committed
189
docker:
Tomas Krizek's avatar
Tomas Krizek committed
190
  <<: *test_nodep
191 192 193
  only:  # trigger only for repos in our control (requires dind runner)
    - branches@knot/knot-resolver
    - branches@knot/security/knot-resolver
194 195 196 197 198 199 200 201 202 203 204 205
  image: docker:latest
  tags:
    - dind
  variables:
    DOCKER_IMAGE_NAME: knot-resolver-test:${CI_COMMIT_SHA}
  script:
    - docker build --no-cache -t ${DOCKER_IMAGE_NAME} .
    - echo "quit()" | docker run -i ${DOCKER_IMAGE_NAME}
  after_script:  # remove dangling images to avoid running out of disk space
    - docker rmi ${DOCKER_IMAGE_NAME}
    - docker rmi $(docker images -f "dangling=true" -q)

Tomas Krizek's avatar
Tomas Krizek committed
206
lint:other:
207
  <<: *test_nodep
Tomas Krizek's avatar
Tomas Krizek committed
208 209
  when: delayed
  start_in: '30 seconds'
210 211
  stage: test
  script:
Tomas Krizek's avatar
Tomas Krizek committed
212 213 214 215
    - meson build_ci_lint &>/dev/null
    - ninja -C build_ci* pylint
    - ninja -C build_ci* flake8
    - ninja -C build_ci* luacheck
216

Tomas Krizek's avatar
Tomas Krizek committed
217 218 219 220
lint:pedantic:
  <<: *test_nodep
  when: delayed
  start_in: '30 seconds'
221 222 223 224
  tags:
    - docker
    - linux
    - amd64
Tomas Krizek's avatar
Tomas Krizek committed
225
  script:
226
    - meson build_pedantic_gcc -Dwerror=true -Dc_args='-Wpedantic' -Dextra_tests=enabled
Tomas Krizek's avatar
Tomas Krizek committed
227 228
    - ninja -C build_pedantic_gcc
    - >
229
      CC=clang CXX=clang++ meson build_pedantic_clang -Dwerror=true -Dextra_tests=enabled -Dc_args='
Tomas Krizek's avatar
Tomas Krizek committed
230 231
      -Wpedantic -Wno-newline-eof -Wno-gnu-zero-variadic-macro-arguments -Wno-gnu-folding-constant'
    - ninja -C build_pedantic_clang
232

Tomas Krizek's avatar
Tomas Krizek committed
233
lint:scan-build:
Tomas Krizek's avatar
Tomas Krizek committed
234
  <<: *test
Tomas Krizek's avatar
Tomas Krizek committed
235
  stage: test
Tomas Krizek's avatar
Tomas Krizek committed
236
  artifacts:
Tomas Krizek's avatar
Tomas Krizek committed
237 238
    when: on_failure
    expire_in: '1 day'
Tomas Krizek's avatar
Tomas Krizek committed
239
    paths:
Tomas Krizek's avatar
Tomas Krizek committed
240 241 242 243 244
      - build_ci*/meson-logs/scanbuild
  before_script: []
  script:
    - export SCANBUILD="scan-build --status-bugs -no-failure-reports $(./scripts/get-scanbuild-args.sh)"
    - ninja -C build_ci* scan-build || true
Petr Špaček's avatar
Petr Špaček committed
245
    - test "$(ls build_ci*/meson-logs/scanbuild/*/report-*.html | wc -l)" = 23 # we have this many errors ATM :-)
Tomas Krizek's avatar
Tomas Krizek committed
246 247 248

lint:tidy:
  <<: *test
249
  artifacts:
Tomas Krizek's avatar
Tomas Krizek committed
250 251
  script:
    - ninja -C build_ci* tidy
Tomas Krizek's avatar
Tomas Krizek committed
252

Tomas Krizek's avatar
Tomas Krizek committed
253 254
respdiff:basic:
  <<: *test
255 256
  dependencies:
    - build-asan
Tomas Krizek's avatar
Tomas Krizek committed
257 258 259 260 261 262 263 264 265 266 267 268
  script:
    - ulimit -n "$(ulimit -Hn)" # applies only for kresd ATM
    - ./ci/respdiff/start-resolvers.sh
    - ./ci/respdiff/run-respdiff-tests.sh udp
    - cat results/respdiff.txt
    - echo 'test if mismatch rate < 1.0 %'
    - grep -q '^target disagrees.*0\.[0-9][0-9] %' results/respdiff.txt
  after_script:
    - killall --wait kresd
  artifacts:
    when: always
    paths:
269
      - kresd.log*
Tomas Krizek's avatar
Tomas Krizek committed
270 271
      - results/*.txt
      - results/*.png
272
      - results/respdiff.db/data.mdb*
Tomas Krizek's avatar
Tomas Krizek committed
273 274 275 276 277 278
      - ./*.info
  tags:
    - docker
    - linux
    - amd64

279 280 281 282 283 284 285 286
root.hints:
  <<: *test_nodep
  only:
    refs:
      - /^release.*$/
  script:
    - scripts/update-root-hints.sh

287 288 289 290 291 292
authors:
  <<: *test_nodep
  only:
    refs:
      - /^release.*$/
  script:
Tomas Krizek's avatar
Tomas Krizek committed
293
    - LC_ALL=en_US.UTF-8 scripts/update-authors.sh
294

Tomas Krizek's avatar
Tomas Krizek committed
295
test:valgrind:
296
  <<: *test_flaky
Tomas Krizek's avatar
Tomas Krizek committed
297 298 299
  when: delayed
  start_in: '30 seconds'
  script:
300 301
    - ${MESON_TEST} --suite unit --suite config --no-suite snowflake --wrap="valgrind --leak-check=full --trace-children=yes --quiet --suppressions=/lj.supp"
    - MESON_TESTTHREADS=1 ${MESON_TEST} --wrap="valgrind --leak-check=full --trace-children=yes --quiet --suppressions=/lj.supp" --suite snowflake
Tomas Krizek's avatar
Tomas Krizek committed
302 303 304
# }}}

# extended {{{
305 306
pytests:
  <<: *test_flaky
307 308
  dependencies:
    - build-asan
309
  stage: extended  # use this stage to avoid clash with other resource-intensive jobs
310 311 312 313 314
  artifacts:
    when: always
    paths:
      - build_ci*/meson-logs/testlog*.txt
      - tests/pytests/*.html
315 316 317
  script:
    - ${MESON_TEST} --suite pytests

Tomas Krizek's avatar
Tomas Krizek committed
318
.respdiff:  &respdiff
319
  stage: extended
Tomas Krizek's avatar
Tomas Krizek committed
320
  dependencies: []
321 322
  only:  # trigger job only in repos under our control
    - branches@knot/knot-resolver
323
    - branches@knot/security/knot-resolver
324
  except:
325
    refs:
326 327
      - master@knot/knot-resolver
      - master@knot/security/knot-resolver
328 329
    variables:
      - $SKIP_CI == "1"
Tomas Krizek's avatar
Tomas Krizek committed
330
  script:
331
    - git diff-index --name-only origin/master | grep -qEv '^(AUTHORS|ci/|config.mk|COPYING|distro/|doc/|etc/|NEWS|README.md|scripts/|tests/|\.gitignore|\.gitlab-ci\.yml|\.travis\.yml)' || test $RESPDIFF_FORCE -gt 0 || exit 0
332
    - test ! -f /var/tmp/respdiff-jobs/buffer/buffer_$RESPDIFF_TEST_stats.json || test $RESPDIFF_FORCE -gt 0 || ( echo "Reference unstable, try again in ~3h or use RESPDIFF_FORCE=1."; exit 1 )
333
    - export LABEL=gl$(date +%s)
334 335 336
    - export COMMITDIR="/var/tmp/respdiff-jobs/$(git rev-parse --short HEAD)-$LABEL"
    - export TESTDIR="$COMMITDIR/$RESPDIFF_TEST"
    - ln -s $COMMITDIR respdiff_commitdir
Tomas Krizek's avatar
Tomas Krizek committed
337 338
    - >
      sudo -u respdiff /var/opt/respdiff/contrib/job_manager/submit.py -w
339 340
      -p $RESPDIFF_PRIORITY
      -c $RESPDIFF_COUNT
Tomas Krizek's avatar
Tomas Krizek committed
341
      $(sudo -u respdiff /var/opt/respdiff/contrib/job_manager/create.py
Tomas Krizek's avatar
Tomas Krizek committed
342
      "$(git rev-parse --short HEAD)" -l $LABEL -t $RESPDIFF_TEST --knot-branch=$KNOT_VERSION
343
      --respdiff-stats /var/tmp/respdiff-jobs/ref_current/*_${RESPDIFF_TEST}_stats.json)
344
    - for f in $TESTDIR/*.json; do test -s "$f" || (cat $TESTDIR/*stderr*; cat $TESTDIR/j*_docker.txt; exit 1); done
345 346 347 348
    - sudo -u respdiff /var/opt/respdiff/contrib/job_manager/plot_ref.sh $TESTDIR/.. /var/tmp/respdiff-jobs/ref_current $RESPDIFF_TEST
  after_script:
    - 'cp -t . respdiff_commitdir/$RESPDIFF_TEST/j* ||:'
    - 'cp -t . respdiff_commitdir/*$RESPDIFF_TEST*.png ||:'
349
    - 'cat respdiff_commitdir/$RESPDIFF_TEST/*histogram.tar.gz | tar -xf - -i ||:'
Tomas Krizek's avatar
Tomas Krizek committed
350 351 352 353 354
  artifacts:
    when: always
    expire_in: 1 week
    paths:
      - ./j*
355
      - ./*.png
356
      - ./*histogram/*
Tomas Krizek's avatar
Tomas Krizek committed
357 358 359
  tags:
    - respdiff

Tomas Krizek's avatar
Tomas Krizek committed
360
fwd-tls6-kresd.udp6:
Tomas Krizek's avatar
Tomas Krizek committed
361 362
  <<: *respdiff
  variables:
Tomas Krizek's avatar
Tomas Krizek committed
363
    RESPDIFF_TEST: shortlist.fwd-tls6-kresd.udp6
Tomas Krizek's avatar
Tomas Krizek committed
364

Tomas Krizek's avatar
Tomas Krizek committed
365
fwd-udp6-kresd.udp6:
Tomas Krizek's avatar
Tomas Krizek committed
366 367
  <<: *respdiff
  variables:
Tomas Krizek's avatar
Tomas Krizek committed
368
    RESPDIFF_TEST: shortlist.fwd-udp6-kresd.udp6
Tomas Krizek's avatar
Tomas Krizek committed
369

Tomas Krizek's avatar
Tomas Krizek committed
370
iter.udp6:
Tomas Krizek's avatar
Tomas Krizek committed
371 372
  <<: *respdiff
  variables:
Tomas Krizek's avatar
Tomas Krizek committed
373
    RESPDIFF_TEST: shortlist.iter.udp6
Tomas Krizek's avatar
Tomas Krizek committed
374

Tomas Krizek's avatar
Tomas Krizek committed
375
iter.tls6:
Tomas Krizek's avatar
Tomas Krizek committed
376 377
  <<: *respdiff
  variables:
Tomas Krizek's avatar
Tomas Krizek committed
378
    RESPDIFF_TEST: shortlist.iter.tls6
Tomas Krizek's avatar
Tomas Krizek committed
379

Tomas Krizek's avatar
Tomas Krizek committed
380
fwd-udp6-unbound.udp6:
Tomas Krizek's avatar
Tomas Krizek committed
381 382
  <<: *respdiff
  variables:
Tomas Krizek's avatar
Tomas Krizek committed
383
    RESPDIFF_TEST: shortlist.fwd-udp6-unbound.udp6
Tomas Krizek's avatar
Tomas Krizek committed
384

Tomas Krizek's avatar
Tomas Krizek committed
385
fwd-udp6-unbound.tcp6:
Tomas Krizek's avatar
Tomas Krizek committed
386 387
  <<: *respdiff
  variables:
Tomas Krizek's avatar
Tomas Krizek committed
388
    RESPDIFF_TEST: shortlist.fwd-udp6-unbound.tcp6
Tomas Krizek's avatar
Tomas Krizek committed
389

Tomas Krizek's avatar
Tomas Krizek committed
390
fwd-udp6-unbound.tls6:
Tomas Krizek's avatar
Tomas Krizek committed
391 392
  <<: *respdiff
  variables:
Tomas Krizek's avatar
Tomas Krizek committed
393
    RESPDIFF_TEST: shortlist.fwd-udp6-unbound.tls6
Tomas Krizek's avatar
Tomas Krizek committed
394

Tomas Krizek's avatar
Tomas Krizek committed
395
.resperf:  &resperf
396
  stage: extended
Tomas Krizek's avatar
Tomas Krizek committed
397 398 399
  dependencies: []
  only:  # trigger job only in repos under our control
    - branches@knot/knot-resolver
400
    - branches@knot/security/knot-resolver
Tomas Krizek's avatar
Tomas Krizek committed
401
  except:
402
    refs:
403 404
      - master@knot/knot-resolver
      - master@knot/security/knot-resolver
405 406
    variables:
      - $SKIP_CI == "1"
Tomas Krizek's avatar
Tomas Krizek committed
407 408 409 410 411 412 413 414 415
  script:
    - git diff-index --name-only origin/master | grep -qEv '^(AUTHORS|ci/|config.mk|COPYING|distro/|doc/|etc/|NEWS|README.md|scripts/|tests/|\.gitignore|\.gitlab-ci\.yml|\.travis\.yml)' || test $RESPERF_FORCE -gt 0 || exit 0
    - export LABEL=gl$(date +%s)
    - export COMMITDIR="/var/tmp/respdiff-jobs/$(git rev-parse --short HEAD)-$LABEL"
    - export TESTDIR="$COMMITDIR/$RESPERF_TEST"
    - ln -s $COMMITDIR resperf_commitdir
    - >
      sudo -u respdiff /var/opt/respdiff/contrib/job_manager/submit.py -w
      $(sudo -u respdiff /var/opt/respdiff/contrib/job_manager/create.py
416
      "$(git rev-parse --short HEAD)" -l $LABEL --asan -t $RESPERF_TEST --knot-branch=$KNOT_VERSION)
Tomas Krizek's avatar
Tomas Krizek committed
417
    - export EXITCODE=$(cat $TESTDIR/j*_exitcode)
418
    - if [[ "$EXITCODE" == "0" ]]; then cat $TESTDIR/j*_resperf.txt; else cat $TESTDIR/j*_docker.txt; fi
Tomas Krizek's avatar
Tomas Krizek committed
419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443
    - exit $EXITCODE
  after_script:
    - 'cp -t . resperf_commitdir/$RESPERF_TEST/j* ||:'
  artifacts:
    when: always
    expire_in: 1 week
    paths:
      - ./j*
  tags:
    - respdiff

resperf:fwd-tls6.udp-asan:
  <<: *resperf
  variables:
    RESPERF_TEST: resperf.fwd-tls6.udp

resperf:fwd-udp6.udp-asan:
  <<: *resperf
  variables:
    RESPERF_TEST: resperf.fwd-udp6.udp

resperf:iter.udp-asan:
  <<: *resperf
  variables:
    RESPERF_TEST: resperf.iter.udp
Lukas Jezek's avatar
Lukas Jezek committed
444

445
.packagingtest: &packagingtest
Lukas Jezek's avatar
Lukas Jezek committed
446
  stage: extended
447 448 449 450
  only:
    refs:
      - nightly@knot/knot-resolver
  dependencies: []
Lukas Jezek's avatar
Lukas Jezek committed
451 452
  tags:
    - dind
453 454
  variables:
    DISTRO: debian_10
Lukas Jezek's avatar
Lukas Jezek committed
455
  script:
456 457 458 459 460 461 462 463 464 465 466 467
    - pytest -r fEsxX tests/packaging -k $DISTRO

packaging:debian_10:
  <<: *packagingtest
  variables:
    DISTRO: debian_10

packaging:debian_9:
  <<: *packagingtest
  variables:
    DISTRO: debian_9

468 469 470 471 472
packaging:ubuntu_20.04:
  <<: *packagingtest
  variables:
    DISTRO: ubuntu_20.04

473 474 475 476 477 478 479 480 481 482
packaging:ubuntu_18.04:
  <<: *packagingtest
  variables:
    DISTRO: ubuntu_18.04

packaging:ubuntu_16.04:
  <<: *packagingtest
  variables:
    DISTRO: ubuntu_16.04

Tomas Krizek's avatar
Tomas Krizek committed
483 484 485 486 487
packaging:centos_8:
  <<: *packagingtest
  variables:
    DISTRO: centos_8

488 489 490 491 492 493 494 495 496 497
packaging:centos_7:
  <<: *packagingtest
  variables:
    DISTRO: centos_7

packaging:fedora_31:
  <<: *packagingtest
  variables:
    DISTRO: fedora_31

498
packaging:fedora_32:
499 500
  <<: *packagingtest
  variables:
501
    DISTRO: fedora_32
502 503 504 505 506

packaging:leap_15.2:
  <<: *packagingtest
  variables:
    DISTRO: leap_15.2
Lukas Jezek's avatar
Lukas Jezek committed
507

Tomas Krizek's avatar
Tomas Krizek committed
508
# }}}
Tomas Krizek's avatar
Tomas Krizek committed
509

Tomas Krizek's avatar
Tomas Krizek committed
510
# deploy {{{
511 512 513 514 515 516 517 518 519 520 521
# copy snapshot of current master to nightly branch for further processing
# (this is workaround for missing complex conditions for job limits in Gitlab)
nightly:copy:
  stage: deploy
  only:
    variables:
      - $CREATE_NIGHTLY == "1"
    refs:
      - master@knot/knot-resolver
  dependencies: []
  script:
522
    - 'tmp_file=$(mktemp)'
523
    # delete nightly branch
524
    - 'STATUS=$(curl --request PUT --header "PRIVATE-TOKEN: $GITLAB_API_TOKEN" -s -o ${tmp_file} -w "%{http_code}" "https://gitlab.nic.cz/api/v4/projects/147/repository/branches/nightly/unprotect")'
525 526
    - '[ "x${STATUS}" == "x200" ] || { cat ${tmp_file}; rm ${tmp_file}; exit 1; }'
    # no output from DELETE command
527
    - 'STATUS=$(curl --request DELETE --header "PRIVATE-TOKEN: $GITLAB_API_TOKEN" -s -o ${tmp_file} -w "%{http_code}" "https://gitlab.nic.cz/api/v4/projects/147/repository/branches/nightly")'
528
    # recreate nightly branch from current master
529
    - 'STATUS=$(curl --request POST --header "PRIVATE-TOKEN: $GITLAB_API_TOKEN" -s -o ${tmp_file} -w "%{http_code}" "https://gitlab.nic.cz/api/v4/projects/147/repository/branches?branch=nightly&ref=master")'
530
    - '[ "x${STATUS}" == "x201" ] || { cat ${tmp_file}; rm ${tmp_file}; exit 1; }'
531
    - 'STATUS=$(curl --request PUT --header "PRIVATE-TOKEN: $GITLAB_API_TOKEN" -s -o ${tmp_file} -w "%{http_code}" "https://gitlab.nic.cz/api/v4/projects/147/repository/branches/nightly/protect")'
532 533
    - '[ "x${STATUS}" == "x200" ] || { cat ${tmp_file}; rm ${tmp_file}; exit 1; }'
    - 'rm ${tmp_file}'
534

535
obs:trigger: &obs_trigger
Tomas Krizek's avatar
Tomas Krizek committed
536 537
  stage: deploy
  only:
538
    variables:
539
      - $OBS_REPO
540 541
  dependencies:
    - archive
542 543 544 545 546
  environment:
    name: OBS/$OBS_REPO
    url: https://build.opensuse.org/package/show/home:CZ-NIC:$OBS_REPO/knot-resolver
  tags:
    - respdiff
547
  allow_failure: false  # required to make when: manual action blocking
Tomas Krizek's avatar
Tomas Krizek committed
548
  script:
549
    - scripts/make-distrofiles.sh
Tomas Krizek's avatar
Tomas Krizek committed
550
    - echo y | scripts/build-in-obs.sh $OBS_REPO
Tomas Krizek's avatar
Tomas Krizek committed
551

552 553 554 555 556 557 558
obs:release:
  <<: *obs_trigger
  only:
    - tags
  variables:
    OBS_REPO: knot-resolver-latest
  when: manual
559 560 561 562 563 564 565 566 567

obs:odvr:
  <<: *obs_trigger
  stage: deploy-test  # last stage to ensure it doesn't block anything
  only:
    - tags
  variables:
    OBS_REPO: knot-resolver-odvr
  when: manual
Tomas Krizek's avatar
Tomas Krizek committed
568
# }}}
569 570

# deploy-test {{{
571
.deploytest: &deploytest
572 573 574
  stage: deploy-test
  only:
    variables:
575
      - $OBS_REPO =~ /^knot-resolver-devel|knot-dns-devel|knot-resolver-testing$/
576
      - $CI_COMMIT_TAG
577
  dependencies: []
578 579
  variables:
    OBS_REPO: knot-resolver-latest
580 581 582 583
  when: delayed
  start_in: 3 minutes  # give OBS build some time
  tags:
    - respdiff
584 585 586

obs:build:all:
  <<: *deploytest
587 588 589 590
  only:
    variables:
      - $OBS_REPO =~ /^knot-resolver-devel|knot-dns-devel|knot-resolver-testing|knot-resolver-odvr$/
      - $CI_COMMIT_TAG
591
  allow_failure: true
592 593
  script:
    - "osc results home:CZ-NIC:$OBS_REPO knot-resolver -w"
594
    - version=$(sed 's/^v//' <(git describe --exact-match HEAD || git rev-parse --short HEAD) )
595 596
    - > # check version only for one (reliable) repo to avoid false negatives
      ! osc ls -b home:CZ-NIC:$OBS_REPO knot-resolver Debian_9.0 x86_64 | \
597
        grep -E '(rpm|deb|tar\.xz)$' | grep -v $version || \
598
        (echo "ERROR: version mismatch"; exit 1)
599
    - >
600
      ! osc results home:CZ-NIC:$OBS_REPO knot-resolver --csv | \
601
        grep -Ev 'disabled|excluded|Rawhide|CentOS_8_EPEL' | grep -v 'succeeded' -q || \
602 603 604 605
        (echo "ERROR: build(s) failed"; exit 1)

.distrotest: &distrotest
  <<: *deploytest
606 607 608 609 610
  script:
    - "osc results home:CZ-NIC:$OBS_REPO knot-resolver -a x86_64 -r $DISTROTEST_REPO -w"
    - >
      osc results home:CZ-NIC:$OBS_REPO knot-resolver -a x86_64 -r $DISTROTEST_REPO --csv | grep 'succeeded|$' -q || \
        (echo "ERROR: build failed"; exit 1)
Tomas Krizek's avatar
Tomas Krizek committed
611
    - export LABEL="gl$(date +%s)_$OBS_REPO"
612 613 614 615 616 617
    - export COMMITDIR="/var/tmp/respdiff-jobs/$(git rev-parse --short HEAD)-$LABEL"
    - export TESTDIR="$COMMITDIR/distrotest.$DISTROTEST_NAME"
    - ln -s $COMMITDIR distrotest_commitdir
    - sudo -u respdiff /var/opt/respdiff/contrib/job_manager/submit.py -w
      -p $DISTROTEST_PRIORITY
      $(sudo -u respdiff /var/opt/respdiff/contrib/job_manager/create.py
618 619
        "$(git rev-parse --short HEAD)" -l $LABEL -t distrotest.$DISTROTEST_NAME
        --obs-repo $OBS_REPO)
620
    - export EXITCODE=$(cat $TESTDIR/j*_exitcode)
621
    - if [[ "$EXITCODE" != "0" ]]; then cat $TESTDIR/j*_{vagrant.log.txt,stdout.txt}; fi
622 623 624 625 626 627 628 629 630 631 632 633
    - exit $EXITCODE
  after_script:
    - 'cp -t . distrotest_commitdir/distrotest.$DISTROTEST_NAME/j* ||:'
  artifacts:
    when: always
    expire_in: 1 week
    paths:
      - ./j*

obs:centos7:x86_64:
  <<: *distrotest
  variables:
634
    OBS_REPO: knot-resolver-latest
635 636 637
    DISTROTEST_NAME: centos7
    DISTROTEST_REPO: CentOS_7_EPEL

Tomas Krizek's avatar
Tomas Krizek committed
638 639 640 641 642 643 644
obs:centos8:x86_64:
  <<: *distrotest
  variables:
    OBS_REPO: knot-resolver-latest
    DISTROTEST_NAME: centos8
    DISTROTEST_REPO: CentOS_8_EPEL

645 646
obs:debian9:x86_64:
  <<: *distrotest
647 648 649 650
  only:
    variables:
      - $OBS_REPO =~ /^knot-resolver-devel|knot-dns-devel|knot-resolver-testing|knot-resolver-odvr$/
      - $CI_COMMIT_TAG
651
  variables:
652
    OBS_REPO: knot-resolver-latest
653 654 655
    DISTROTEST_NAME: debian9
    DISTROTEST_REPO: Debian_9.0

Tomas Krizek's avatar
Tomas Krizek committed
656 657 658
obs:debian10:x86_64:
  <<: *distrotest
  variables:
659
    OBS_REPO: knot-resolver-latest
Tomas Krizek's avatar
Tomas Krizek committed
660 661 662
    DISTROTEST_NAME: debian10
    DISTROTEST_REPO: Debian_10

663
obs:fedora31:x86_64:
664 665
  <<: *distrotest
  variables:
666
    OBS_REPO: knot-resolver-latest
667 668
    DISTROTEST_NAME: fedora31
    DISTROTEST_REPO: Fedora_31
669

Tomas Krizek's avatar
Tomas Krizek committed
670 671 672 673 674 675 676
obs:fedora32:x86_64:
  <<: *distrotest
  variables:
    OBS_REPO: knot-resolver-latest
    DISTROTEST_NAME: fedora32
    DISTROTEST_REPO: Fedora_32

677 678 679
obs:leap15:x86_64:
  <<: *distrotest
  variables:
680
    OBS_REPO: knot-resolver-latest
681
    DISTROTEST_NAME: leap15
682
    DISTROTEST_REPO: openSUSE_Leap_15.2
683 684 685 686

obs:ubuntu1604:x86_64:
  <<: *distrotest
  variables:
687
    OBS_REPO: knot-resolver-latest
688 689 690 691 692
    DISTROTEST_NAME: ubuntu1604
    DISTROTEST_REPO: xUbuntu_16.04

obs:ubuntu1804:x86_64:
  <<: *distrotest
693 694 695 696
  only:
    variables:
      - $OBS_REPO =~ /^knot-resolver-devel|knot-dns-devel|knot-resolver-testing|knot-resolver-odvr$/
      - $CI_COMMIT_TAG
697
  variables:
698
    OBS_REPO: knot-resolver-latest
699 700 701
    DISTROTEST_NAME: ubuntu1804
    DISTROTEST_REPO: xUbuntu_18.04

702
obs:ubuntu1910:x86_64:
703 704
  <<: *distrotest
  variables:
705
    OBS_REPO: knot-resolver-latest
706 707
    DISTROTEST_NAME: ubuntu1910
    DISTROTEST_REPO: xUbuntu_19.10
708 709 710 711 712 713 714

obs:ubuntu2004:x86_64:
  <<: *distrotest
  variables:
    OBS_REPO: knot-resolver-latest
    DISTROTEST_NAME: ubuntu2004
    DISTROTEST_REPO: xUbuntu_20.04
715
# }}}