Skip to content
Snippets Groups Projects
.gitlab-ci.yml 10.5 KiB
Newer Older
variables:
  DEBIAN_FRONTEND: noninteractive
  DOCKER_DRIVER: overlay2
  GIT_SUBMODULE_STRATEGY: recursive
Tomas Krizek's avatar
Tomas Krizek committed
  DISTROTEST_PRIORITY: 6
Tomas Krizek's avatar
Tomas Krizek committed
  - deploy-test
.image: &image
  stage: image
  before_script:
    - docker info
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
    - docker build --no-cache -t "$IMAGE_TAG" "scripts/docker/$IMAGE_NAME"
    - docker push "$IMAGE_TAG"
    - dind
Tomas Krizek's avatar
Tomas Krizek committed
    variables:
      - $SCHEDULE_TYPE == "weekly"
docker:knot-dns:debian:
  <<: *image
  variables:
    IMAGE_NAME: debian:latest
    IMAGE_TAG: $CI_REGISTRY_IMAGE/$IMAGE_NAME
docker:knot-dns:debian-arm64:
  <<: *image
  variables:
    IMAGE_NAME: debian:latest
    IMAGE_TAG: $CI_REGISTRY_IMAGE/$IMAGE_NAME-arm64
  tags:
docker:knot-dns:debian:unstable:
  <<: *image
  variables:
    IMAGE_NAME: debian:unstable
    IMAGE_TAG: $CI_REGISTRY_IMAGE/$IMAGE_NAME
  <<: *image
  variables:
    IMAGE_NAME: ubuntu:latest
    IMAGE_TAG: $CI_REGISTRY_IMAGE/$IMAGE_NAME
docker:knot-dns:rocky:
  <<: *image
  variables:
    IMAGE_NAME: rocky:latest
    IMAGE_TAG: $CI_REGISTRY_IMAGE/$IMAGE_NAME

docker:knot-dns:fedora:
  <<: *image
  variables:
    IMAGE_NAME: fedora:latest
    IMAGE_TAG: $CI_REGISTRY_IMAGE/$IMAGE_NAME
.fedora_latest: &fedora_latest
  image: "$CI_REGISTRY/knot/knot-dns/fedora:latest"
  except:
    - schedules

.rocky_latest: &rocky_latest
  image: "$CI_REGISTRY/knot/knot-dns/rocky:latest"
  image: "$CI_REGISTRY/knot/knot-dns/debian:latest"
  tags:
    - docker
    - linux
    - amd64
  except:
    - schedules
.debian_stable_arm64: &debian_stable_arm64
  image: "$CI_REGISTRY/knot/knot-dns/debian:latest-arm64"
  tags:
    - docker
    - linux
    - arm64
  except:
    - schedules

.debian_unstable: &debian_unstable
  image: "$CI_REGISTRY/knot/knot-dns/debian:unstable"
  tags:
    - docker
    - linux
    - amd64
  except:
    - schedules
  image: "$CI_REGISTRY/knot/knot-dns/ubuntu:latest"
  except:
    - schedules
    - ./configure --disable-fastparser $EXTRA_CONFIGURE || ( cat config.log && exit 1 )
    - make -k all V=1
    expire_in: '1 hour'
  before_script:
    - find -exec touch -t $(date +%m%d%H%M) {} \;
    - make -k check V=1
  except:
    - schedules
.pkg_symbols: &pkg_symbols
  stage: test
  script:
    - ln -s distro/pkg/deb debian
    - sed -i "s/{{ version }}/99/g" distro/pkg/deb/changelog
    - sed -i "s/{{ release }}/1/g" distro/pkg/deb/changelog
    - dpkg-gensymbols -c4 -esrc/.libs/$LIB_NAME.so.$LIB_ABI -P. -p$LIB_NAME$LIB_ABI
  allow_failure: true
  except:
  only:
    - schedules
  dependencies:
    - build:debian:amd64

build:fedora:amd64:
  <<: *fedora_latest
  <<: *build_job

test:fedora:amd64:
  <<: *fedora_latest
  <<: *test_job
  dependencies:
    - build:fedora:amd64

build:rocky:amd64:
  <<: *rocky_latest
test:rocky:amd64:
  <<: *rocky_latest
    - build:rocky:amd64
  <<: *test_job
  dependencies:
    - build:ubuntu:amd64
  variables:
    EXTRA_CONFIGURE: --enable-xdp=yes
  <<: *build_job
  except:  # run on schedules as well, for debian:symbols tests
  <<: *test_job
  dependencies:
