5 description: "Do a shallow checkout of the repository"
8 name: Install git and openssh
9 command: apt-get update && apt-get -qq -y install openssh-client git
11 name: Store the keyid for the git repo
12 command: mkdir -p $HOME/.ssh && ssh-keyscan $(echo ${CIRCLE_REPOSITORY_URL} | sed 's,.*@\([^:]*\):.*,\1,') > $HOME/.ssh/known_hosts
17 if [ -n "$CIRCLE_PR_NUMBER" ]
19 echo === Checking out PR "$CIRCLE_PR_NUMBER" from "$CIRCLE_REPOSITORY_URL"
20 git clone --depth 1 $CIRCLE_REPOSITORY_URL /opt/project
22 git fetch --depth 1 origin +refs/pull/${CIRCLE_PR_NUMBER}/merge
23 git checkout -qf FETCH_HEAD
25 echo === Checking out branch "${CIRCLE_BRANCH}" from "$CIRCLE_REPOSITORY_URL"
26 git clone --depth 1 --branch $CIRCLE_BRANCH $CIRCLE_REPOSITORY_URL /opt/project
29 git --no-pager show -s
32 description: "Attach workspace to /opt and symlink checkout into home"
35 name: ensure ca-certificates is installed
36 command: apt-get update && apt-get -qq -y install ca-certificates
40 name: symlink checkout into home
41 command: rmdir ~/project && ln -s /opt/project ~/project
43 name: include $BASH_ENV for both interactive and non-interactive shells
44 command: echo '. $BASH_ENV' >> $HOME/.bashrc
47 description: install clang-8 from backports
50 name: add backports and install clang-8
52 echo 'deb http://deb.debian.org/debian buster-backports main' > /etc/apt/sources.list.d/backports.list
54 apt-get -qq -t buster-backports --no-install-recommends install clang-8 llvm-8
56 # FIXME: the build-essential wart below is misformatted intentionally to remind us to replace the remotebackend testing deps with Debian packages
58 description: Prepare the environment for auth regression tests
62 - install-clang-8 # for the symbolizer
64 name: Install test dependencies
66 apt-get -y -qq install \
70 build-essential libsqlite3-dev libzmq3-dev \
72 default-jre-headless \
83 name: Install jdnssectools
85 if [ ! -e $HOME/bin/jdnssec-verifyzone ]; then
86 apt-get install -qq -y wget
87 wget https://github.com/dblacka/jdnssec-tools/releases/download/0.14/jdnssec-tools-0.14.tar.gz
88 tar xfz jdnssec-tools-0.14.tar.gz -C $HOME
89 rm jdnssec-tools-0.14.tar.gz
91 echo 'export PATH=$HOME/jdnssec-tools-0.14/bin:$PATH' >> $BASH_ENV
93 name: Allow missing tools in verify-dnssec-zone
94 command: touch regression-tests/tests/verify-dnssec-zone/allow-missing
96 name: Start PowerDNS Recursor in the background
97 command: pdns_recursor
100 name: Set up authbind
102 touch /etc/authbind/byport/53
103 chmod 755 /etc/authbind/byport/53
106 description: Run one auth regression context
122 default: "/opt/pdns-auth/"
125 workdir: ~/project/regression-tests
126 name: Run << parameters.context >> tests
128 [ -e ./vars ] && . ./vars
131 for t in << parameters.skip >>
135 PDNS=<< parameters.prefix >>sbin/pdns_server \
136 PDNS2=<< parameters.prefix >>sbin/pdns_server \
137 SDIG=<< parameters.prefix >>bin/sdig \
138 NOTIFY=<< parameters.prefix >>bin/pdns_notify \
139 NSEC3DIG=<< parameters.prefix >>bin/nsec3dig \
140 SAXFR=<< parameters.prefix >>bin/saxfr \
141 ZONE2SQL=<< parameters.prefix >>bin/zone2sql \
142 ZONE2LDAP=<< parameters.prefix >>bin/zone2ldap \
143 PDNSUTIL=<< parameters.prefix >>bin/pdnsutil \
144 PDNSCONTROL=<< parameters.prefix >>bin/pdns_control \
145 RESOLVERIP=127.0.0.1 \
146 ./start-test-stop 5300 << parameters.context >>
148 condition: << parameters.doroot >>
151 workdir: ~/project/regression-tests.rootzone
152 name: Run << parameters.context >> tests for the root zone
154 [ -e ../regression-tests/vars ] && . ../regression-tests/vars
156 for t in << parameters.rootskip >>
160 PDNS=<< parameters.prefix >>sbin/pdns_server \
161 PDNS2=<< parameters.prefix >>sbin/pdns_server \
162 SDIG=<< parameters.prefix >>bin/sdig \
163 NOTIFY=<< parameters.prefix >>bin/pdns_notify \
164 NSEC3DIG=<< parameters.prefix >>bin/nsec3dig \
165 SAXFR=<< parameters.prefix >>bin/saxfr \
166 ZONE2SQL=<< parameters.prefix >>bin/zone2sql \
167 ZONE2LDAP=<< parameters.prefix >>bin/zone2ldap \
168 PDNSUTIL=<< parameters.prefix >>bin/pdnsutil \
169 PDNSCONTROL=<< parameters.prefix >>bin/pdns_control \
170 RESOLVERIP=127.0.0.1 \
171 ./start-test-stop 5300 << parameters.context >>
174 description: Install all libraries needed to run the auth
177 apt-get install -qq -y --no-install-recommends \
178 default-libmysqlclient-dev \
197 install-dnsdist-deps:
198 description: "Install all libraries needed for testing dnsdist"
200 - run: apt-get update
203 apt-get install -qq -y \
208 libcurl4-openssl-dev \
222 install-auth-dev-deps:
223 description: Install all packages needed to build the auth
225 - run: apt-get update
228 apt-get install -qq -y --no-install-recommends \
234 default-libmysqlclient-dev \
240 libcurl4-openssl-dev \
268 description: "Add the debian repo for the auth"
281 name: "Install dependencies"
282 command: "apt-get update && apt-get install -qq -y curl gnupg2"
284 name: "Install apt-keys"
286 if [ "<< parameters.version >>" = "master" ]; then
287 curl https://repo.powerdns.com/CBC8B383-pub.asc -o /etc/apt/trusted.gpg.d/CBC8B383-pub.asc
289 curl https://repo.powerdns.com/FD380FBB-pub.asc -o /etc/apt/trusted.gpg.d/FD380FBB-pub.asc
292 name: "Add repository"
294 echo 'deb [arch=amd64] http://repo.powerdns.com/<< parameters.distro >> << parameters.release >>-auth-<< parameters.version>> main' >> /etc/apt/sources.list.d/pdns.list
298 echo 'Package: pdns-*' > /etc/apt/preferences.d/pdns
299 echo 'Pin: origin repo.powerdns.com' >> /etc/apt/preferences.d/pdns
300 echo 'Pin-Priority: 600' >> /etc/apt/preferences.d/pdns
302 name: update apt cache
303 command: apt-get update
306 description: Install .ccache and set $PATH
310 command: apt-get update && apt-get -qq -y install ccache
312 name: Setup ccache in $PATH
313 command: echo 'export PATH=/usr/lib/ccache:$PATH' >> $BASH_ENV
316 description: Store the .ccache directory
323 key: ccache-cache-{{ arch }}-<< parameters.product >>-{{ .Branch }}
327 restore-cache-ccache:
328 description: Restore the .ccache directory
336 name: ensure ca-certificates is installed
337 command: apt-get update && apt-get -qq -y install ca-certificates
340 - ccache-cache-{{ arch }}-<< parameters.product >>-{{ .Branch }}
341 - ccache-cache-{{ arch }}-<< parameters.product >>-
345 resource_class: small
348 - image: debian:buster
350 username: powerdnsreadonly
351 password: $DOCKERHUB_PASSWORD
355 - persist_to_workspace:
362 - image: debian:buster
364 username: powerdnsreadonly
365 password: $DOCKERHUB_PASSWORD
367 UBSAN_OPTIONS: 'print_stacktrace=1:halt_on_error=1'
368 ASAN_OPTIONS: detect_leaks=0
371 - install-auth-dev-deps
373 - restore-cache-ccache:
377 command: BUILDER_VERSION=0.0.0-git1 autoreconf -vfi
383 CFLAGS="-O1 -Werror=vla -Werror=shadow -Wformat=2 -Werror=format-security -Werror=string-plus-int" \
384 CXXFLAGS="-O1 -Werror=vla -Werror=shadow -Wformat=2 -Werror=format-security -Werror=string-plus-int -Wp,-D_GLIBCXX_ASSERTIONS" \
386 --enable-option-checking=fatal \
387 --with-modules='bind geoip gmysql godbc gpgsql gsqlite3 ldap lmdb lua2 pipe remote tinydns' \
390 --enable-unit-tests \
391 --enable-backend-unit-tests \
392 --enable-fuzz-targets \
393 --enable-experimental-pkcs11 \
394 --enable-remotebackend-zeromq \
397 --prefix=/opt/pdns-auth \
407 name: Install the binaries
408 command: make install
409 - persist_to_workspace:
414 test-auth-regress-bind:
415 resource_class: small
418 - image: debian:buster
420 username: powerdnsreadonly
421 password: $DOCKERHUB_PASSWORD
423 UBSAN_OPTIONS: 'print_stacktrace=1:halt_on_error=1'
424 ASAN_OPTIONS: detect_leaks=0
425 - image: mysql:5 # for the hybrid test
427 MYSQL_ALLOW_EMPTY_PASSWORD: 1
429 username: powerdnsreadonly
430 password: $DOCKERHUB_PASSWORD
434 command: apt-get install -qq -y p11-kit softhsm2
436 context: bind-dnssec-pkcs11
438 command: apt-get install -qq -y default-mysql-client
441 cat >> ~/.my.cnf \<<- __EOF__
446 name: Set up mysql client lib to force TCP
447 command: echo 'export GMYSQLHOST=127.0.0.1' > ./vars
448 workdir: ~/project/regression-tests
450 context: bind-hybrid-nsec3