build-recursor:
name: build recursor
runs-on: ubuntu-20.04
+ strategy:
+ matrix:
+ sanitizers: [ubsan+asan]
env:
UBSAN_OPTIONS: "print_stacktrace=1:halt_on_error=1:suppressions=${{ github.workspace }}/build-scripts/UBSan.supp"
ASAN_OPTIONS: detect_leaks=0
+ SANITIZERS: ${{ matrix.sanitizers }}
defaults:
run:
working-directory: ./pdns/recursordist/
uses: actions/cache@v2
with:
path: ~/.ccache
- key: recursor-ccache-${{ steps.get-stamp.outputs.stamp }}
- restore-keys: recursor-ccache-
+ key: recursor-${{ matrix.sanitizers }}-ccache-${{ steps.get-stamp.outputs.stamp }}
+ restore-keys: recursor-${{ matrix.sanitizers }}-ccache-
- run: ../../build-scripts/gh-actions-setup-inv # this runs apt update+upgrade
- run: inv apt-fresh
- run: inv install-clang
- name: Store the binaries
uses: actions/upload-artifact@v2 # this takes 30 seconds, maybe we want to tar
with:
- name: pdns-recursor
+ name: pdns-recursor-${{ matrix.sanitizers }}
path: /opt/pdns-recursor
retention-days: 1
test-recursor-api:
needs: build-recursor
runs-on: ubuntu-20.04
+ strategy:
+ matrix:
+ sanitizers: [ubsan+asan]
env:
UBSAN_OPTIONS: "print_stacktrace=1:halt_on_error=1:suppressions=${{ github.workspace }}/build-scripts/UBSan.supp"
ASAN_OPTIONS: detect_leaks=0
+ TSAN_OPTIONS: "halt_on_error=1:suppressions=${{ github.workspace }}/pdns/recursordist/recursor-tsan.supp"
steps:
- uses: actions/checkout@v2.3.4
with:
- name: Fetch the binaries
uses: actions/download-artifact@v2
with:
- name: pdns-recursor
+ name: pdns-recursor-${{ matrix.sanitizers }}
path: /opt/pdns-recursor
- run: build-scripts/gh-actions-setup-inv # this runs apt update+upgrade
- run: inv add-auth-repo # FIXME: do we need this for rec API testing?
test-recursor-regression:
needs: build-recursor
runs-on: ubuntu-20.04
+ strategy:
+ matrix:
+ sanitizers: [ubsan+asan]
env:
UBSAN_OPTIONS: 'print_stacktrace=1:halt_on_error=1:suppressions=/home/runner/work/pdns/pdns/build-scripts/UBSan.supp'
ASAN_OPTIONS: detect_leaks=0
+ TSAN_OPTIONS: "halt_on_error=1:suppressions=${{ github.workspace }}/pdns/recursordist/recursor-tsan.supp"
steps:
- uses: actions/checkout@v2.3.4
with:
- name: Fetch the binaries
uses: actions/download-artifact@v2
with:
- name: pdns-recursor
+ name: pdns-recursor-${{ matrix.sanitizers }}
path: /opt/pdns-recursor
- run: build-scripts/gh-actions-setup-inv # this runs apt update+upgrade
- run: inv add-auth-repo
runs-on: ubuntu-20.04
strategy:
matrix:
+ sanitizers: [ubsan+asan]
threads: [1, 2, 3, 4, 8, 16]
mthreads: [2048, 4096]
shards: [1, 2, 1028]
env:
UBSAN_OPTIONS: 'print_stacktrace=1:halt_on_error=1:suppressions=/home/runner/work/pdns/pdns/build-scripts/UBSan.supp'
ASAN_OPTIONS: detect_leaks=0
+ TSAN_OPTIONS: "halt_on_error=1:suppressions=${{ github.workspace }}/pdns/recursordist/recursor-tsan.supp"
steps:
- uses: actions/checkout@v2.3.4
with:
- name: Fetch the binaries
uses: actions/download-artifact@v2
with:
- name: pdns-recursor
+ name: pdns-recursor-${{ matrix.sanitizers }}
path: /opt/pdns-recursor
- run: build-scripts/gh-actions-setup-inv # this runs apt update+upgrade
- run: inv install-clang-runtime
raise UnexpectedExit(res)
@task
def ci_rec_configure(c):
+ sanitizers = ' '.join('--enable-'+x for x in os.getenv('SANITIZERS').split('+'))
res = c.run(''' CFLAGS="-O1 -Werror=vla -Werror=shadow -Wformat=2 -Werror=format-security -Werror=string-plus-int" \
CXXFLAGS="-O1 -Werror=vla -Werror=shadow -Wformat=2 -Werror=format-security -Werror=string-plus-int -Wp,-D_GLIBCXX_ASSERTIONS" \
./configure \
--with-lua=luajit \
--with-libcap \
--with-net-snmp \
- --enable-dns-over-tls \
- --enable-asan \
- --enable-ubsan''', warn=True)
+ --enable-dns-over-tls ''' + sanitizers, warn=True)
if res.exited != 0:
c.run('cat config.log')
raise UnexpectedExit(res)