build:debian:arm64:
  <<: *debian_stable_arm64
  <<: *build_job

test:debian:arm64:
  <<: *debian_stable_arm64
  <<: *test_job
  dependencies:
    - build:debian:arm64

pkg:debian:symbols:libknot:
  variables:
    LIB_NAME: libknot
  <<: *debian_stable
  <<: *pkg_symbols

pkg:debian:symbols:libdnssec:
  variables:
    LIB_NAME: libdnssec
  <<: *debian_stable
  <<: *pkg_symbols

pkg:debian:symbols:libzscanner:
  variables:
    LIB_NAME: libzscanner
  <<: *debian_stable
  <<: *pkg_symbols

build:debian:unstable:amd64:
  <<: *debian_unstable
  <<: *build_job

test:debian:unstable:amd64:
  <<: *debian_unstable
  <<: *test_job
  dependencies:
    - build:debian:unstable:amd64

build:debian:unstable:amd64:asan:
  variables:
    CFLAGS: "-fsanitize=address -g -O2 -fno-omit-frame-pointer"
    LDFLAGS: "-fsanitize=address"
    LSAN_OPTIONS: verbosity=1:log_threads=1
  allow_failure: true
  <<: *debian_unstable
  <<: *build_job

test:debian:unstable:amd64:asan:
  variables:
    LDFLAGS: "-fsanitize=address"
    LSAN_OPTIONS: verbosity=1:log_threads=1
  allow_failure: true
  <<: *debian_unstable
  <<: *test_job
  dependencies:
    - build:debian:unstable:amd64:asan

build:debian:unstable:amd64:ubsan:
  variables:
    CFLAGS: "-fsanitize=undefined -fno-sanitize=nonnull-attribute -g -O2"
    LDFLAGS: "-fsanitize=undefined"
  allow_failure: true
  <<: *debian_unstable
  <<: *build_job

test:debian:unstable:amd64:ubsan:
  variables:
    CFLAGS: "-fsanitize=undefined -fno-sanitize=nonnull-attribute -g -O2"
    LDFLAGS: "-fsanitize=undefined"
    UBSAN_OPTIONS: print_stacktrace=1
  allow_failure: true
  <<: *debian_unstable
  <<: *test_job
  dependencies:
    - build:debian:unstable:amd64:ubsan

  script:
    - autoreconf -fi
    - mkdir _build
    - cd _build
    - ../configure
    - make distcheck V=1
Tomas Krizek's avatar
Tomas Krizek committed
    - master
    - tags
    - triggers
    - schedules
  except: []
Tomas Krizek's avatar
Tomas Krizek committed
obs:trigger:
Tomas Krizek's avatar
Tomas Krizek committed
  <<: *debian_stable
  stage: deploy
  only:
Tomas Krizek's avatar
Tomas Krizek committed
    variables:
Tomas Krizek's avatar
Tomas Krizek committed
      - $OBS_REPO
  except: []
Tomas Krizek's avatar
Tomas Krizek committed
  dependencies:
    - build:archive
Tomas Krizek's avatar
Tomas Krizek committed
  environment:
    name: OBS/$OBS_REPO
    url: https://build.opensuse.org/package/show/home:CZ-NIC:$OBS_REPO/knot
  tags:
    - respdiff
