]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
build-and-test-all: Build Quiche, and enable DoQ for dnsdist
authorRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 20 Sep 2023 11:55:54 +0000 (13:55 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 9 Oct 2023 11:36:49 +0000 (13:36 +0200)
.github/workflows/build-and-test-all.yml
tasks.py

index 6e25bc0d127d418e389fcb24bf1edd575c69b89f..b5eb3772e5274caaf3822c8bf741165bb039c437 100644 (file)
@@ -236,6 +236,10 @@ jobs:
           path: ~/.ccache
           key: dnsdist-${{ matrix.features }}-${{ matrix.sanitizers }}-ccache-${{ steps.get-stamp.outputs.stamp }}
           restore-keys: dnsdist-${{ matrix.features }}-${{ matrix.sanitizers }}-ccache-
+      - run: inv ci-install-rust ${{ env.REPO_HOME }}
+        working-directory: ./pdns/dnsdistdist/
+      - run: inv ci-build-and-install-quiche
+        working-directory: ./pdns/dnsdistdist/
       - run: inv ci-autoconf
         working-directory: ./pdns/dnsdistdist/
       - run: inv ci-dnsdist-configure ${{ matrix.features }}
index 97b73352478f8fc0f7dd425717b110d46b662ec6..8846c3052fb6b24c9389df266c5b173e4cd7f620 100644 (file)
--- a/tasks.py
+++ b/tasks.py
@@ -9,6 +9,8 @@ auth_backend_ip_addr = os.getenv('AUTH_BACKEND_IP_ADDR', '127.0.0.1')
 
 clang_version = os.getenv('CLANG_VERSION', '13')
 rust_version = 'rust-1.72.0-x86_64-unknown-linux-gnu'
+quiche_version = '0.18.0'
+quiche_hash = 'eb242a14c4d801a90b57b6021dd29f7a62099f3a4d7a7ba889e105f8328e6c1f'
 
 all_build_deps = [
     'ccache',
@@ -490,6 +492,7 @@ def ci_dnsdist_configure(c, features):
                       --enable-dnscrypt \
                       --enable-dns-over-tls \
                       --enable-dns-over-https \
+                      --enable-dns-over-quic \
                       --enable-systemd \
                       --prefix=/opt/dnsdist \
                       --with-gnutls \
@@ -885,6 +888,28 @@ def coverity_upload(c, email, project, tarball):
             --form description="master build" \
             https://scan.coverity.com/builds?project={project}', hide=True)
 
+@task
+def ci_build_and_install_quiche(c):
+    # we have to pass -L because GitHub will do a redirect, sadly
+    c.run(f'curl -L -o quiche-{quiche_version}.tar.gz https://github.com/cloudflare/quiche/archive/{quiche_version}.tar.gz')
+    # Line below should echo two spaces between digest and name
+    c.run(f'echo {quiche_hash}"  "quiche-{quiche_version}.tar.gz | sha256sum -c -')
+    c.run(f'tar xf quiche-{quiche_version}.tar.gz')
+    with c.cd(f'quiche-{quiche_version}'):
+        c.run('cargo build --release --no-default-features --features ffi,pkg-config-meta,qlog,boringssl-boring-crate --package quiche')
+        c.run('ls quiche/include/quiche.h target/release/libquiche.a /usr/include /usr/lib /usr/lib/pkgconfig')
+        # cannot use c.sudo() inside a cd() context, see https://github.com/pyinvoke/invoke/issues/687
+        c.run('sudo install -Dm644 quiche/include/quiche.h /usr/include')
+        c.run('sudo install -Dm644 target/release/libquiche.a /usr/lib')
+        c.run("""sudo install -Dm644 /dev/stdin /usr/lib/pkgconfig/quiche.pc <<PC
+# quiche
+Name: quiche
+Description: quiche library
+URL: https://github.com/cloudflare/quiche
+Version: $pkgver
+Libs: -lquiche
+PC""")
+
 # this is run always
 def setup():
     if '/usr/lib/ccache' not in os.environ['PATH']: