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

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

20 21 22
stages:
  - build
  - test
23
  - extended
24
  - deploy
Tomas Krizek's avatar
Tomas Krizek committed
25
  - deploy-test
26

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

Tomas Krizek's avatar
Tomas Krizek committed
47 48 49 50 51
archive:
  <<: *build
  variables:
    GIT_COMMITER_NAME: 'ci'
    EMAIL: 'ci@nic'
Tomas Krizek's avatar
Tomas Krizek committed
52
  except: null
Tomas Krizek's avatar
Tomas Krizek committed
53
  script:
54 55 56 57 58 59
    - >
      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
60

Tomas Krizek's avatar
Tomas Krizek committed
61
build:
62
  <<: *build
Tomas Krizek's avatar
Tomas Krizek committed
63
  script:
64 65
      # sendmmsg: deckard can't handle that syscall
    - meson build_ci --default-library=static --prefix=$PREFIX -Dwerror=true -Dextra_tests=enabled -Dsendmmsg=disabled
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:
Tomas Krizek's avatar
Tomas Krizek committed
113
    refs:
114 115
      - master@knot/knot-resolver
      - master@knot/security/knot-resolver
Tomas Krizek's avatar
Tomas Krizek committed
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:
Tomas Krizek's avatar
Tomas Krizek committed
144
    refs:
145 146
      - master@knot/knot-resolver
      - master@knot/security/knot-resolver
Tomas Krizek's avatar
Tomas Krizek committed
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 170 171
deckard:
  <<: *test_flaky
  variables:
    TMPDIR: $CI_PROJECT_DIR
Tomas Krizek's avatar
Tomas Krizek committed
172
  script:
Tomas Krizek's avatar
Tomas Krizek committed
173
    - ${MESON_TEST} --suite integration
Tomas Krizek's avatar
Tomas Krizek committed
174

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

Tomas Krizek's avatar
Tomas Krizek committed
187
docker:
Tomas Krizek's avatar
Tomas Krizek committed
188
  <<: *test_nodep
189 190 191
  only:  # trigger only for repos in our control (requires dind runner)
    - branches@knot/knot-resolver
    - branches@knot/security/knot-resolver
Tomas Krizek's avatar
Tomas Krizek committed
192 193 194 195 196 197 198 199 200 201 202 203
  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
204
lint:other:
205
  <<: *test_nodep
Tomas Krizek's avatar
Tomas Krizek committed
206 207
  when: delayed
  start_in: '30 seconds'
208 209
  stage: test
  script:
Tomas Krizek's avatar
Tomas Krizek committed
210 211 212 213
    - meson build_ci_lint &>/dev/null
    - ninja -C build_ci* pylint
    - ninja -C build_ci* flake8
    - ninja -C build_ci* luacheck
214

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

Tomas Krizek's avatar
Tomas Krizek committed
231
lint:scan-build:
Tomas Krizek's avatar
Tomas Krizek committed
232
  <<: *test
Tomas Krizek's avatar
Tomas Krizek committed
233
  stage: test
Tomas Krizek's avatar
Tomas Krizek committed
234
  artifacts:
Tomas Krizek's avatar
Tomas Krizek committed
235 236
    when: on_failure
    expire_in: '1 day'
Tomas Krizek's avatar
Tomas Krizek committed
237
    paths:
Tomas Krizek's avatar
Tomas Krizek committed
238 239 240 241 242
      - 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
243
    - test "$(ls build_ci*/meson-logs/scanbuild/*/report-*.html | wc -l)" = 38 # we have this many errors ATM :-)
Tomas Krizek's avatar
Tomas Krizek committed
244 245 246

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

Tomas Krizek's avatar
Tomas Krizek committed
251 252
respdiff:basic:
  <<: *test
253 254
  dependencies:
    - build-asan
Tomas Krizek's avatar
Tomas Krizek committed
255 256 257 258 259 260 261 262 263 264 265 266
  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:
267
      - kresd.log*