Tomas Krizek's avatar
Tomas Krizek committed
  script:
    - mv _build/*.tar.xz ./
    - scripts/make-distrofiles.sh
Tomas Krizek's avatar
Tomas Krizek committed
    - scripts/build-in-obs.sh $OBS_REPO
build:documentation:
  <<: *debian_stable
  stage: documentation
  only:
    - tags
    - triggers
  dependencies:
    - build:debian:amd64
    - make -C doc html singlehtml pdf epub V=1
  artifacts:
    paths:
      - doc/_build/html/
      - doc/_build/singlehtml/
      - doc/_build/latex/KnotDNS.pdf
      - doc/_build/epub/KnotDNS.epub
Tomas Krizek's avatar
Tomas Krizek committed
.deploytest: &deploytest
  stage: deploy-test
  only:
    variables:
      - $OBS_REPO =~ /^knot-dns-devel|knot-dns-latest|knot-dns-testing$/
Tomas Krizek's avatar
Tomas Krizek committed
  when: delayed
  start_in: 3 minutes  # give OBS build some time
  tags:
    - respdiff

obs:build:all:
  <<: *deploytest
  allow_failure: true
Tomas Krizek's avatar
Tomas Krizek committed
  script:
    - "osc results home:CZ-NIC:$OBS_REPO knot -w"
    - version=$(sed 's/^v//' <(git describe --exact-match HEAD || git rev-parse --short HEAD) )
    - > # check version only for one (reliable) repo to avoid false negatives
      ! osc ls -b home:CZ-NIC:$OBS_REPO knot Debian_9.0 x86_64 | \
        grep -E '(rpm|deb|tar\.xz)$' | grep -v $version || \
        (echo "ERROR: version mismatch"; exit 1)
    - >
      ! osc results home:CZ-NIC:$OBS_REPO knot --csv | \
        grep -Ev 'disabled|excluded|Rawhide' | grep -v 'succeeded' -q || \
        (echo "ERROR: build(s) failed"; exit 1)

.distrotest: &distrotest
  <<: *deploytest
  # Description of the distrotest script workflow:
  # 1. wait for OBS package build to complete
  # 2. check the OBS build suceeded
  # 3. set up some variables, dir names etc.
  # 4. create a symlink with predictable name to export artifacts afterwards
  # 5. create an HTCondor job and submit it to a HTCondor cluster
  # 6. check exit code from condor, optionally display one of the logs and end the job with same exit code
Tomas Krizek's avatar
Tomas Krizek committed
  script:
    - "osc results home:CZ-NIC:$OBS_REPO knot -a x86_64 -r $DISTROTEST_REPO -w"
    - >
      osc results home:CZ-NIC:$OBS_REPO knot -a x86_64 -r $DISTROTEST_REPO --csv | grep 'succeeded|$' -q || \
        (echo "ERROR: build failed"; exit 1)
    - export LABEL="gl$(date +%s)_$OBS_REPO"
    - 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
        "$(git rev-parse --short HEAD)" -l $LABEL -t distrotest.$DISTROTEST_NAME
        --package knot-dns --obs-repo $OBS_REPO)
    - export EXITCODE=$(cat $TESTDIR/j*_exitcode)
    - if [[ "$EXITCODE" != "0" ]]; then cat $TESTDIR/j*_{vagrant.log.txt,stdout.txt}; fi
    - exit $EXITCODE
  after_script:
    - 'cp -t . distrotest_commitdir/distrotest.$DISTROTEST_NAME/j* ||:'
  artifacts:
    when: always
    expire_in: 1 week
    paths:
      - ./j*
  retry:
    max: 1
    when:
      - script_failure
Tomas Krizek's avatar
Tomas Krizek committed

obs:centos7:x86_64:
  <<: *distrotest
  variables:
    DISTROTEST_NAME: centos7
    DISTROTEST_REPO: CentOS_7_EPEL

obs:rocky8:x86_64:
  <<: *distrotest
  variables:
    DISTROTEST_NAME: rocky8
    DISTROTEST_REPO: CentOS_8_EPEL

obs:debian10:x86_64:
  <<: *distrotest
  variables:
    DISTROTEST_NAME: debian10
    DISTROTEST_REPO: Debian_10

obs:debian11:x86_64:
  <<: *distrotest
  variables:
    DISTROTEST_NAME: debian11
    DISTROTEST_REPO: Debian_11

obs:fedora34:x86_64:
  <<: *distrotest
  variables:
    DISTROTEST_NAME: fedora34
    DISTROTEST_REPO: Fedora_34
obs:fedora35:x86_64:
  <<: *distrotest
  variables:
    DISTROTEST_NAME: fedora35
    DISTROTEST_REPO: Fedora_35
Tomas Krizek's avatar
Tomas Krizek committed
obs:leap15:x86_64:
  <<: *distrotest
  variables:
    DISTROTEST_NAME: leap15
    DISTROTEST_REPO: openSUSE_Leap_15.3
Tomas Krizek's avatar
Tomas Krizek committed

obs:ubuntu1804:x86_64:
  <<: *distrotest
  variables:
    DISTROTEST_NAME: ubuntu1804
    DISTROTEST_REPO: xUbuntu_18.04

obs:ubuntu2004:x86_64:
Tomas Krizek's avatar
Tomas Krizek committed
  <<: *distrotest
  variables:
    DISTROTEST_NAME: ubuntu2004
    DISTROTEST_REPO: xUbuntu_20.04
obs:ubuntu2110:x86_64:
  <<: *distrotest
  variables:
    DISTROTEST_NAME: ubuntu2110
    DISTROTEST_REPO: xUbuntu_21.10