]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
GHA: adding quiche workflow
authorStefan Eissing <stefan@eissing.org>
Tue, 25 Jul 2023 13:38:42 +0000 (15:38 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 26 Jul 2023 16:19:30 +0000 (18:19 +0200)
- adding separate quiche workflow to also build nghttpx server for testing

Closes #11517

.github/workflows/quiche.yml [new file with mode: 0644]
tests/http/test_03_goaway.py
tests/http/test_14_auth.py

diff --git a/.github/workflows/quiche.yml b/.github/workflows/quiche.yml
new file mode 100644 (file)
index 0000000..a165eeb
--- /dev/null
@@ -0,0 +1,194 @@
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# SPDX-License-Identifier: curl
+
+name: quiche
+
+on:
+  push:
+    branches:
+    - master
+    - '*/ci'
+    paths-ignore:
+    - '**/*.md'
+    - '**/CMakeLists.txt'
+    - '.azure-pipelines.yml'
+    - '.circleci/**'
+    - '.cirrus.yml'
+    - 'appveyor.yml'
+    - 'CMake/**'
+    - 'packages/**'
+    - 'plan9/**'
+    - 'projects/**'
+    - 'winbuild/**'
+  pull_request:
+    branches:
+    - master
+    paths-ignore:
+    - '**/*.md'
+    - '**/CMakeLists.txt'
+    - '.azure-pipelines.yml'
+    - '.circleci/**'
+    - '.cirrus.yml'
+    - 'appveyor.yml'
+    - 'CMake/**'
+    - 'packages/**'
+    - 'plan9/**'
+    - 'projects/**'
+    - 'winbuild/**'
+
+concurrency:
+  # Hardcoded workflow filename as workflow name above is just Linux again
+  group: quiche-${{ github.event.pull_request.number || github.sha }}
+  cancel-in-progress: true
+
+permissions: {}
+
+env:
+  MAKEFLAGS: -j 3
+
+jobs:
+  autotools:
+    name: ${{ matrix.build.name }}
+    runs-on: 'ubuntu-latest'
+    timeout-minutes: 60
+    strategy:
+      fail-fast: false
+      matrix:
+        build:
+        - name: quiche
+          install: >-
+            libpsl-dev libbrotli-dev libzstd-dev zlib1g-dev libev-dev libc-ares-dev
+          openssl-version: 3.0.9+quic
+          nghttp3-version: v0.13.0
+          ngtcp2-version: v0.17.0
+          nghttp2-version: v1.55.1
+          quiche-version: 0.17.2
+          install_steps: pytest
+          configure: >-
+            LDFLAGS="-Wl,-rpath,/home/runner/quiche/target/release"
+            --with-openssl=/home/runner/quiche/quiche/deps/boringssl/src
+            --enable-debug
+            --with-quiche=/home/runner/quiche/target/release
+            --with-test-nghttpx="$HOME/nghttpx/bin/nghttpx"
+
+    steps:
+    - run: |
+        sudo apt-get update
+        sudo apt-get install libtool autoconf automake pkg-config stunnel4 ${{ matrix.build.install }}
+        sudo apt-get install apache2 apache2-dev
+      name: 'install prereqs and impacket, pytest, crypto'
+
+    - name: cache nghttpx
+      uses: actions/cache@v3
+      id: cache-nghttpx
+      env:
+        cache-name: cache-nghttpx
+      with:
+        path: /home/runner/nghttpx
+        key: ${{ runner.os }}-build-${{ env.cache-name }}-openssl-${{ matrix.build.openssl-version }}-nghttp3-${{ matrix.build.nghttp3-version }}-ngtcp2-${{ matrix.build.ngtcp2-version }}-nghttp2-${{ matrix.build.nghttp2-version }}
+
+    - if: steps.cache-nghttpx.outputs.cache-hit != 'true'
+      run: |
+        git clone --quiet --depth=1 -b openssl-${{ matrix.build.openssl-version }} https://github.com/quictls/openssl
+        cd openssl
+        ./config --prefix=$HOME/nghttpx --libdir=$HOME/nghttpx/lib
+        make -j1 install_sw
+      name: 'install quictls'
+
+    - if: steps.cache-nghttpx.outputs.cache-hit != 'true'
+      run: |
+        git clone --quiet --depth=1 -b ${{ matrix.build.nghttp3-version }} https://github.com/ngtcp2/nghttp3
+        cd nghttp3
+        autoreconf -fi
+        ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only
+        make install
+      name: 'install nghttp3'
+
+    - if: steps.cache-nghttpx.outputs.cache-hit != 'true'
+      run: |
+        git clone --quiet --depth=1 -b ${{ matrix.build.ngtcp2-version }} https://github.com/ngtcp2/ngtcp2
+        cd ngtcp2
+        autoreconf -fi
+        ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only --with-openssl
+        make install
+      name: 'install ngtcp2'
+
+    - if: steps.cache-nghttpx.outputs.cache-hit != 'true'
+      run: |
+        git clone --quiet --depth=1 -b ${{ matrix.build.nghttp2-version }} https://github.com/nghttp2/nghttp2
+        cd nghttp2
+        autoreconf -fi
+        ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-http3
+        make install
+      name: 'install nghttp2'
+
+    - name: cache quiche
+      uses: actions/cache@v3
+      id: cache-quiche
+      env:
+        cache-name: cache-quiche
+      with:
+        path: /home/runner/quiche
+        key: ${{ runner.os }}-build-${{ env.cache-name }}-quiche-${{ matrix.build.quiche-version }}
+
+    - if: steps.cache-quiche.outputs.cache-hit != 'true'
+      run: |
+        cd $HOME
+        git clone --quiet --depth=1 -b ${{ matrix.build.quiche-version }} --recursive https://github.com/cloudflare/quiche.git
+        cd quiche
+        #### Work-around https://github.com/curl/curl/issues/7927 #######
+        #### See https://github.com/alexcrichton/cmake-rs/issues/131 ####
+        sed -i -e 's/cmake = "0.1"/cmake = "=0.1.45"/' quiche/Cargo.toml
+
+        cargo build -v --package quiche --release --features ffi,pkg-config-meta,qlog --verbose
+        mkdir -v quiche/deps/boringssl/src/lib
+        ln -vnf $(find target/release -name libcrypto.a -o -name libssl.a) quiche/deps/boringssl/src/lib/
+
+        # include dir
+        # /home/runner/quiche/quiche/deps/boringssl/src/include
+        # lib dir
+        # /home/runner/quiche/quiche/deps/boringssl/src/lib
+      name: 'build quiche and boringssl'
+
+    - if: ${{ contains(matrix.build.install_steps, 'pytest') }}
+      run: |
+        sudo apt-get install apache2 apache2-dev libnghttp2-dev
+        git clone --quiet --depth=1 -b master https://github.com/icing/mod_h2
+        cd mod_h2
+        autoreconf -fi
+        ./configure
+        make
+        sudo make install
+      name: 'install apach2-dev and mod-h2'
+
+    - uses: actions/checkout@v3
+
+    - run: |
+        sudo python3 -m pip install -r tests/requirements.txt -r tests/http/requirements.txt
+      name: 'install python test prereqs'
+
+    - run: autoreconf -fi
+      name: 'autoreconf'
+
+    - run: ./configure ${{ matrix.build.configure }}
+      name: 'configure'
+
+    - run: make V=1
+      name: 'make'
+
+    - run: make V=1 examples
+      name: 'make examples'
+
+    - run: make V=1 -C tests
+      name: 'make tests'
+
+    - run: make V=1 test-ci
+      name: 'run tests'
+      env:
+        TFLAGS: "${{ matrix.build.tflags }}"
+
+    - run: pytest -v tests/http
+      name: 'run pytest'
+      env:
+        TFLAGS: "${{ matrix.build.tflags }}"
index 00fbce9a4b744f5fa1a056123eabdc933a588e69..34b8c21a7294f3e26cada3ecdbd357fbf4dd0288 100644 (file)
@@ -82,6 +82,8 @@ class TestGoAway:
         proto = 'h3'
         if proto == 'h3' and env.curl_uses_lib('msh3'):
             pytest.skip("msh3 stalls here")
+        if proto == 'h3' and env.curl_uses_lib('quiche'):
+            pytest.skip("does not work in CI, but locally for some reason")
         count = 3
         self.r = None
         def long_run():
index d962cedb3c9a277423663e8bf1b1ad4733fb8338..cbd2de70b3feab97aee5fbb82978229d09ac3f73 100644 (file)
@@ -102,6 +102,9 @@ class TestAuth:
     def test_14_05_basic_large_pw(self, env: Env, httpd, nghttpx, repeat, proto):
         if proto == 'h3' and not env.have_h3():
             pytest.skip("h3 not supported")
+        if proto == 'h3' and env.curl_uses_lib('quiche'):
+            # See <https://github.com/cloudflare/quiche/issues/1573>
+            pytest.skip("quiche has problems with large requests")
         # just large enought that nghttp2 will submit
         password = 'x' * (47 * 1024)
         fdata = os.path.join(env.gen_dir, 'data-10m')
@@ -118,7 +121,9 @@ class TestAuth:
     def test_14_06_basic_very_large_pw(self, env: Env, httpd, nghttpx, repeat, proto):
         if proto == 'h3' and not env.have_h3():
             pytest.skip("h3 not supported")
-        data='0123456789'
+        if proto == 'h3' and env.curl_uses_lib('quiche'):
+            # See <https://github.com/cloudflare/quiche/issues/1573>
+            pytest.skip("quiche has problems with large requests")
         password = 'x' * (64 * 1024)
         fdata = os.path.join(env.gen_dir, 'data-10m')
         curl = CurlClient(env=env)