Tomas Krizek's avatar
Tomas Krizek committed
268 269
      - results/*.txt
      - results/*.png
270
      - results/respdiff.db/data.mdb*
Tomas Krizek's avatar
Tomas Krizek committed
271 272 273 274 275 276
      - ./*.info
  tags:
    - docker
    - linux
    - amd64

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

Tomas Krizek's avatar
Tomas Krizek committed
285
test:valgrind:
286
  <<: *test_flaky
Tomas Krizek's avatar
Tomas Krizek committed
287 288 289
  when: delayed
  start_in: '30 seconds'
  script:
290 291
    - ${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
292 293 294
# }}}

# extended {{{
295 296
pytests:
  <<: *test_flaky
297 298
  dependencies:
    - build-asan
299
  stage: extended  # use this stage to avoid clash with other resource-intensive jobs
300 301 302 303 304
  artifacts:
    when: always
    paths:
      - build_ci*/meson-logs/testlog*.txt
      - tests/pytests/*.html
305 306 307
  script:
    - ${MESON_TEST} --suite pytests

Tomas Krizek's avatar
Tomas Krizek committed
308
.respdiff:  &respdiff
309
  stage: extended
Tomas Krizek's avatar
Tomas Krizek committed
310
  dependencies: []
311 312
  only:  # trigger job only in repos under our control
    - branches@knot/knot-resolver
313
    - branches@knot/security/knot-resolver
314
  except:
Tomas Krizek's avatar
Tomas Krizek committed
315
    refs:
316 317
      - master@knot/knot-resolver
      - master@knot/security/knot-resolver
Tomas Krizek's avatar
Tomas Krizek committed
318 319
    variables:
      - $SKIP_CI == "1"
Tomas Krizek's avatar
Tomas Krizek committed
320
  script:
321
    - 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
322
    - 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 )
323
    - export LABEL=gl$(date +%s)
324 325 326
    - 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
327 328
    - >
      sudo -u respdiff /var/opt/respdiff/contrib/job_manager/submit.py -w
329 330
      -p $RESPDIFF_PRIORITY
      -c $RESPDIFF_COUNT
Tomas Krizek's avatar
Tomas Krizek committed
331
      $(sudo -u respdiff /var/opt/respdiff/contrib/job_manager/create.py
Tomas Krizek's avatar
Tomas Krizek committed
332
      "$(git rev-parse --short HEAD)" -l $LABEL -t $RESPDIFF_TEST --knot-branch=$KNOT_VERSION
333
      --respdiff-stats /var/tmp/respdiff-jobs/ref_current/*_${RESPDIFF_TEST}_stats.json)
334
    - for f in $TESTDIR/*.json; do test -s "$f" || (cat $TESTDIR/*stderr*; cat $TESTDIR/j*_docker.txt; exit 1); done
335 336 337 338
    - 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 ||:'
339
    - 'cat respdiff_commitdir/$RESPDIFF_TEST/*histogram.tar.gz | tar -xf - -i ||:'
Tomas Krizek's avatar
Tomas Krizek committed
340 341 342 343 344
  artifacts:
    when: always
    expire_in: 1 week
    paths:
      - ./j*
345
      - ./*.png
346
      - ./*histogram/*
Tomas Krizek's avatar
Tomas Krizek committed
347 348 349
  tags:
    - respdiff

Tomas Krizek's avatar
Tomas Krizek committed
350
fwd-tls6-kresd.udp6:
Tomas Krizek's avatar
Tomas Krizek committed
351 352
  <<: *respdiff
  variables:
Tomas Krizek's avatar
Tomas Krizek committed
353
    RESPDIFF_TEST: shortlist.fwd-tls6-kresd.udp6
Tomas Krizek's avatar
Tomas Krizek committed
354

Tomas Krizek's avatar
Tomas Krizek committed
355
fwd-udp6-kresd.udp6:
Tomas Krizek's avatar
Tomas Krizek committed
356 357
  <<: *respdiff
  variables:
Tomas Krizek's avatar
Tomas Krizek committed
358
    RESPDIFF_TEST: shortlist.fwd-udp6-kresd.udp6
Tomas Krizek's avatar
Tomas Krizek committed
359

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

Tomas Krizek's avatar
Tomas Krizek committed
365
iter.tls6:
Tomas Krizek's avatar
Tomas Krizek committed
366 367
  <<: *respdiff
  variables:
Tomas Krizek's avatar
Tomas Krizek committed
368
    RESPDIFF_TEST: shortlist.iter.tls6
Tomas Krizek's avatar
Tomas Krizek committed
369

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

Tomas Krizek's avatar
Tomas Krizek committed
375
fwd-udp6-unbound.tcp6:
Tomas Krizek's avatar
Tomas Krizek committed
376 377
  <<: *respdiff
  variables:
Tomas Krizek's avatar
Tomas Krizek committed
378
    RESPDIFF_TEST: shortlist.fwd-udp6-unbound.tcp6
Tomas Krizek's avatar
Tomas Krizek committed
379

Tomas Krizek's avatar
Tomas Krizek committed
380
fwd-udp6-unbound.tls6:
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.tls6
Tomas Krizek's avatar
Tomas Krizek committed
384

Tomas Krizek's avatar
Tomas Krizek committed
385
.resperf:  &resperf
386
  stage: extended
Tomas Krizek's avatar
Tomas Krizek committed
387 388 389
  dependencies: []
  only:  # trigger job only in repos under our control
    - branches@knot/knot-resolver
390
    - branches@knot/security/knot-resolver
Tomas Krizek's avatar
Tomas Krizek committed
391
  except:
Tomas Krizek's avatar
Tomas Krizek committed
392
    refs:
393 394
      - master@knot/knot-resolver
      - master@knot/security/knot-resolver
Tomas Krizek's avatar
Tomas Krizek committed
395 396
    variables:
      - $SKIP_CI == "1"
Tomas Krizek's avatar
Tomas Krizek committed
397 398 399 400 401 402 403 404 405
  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
406
      "$(git rev-parse --short HEAD)" -l $LABEL --asan -t $RESPERF_TEST --knot-branch=$KNOT_VERSION)
Tomas Krizek's avatar
Tomas Krizek committed
407
    - export EXITCODE=$(cat $TESTDIR/j*_exitcode)
408
    - if [[ "$EXITCODE" == "0" ]]; then cat $TESTDIR/j*_resperf.txt; else cat $TESTDIR/j*_docker.txt; fi
Tomas Krizek's avatar
Tomas Krizek committed
409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433
    - 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
Tomas Krizek's avatar
Tomas Krizek committed
434
# }}}
Tomas Krizek's avatar
Tomas Krizek committed
435

Tomas Krizek's avatar
Tomas Krizek committed
436
# deploy {{{
Tomas Krizek's avatar
Tomas Krizek committed
437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454
# 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:
    # delete nightly branch
    - 'curl --request PUT --header "PRIVATE-TOKEN: $GITLAB_API_TOKEN" "https://gitlab.labs.nic.cz/api/v4/projects/147/repository/branches/nightly/unprotect"'
    - 'curl --request DELETE --header "PRIVATE-TOKEN: $GITLAB_API_TOKEN" "https://gitlab.labs.nic.cz/api/v4/projects/147/repository/branches/nightly"'
    # recreate nightly branch from current master
    - 'curl --request POST --header "PRIVATE-TOKEN: $GITLAB_API_TOKEN" "https://gitlab.labs.nic.cz/api/v4/projects/147/repository/branches?branch=nightly&ref=master"'
    - 'curl --request PUT --header "PRIVATE-TOKEN: $GITLAB_API_TOKEN" "https://gitlab.labs.nic.cz/api/v4/projects/147/repository/branches/nightly/protect"'

455
obs:trigger: &obs_trigger
Tomas Krizek's avatar
Tomas Krizek committed
456 457
  stage: deploy
  only:
458
    variables:
Tomas Krizek's avatar
Tomas Krizek committed
459
      - $OBS_REPO
Tomas Krizek's avatar
Tomas Krizek committed
460 461
  dependencies:
    - archive
Tomas Krizek's avatar
Tomas Krizek committed
462 463 464 465 466
  environment:
    name: OBS/$OBS_REPO
    url: https://build.opensuse.org/package/show/home:CZ-NIC:$OBS_REPO/knot-resolver
  tags:
    - respdiff
467
  allow_failure: false  # required to make when: manual action blocking
Tomas Krizek's avatar
Tomas Krizek committed
468
  script:
469
    - scripts/make-distrofiles.sh
Tomas Krizek's avatar
Tomas Krizek committed
470
    - echo y | scripts/build-in-obs.sh $OBS_REPO
Tomas Krizek's avatar
Tomas Krizek committed
471

472 473 474 475 476 477 478
obs:release:
  <<: *obs_trigger
  only:
    - tags
  variables:
    OBS_REPO: knot-resolver-latest
  when: manual
479 480 481 482 483 484 485 486 487

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
488
# }}}
Tomas Krizek's avatar
Tomas Krizek committed
489 490

# deploy-test {{{
Tomas Krizek's avatar
Tomas Krizek committed
491
.deploytest: &deploytest
Tomas Krizek's avatar
Tomas Krizek committed
492 493 494
  stage: deploy-test
  only:
    variables:
495
      - $OBS_REPO =~ /^knot-resolver-devel|knot-dns-devel|knot-resolver-testing$/
496
      - $CI_COMMIT_TAG
497
  dependencies: []
498 499
  variables:
    OBS_REPO: knot-resolver-latest
Tomas Krizek's avatar
Tomas Krizek committed
500 501 502 503
  when: delayed
  start_in: 3 minutes  # give OBS build some time
  tags:
    - respdiff
Tomas Krizek's avatar
Tomas Krizek committed
504 505 506

obs:build:all:
  <<: *deploytest
507 508 509 510
  only:
    variables:
      - $OBS_REPO =~ /^knot-resolver-devel|knot-dns-devel|knot-resolver-testing|knot-resolver-odvr$/
      - $CI_COMMIT_TAG
511
  allow_failure: true
Tomas Krizek's avatar
Tomas Krizek committed
512 513
  script:
    - "osc results home:CZ-NIC:$OBS_REPO knot-resolver -w"
514
    - version=$(sed 's/^v//' <(git describe --exact-match HEAD || git rev-parse --short HEAD) )
515 516
    - > # 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 | \
517
        grep -E '(rpm|deb|tar\.xz)$' | grep -v $version || \
518
        (echo "ERROR: version mismatch"; exit 1)
Tomas Krizek's avatar
Tomas Krizek committed
519
    - >
520 521
      ! osc results home:CZ-NIC:$OBS_REPO knot-resolver --csv | \
        grep -Ev 'disabled|excluded|Rawhide' | grep -v 'succeeded' -q || \
Tomas Krizek's avatar
Tomas Krizek committed
522 523 524 525
        (echo "ERROR: build(s) failed"; exit 1)

.distrotest: &distrotest
  <<: *deploytest
Tomas Krizek's avatar
Tomas Krizek committed
526 527 528 529 530
  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
531
    - export LABEL="gl$(date +%s)_$OBS_REPO"
Tomas Krizek's avatar
Tomas Krizek committed
532 533 534 535 536 537
    - 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
538 539
        "$(git rev-parse --short HEAD)" -l $LABEL -t distrotest.$DISTROTEST_NAME
        --obs-repo $OBS_REPO)
Tomas Krizek's avatar
Tomas Krizek committed
540
    - export EXITCODE=$(cat $TESTDIR/j*_exitcode)
541
    - if [[ "$EXITCODE" != "0" ]]; then cat $TESTDIR/j*_{vagrant.log.txt,stdout.txt}; fi
Tomas Krizek's avatar
Tomas Krizek committed
542 543 544 545 546 547 548 549 550 551 552 553
    - 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:
554
    OBS_REPO: knot-resolver-latest
Tomas Krizek's avatar
Tomas Krizek committed
555 556 557 558 559
    DISTROTEST_NAME: centos7
    DISTROTEST_REPO: CentOS_7_EPEL

obs:debian9:x86_64:
  <<: *distrotest
560 561 562 563
  only:
    variables:
      - $OBS_REPO =~ /^knot-resolver-devel|knot-dns-devel|knot-resolver-testing|knot-resolver-odvr$/
      - $CI_COMMIT_TAG
Tomas Krizek's avatar
Tomas Krizek committed
564
  variables:
565
    OBS_REPO: knot-resolver-latest
Tomas Krizek's avatar
Tomas Krizek committed
566 567 568
    DISTROTEST_NAME: debian9
    DISTROTEST_REPO: Debian_9.0

Tomas Krizek's avatar
Tomas Krizek committed
569 570 571
obs:debian10:x86_64:
  <<: *distrotest
  variables:
572
    OBS_REPO: knot-resolver-latest
Tomas Krizek's avatar
Tomas Krizek committed
573 574 575
    DISTROTEST_NAME: debian10
    DISTROTEST_REPO: Debian_10

576
obs:fedora30:x86_64:
Tomas Krizek's avatar
Tomas Krizek committed
577 578
  <<: *distrotest
  variables:
579
    OBS_REPO: knot-resolver-latest
580 581
    DISTROTEST_NAME: fedora30
    DISTROTEST_REPO: Fedora_30
Tomas Krizek's avatar
Tomas Krizek committed
582

583
obs:fedora31:x86_64:
Tomas Krizek's avatar
Tomas Krizek committed
584 585
  <<: *distrotest
  variables:
586
    OBS_REPO: knot-resolver-latest
587 588
    DISTROTEST_NAME: fedora31
    DISTROTEST_REPO: Fedora_31
Tomas Krizek's avatar
Tomas Krizek committed
589 590 591 592

obs:leap15:x86_64:
  <<: *distrotest
  variables:
593
    OBS_REPO: knot-resolver-latest
Tomas Krizek's avatar
Tomas Krizek committed
594
    DISTROTEST_NAME: leap15
595
    DISTROTEST_REPO: openSUSE_Leap_15.1
Tomas Krizek's avatar
Tomas Krizek committed
596 597 598 599

obs:ubuntu1604:x86_64:
  <<: *distrotest
  variables:
600
    OBS_REPO: knot-resolver-latest
Tomas Krizek's avatar
Tomas Krizek committed
601 602 603 604 605
    DISTROTEST_NAME: ubuntu1604
    DISTROTEST_REPO: xUbuntu_16.04

obs:ubuntu1804:x86_64:
  <<: *distrotest
606 607 608 609
  only:
    variables:
      - $OBS_REPO =~ /^knot-resolver-devel|knot-dns-devel|knot-resolver-testing|knot-resolver-odvr$/
      - $CI_COMMIT_TAG
Tomas Krizek's avatar
Tomas Krizek committed
610
  variables:
611
    OBS_REPO: knot-resolver-latest
Tomas Krizek's avatar
Tomas Krizek committed
612 613 614
    DISTROTEST_NAME: ubuntu1804
    DISTROTEST_REPO: xUbuntu_18.04

615
obs:ubuntu1910:x86_64:
Tomas Krizek's avatar
Tomas Krizek committed
616 617
  <<: *distrotest
  variables:
618
    OBS_REPO: knot-resolver-latest
619 620
    DISTROTEST_NAME: ubuntu1910
    DISTROTEST_REPO: xUbuntu_19.10
Tomas Krizek's avatar
Tomas Krizek committed
621
# }}}