diff --git a/.github/workflows/ngtcp2-linux.yml b/.github/workflows/ngtcp2-linux.yml index 418cba3dea..18da849bda 100644 --- a/.github/workflows/ngtcp2-linux.yml +++ b/.github/workflows/ngtcp2-linux.yml @@ -61,8 +61,199 @@ env: mod_h2-version: 2.0.27 jobs: + setup: + runs-on: ubuntu-latest + outputs: + wolfssl-version: ${{ steps.wolfssl-version.outputs.result }} + + steps: + - id: wolfssl-version + uses: actions/github-script@v7 + with: + result-encoding: string + script: | + let version = '${{ env.wolfssl-version }}' + + if (version != 'master') { + return version + } + + let { data: commits } = await github.rest.repos.listCommits({ + owner: 'wolfSSL', + repo: 'wolfssl', + }) + + return commits[0].sha + + build-cache: + needs: + - setup + runs-on: ubuntu-latest + + steps: + - name: cache quictls + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 + id: cache-quictls-no-deprecated + env: + cache-name: cache-quictls-no-deprecated + with: + path: /home/runner/quictls/build + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.quictls-version }} + + - name: cache gnutls + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 + id: cache-gnutls + env: + cache-name: cache-gnutls + with: + path: /home/runner/gnutls/build + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.gnutls-version }} + + - name: cache wolfssl + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 + id: cache-wolfssl + env: + cache-name: cache-wolfssl + wolfssl-version: ${{ needs.setup.outputs.wolfssl-version }} + with: + path: /home/runner/wolfssl/build + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.wolfssl-version }} + + - name: cache nghttp3 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 + id: cache-nghttp3 + env: + cache-name: cache-nghttp3 + with: + path: /home/runner/nghttp3/build + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.nghttp3-version }} + + - name: cache ngtcp2 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 + id: cache-ngtcp2 + env: + cache-name: cache-ngtcp2 + with: + path: /home/runner/ngtcp2/build + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.ngtcp2-version }} + + - name: cache nghttp2 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 + id: cache-nghttp2 + env: + cache-name: cache-nghttp2 + with: + path: /home/runner/nghttp2/build + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.nghttp2-version }} + + - id: settings + if: | + steps.cache-quictls.outputs.cache-hit != 'true' || + steps.cache-gnutls.outputs.cache-hit != 'true' || + steps.cache-wolfssl.outputs.cache-hit != 'true' || + steps.cache-nghttp3.outputs.cache-hit != 'true' || + steps.cache-ngtcp2.outputs.cache-hit != 'true' || + steps.cache-nghttp2.outputs.cache-hit != 'true' + run: | + echo 'needs-build=true' >> $GITHUB_OUTPUT + + - name: install build prerequisites + if: steps.settings.outputs.needs-build == 'true' + run: | + sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list + sudo apt-get update + sudo apt-get install libtool autoconf automake pkg-config \ + libpsl-dev libbrotli-dev zlib1g-dev libev-dev libc-ares-dev \ + nettle-dev libp11-kit-dev libtspi-dev libunistring-dev libtasn1-bin \ + libtasn1-6-dev libidn2-0-dev libtss2-dev dns-root-data \ + autopoint libev-dev \ + apache2 apache2-dev libnghttp2-dev + echo 'CC=gcc-12' >> $GITHUB_ENV + echo 'CXX=g++-12' >> $GITHUB_ENV + + - if: steps.cache-quictls-no-deprecated.outputs.cache-hit != 'true' + run: | + cd $HOME + git clone --quiet --depth=1 -b openssl-${{ env.quictls-version }} https://github.com/quictls/openssl quictls + cd quictls + ./config no-deprecated --prefix=$PWD/build --libdir=$PWD/build/lib + make + make -j1 install_sw + name: 'build quictls' + + - if: steps.cache-gnutls.outputs.cache-hit != 'true' + run: | + cd $HOME + git clone --quiet --depth=1 -b ${{ env.gnutls-version }} https://github.com/gnutls/gnutls.git + cd gnutls + ./bootstrap + ./configure --disable-dependency-tracking --prefix=$PWD/build \ + LDFLAGS="-Wl,-rpath,$PWD/build/lib -L$PWD/build/lib" \ + --with-included-libtasn1 --with-included-unistring \ + --disable-guile --disable-doc --disable-tests --disable-tools + make + make install + name: 'build gnutls' + + - if: steps.cache-wolfssl.outputs.cache-hit != 'true' + env: + wolfssl-version: ${{ needs.setup.outputs.wolfssl-version }} + run: | + cd $HOME + mkdir wolfssl + cd wolfssl + git init + git remote add origin https://github.com/wolfSSL/wolfssl.git + git fetch origin --depth=1 ${{ env.wolfssl-version }} + git checkout ${{ env.wolfssl-version }} + ./autogen.sh + ./configure --disable-dependency-tracking --enable-all --enable-quic --prefix=$PWD/build + make + make install + name: 'build wolfssl' + + - if: steps.cache-nghttp3.outputs.cache-hit != 'true' + run: | + cd $HOME + git clone --quiet --depth=1 -b v${{ env.nghttp3-version }} https://github.com/ngtcp2/nghttp3 + cd nghttp3 + git submodule update --init + autoreconf -fi + ./configure --disable-dependency-tracking --prefix=$PWD/build PKG_CONFIG_PATH="$PWD/build/lib/pkgconfig" --enable-lib-only + make + make install + name: 'build nghttp3' + + - if: steps.cache-ngtcp2.outputs.cache-hit != 'true' + run: | + cd $HOME + git clone --quiet --depth=1 -b v${{ env.ngtcp2-version }} https://github.com/ngtcp2/ngtcp2 + cd ngtcp2 + autoreconf -fi + ./configure --disable-dependency-tracking --prefix=$PWD/build \ + PKG_CONFIG_PATH="$PWD/build/lib/pkgconfig:$HOME/quictls/build/lib/pkgconfig:$HOME/gnutls/build/lib/pkgconfig:$HOME/wolfssl/build/lib/pkgconfig:$HOME/nghttp3/build/lib/pkgconfig" \ + --enable-lib-only --with-openssl --with-gnutls --with-wolfssl + make install + name: 'build ngtcp2' + + - if: steps.cache-nghttp2.outputs.cache-hit != 'true' + run: | + cd $HOME + git clone --quiet --depth=1 -b v${{ env.nghttp2-version }} https://github.com/nghttp2/nghttp2 + cd nghttp2 + autoreconf -fi + ./configure --disable-dependency-tracking --prefix=$PWD/build \ + PKG_CONFIG_PATH="$HOME/build/lib/pkgconfig:$HOME/quictls/build/lib/pkgconfig:$HOME/nghttp3/build/lib/pkgconfig:$HOME/ngtcp2/build/lib/pkgconfig" \ + LDFLAGS="-Wl,-rpath,$HOME/quictls/build/lib" \ + --enable-http3 + make install + name: 'build nghttp2' + autotools: name: ${{ matrix.build.name }} + needs: + - setup + - build-cache runs-on: 'ubuntu-latest' timeout-minutes: 60 strategy: @@ -71,22 +262,22 @@ jobs: build: - name: quictls configure: >- - PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" LDFLAGS="-Wl,-rpath,$HOME/nghttpx/lib" - --with-ngtcp2=$HOME/nghttpx --enable-warnings --enable-werror --enable-debug --disable-ntlm - --with-test-nghttpx="$HOME/nghttpx/bin/nghttpx" - --with-openssl=$HOME/nghttpx + PKG_CONFIG_PATH="$HOME/quictls/build/lib/pkgconfig:$HOME/nghttp3/build/lib/pkgconfig:$HOME/ngtcp2/build/lib/pkgconfig:$HOME/nghttp2/build/lib/pkgconfig" LDFLAGS="-Wl,-rpath,$HOME/quictls/build/lib" + --with-ngtcp2=$HOME/ngtcp2/build --enable-warnings --enable-werror --enable-debug --disable-ntlm + --with-test-nghttpx="$HOME/nghttp2/build/bin/nghttpx" + --with-openssl=$HOME/quictls/build - name: gnutls configure: >- - PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" LDFLAGS="-Wl,-rpath,$HOME/nghttpx/lib" - --with-ngtcp2=$HOME/nghttpx --enable-warnings --enable-werror --enable-debug - --with-test-nghttpx="$HOME/nghttpx/bin/nghttpx" - --with-gnutls=$HOME/nghttpx + PKG_CONFIG_PATH="$HOME/gnutls/build/lib/pkgconfig:$HOME/nghttp3/build/lib/pkgconfig:$HOME/ngtcp2/build/lib/pkgconfig:$HOME/nghttp2/build/lib/pkgconfig" LDFLAGS="-Wl,-rpath,$HOME/gnutls/build/lib" + --with-ngtcp2=$HOME/ngtcp2/build --enable-warnings --enable-werror --enable-debug + --with-test-nghttpx="$HOME/nghttp2/build/bin/nghttpx" + --with-gnutls=$HOME/gnutls/build - name: wolfssl configure: >- - PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" LDFLAGS="-Wl,-rpath,$HOME/nghttpx/lib" - --with-ngtcp2=$HOME/nghttpx --enable-warnings --enable-werror --enable-debug - --with-test-nghttpx="$HOME/nghttpx/bin/nghttpx" - --with-wolfssl=$HOME/nghttpx + PKG_CONFIG_PATH="$HOME/wolfssl/build/lib/pkgconfig:$HOME/nghttp3/build/lib/pkgconfig:$HOME/ngtcp2/build/lib/pkgconfig:$HOME/nghttp2/build/lib/pkgconfig" LDFLAGS="-Wl,-rpath,$HOME/wolfssl/build/lib" + --with-ngtcp2=$HOME/ngtcp2/build --enable-warnings --enable-werror --enable-debug + --with-test-nghttpx="$HOME/nghttp2/build/bin/nghttpx" + --with-wolfssl=$HOME/wolfssl/build steps: - run: | @@ -108,23 +299,9 @@ jobs: env: cache-name: cache-quictls-no-deprecated with: - path: /home/runner/quictls + path: /home/runner/quictls/build key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.quictls-version }} - - - if: steps.cache-quictls-no-deprecated.outputs.cache-hit != 'true' - run: | - cd $HOME - git clone --quiet --depth=1 -b openssl-${{ env.quictls-version }} https://github.com/quictls/openssl quictls - cd quictls - ./config no-deprecated --prefix=$HOME/nghttpx --libdir=$HOME/nghttpx/lib - make - name: 'build quictls' - - - run: | - cd $HOME/quictls - make -j1 install_sw - name: 'install quictls' - + fail-on-cache-miss: true - name: cache gnutls uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 @@ -132,52 +309,20 @@ jobs: env: cache-name: cache-gnutls with: - path: /home/runner/gnutls + path: /home/runner/gnutls/build key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.gnutls-version }} - - - if: steps.cache-gnutls.outputs.cache-hit != 'true' - run: | - cd $HOME - git clone --quiet --depth=1 -b ${{ env.gnutls-version }} https://github.com/gnutls/gnutls.git - cd gnutls - ./bootstrap - ./configure --disable-dependency-tracking --prefix=$HOME/nghttpx \ - PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" LDFLAGS="-Wl,-rpath,$HOME/nghttpx/lib -L$HOME/nghttpx/lib" \ - --with-included-libtasn1 --with-included-unistring \ - --disable-guile --disable-doc --disable-tests --disable-tools - make - name: 'build gnutls' - - - run: | - cd $HOME/gnutls - make install - name: 'install gnutls' + fail-on-cache-miss: true - name: cache wolfssl uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 id: cache-wolfssl env: cache-name: cache-wolfssl + wolfssl-version: ${{ needs.setup.outputs.wolfssl-version }} with: - path: /home/runner/wolfssl + path: /home/runner/wolfssl/build key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.wolfssl-version }} - - - if: steps.cache-wolfssl.outputs.cache-hit != 'true' || ${{ env.wolfssl-version }} == 'master' - run: | - cd $HOME - rm -rf wolfssl - git clone --quiet --depth=1 -b ${{ env.wolfssl-version }} https://github.com/wolfSSL/wolfssl.git - cd wolfssl - ./autogen.sh - ./configure --disable-dependency-tracking --enable-all --enable-quic --prefix=$HOME/nghttpx - make - name: 'build wolfssl' - - - run: | - cd $HOME/wolfssl - make install - name: 'install wolfssl' - + fail-on-cache-miss: true - name: cache nghttp3 uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 @@ -185,42 +330,29 @@ jobs: env: cache-name: cache-nghttp3 with: - path: /home/runner/nghttp3 + path: /home/runner/nghttp3/build key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.nghttp3-version }} + fail-on-cache-miss: true - - if: steps.cache-nghttp3.outputs.cache-hit != 'true' - run: | - cd $HOME - git clone --quiet --depth=1 -b v${{ env.nghttp3-version }} https://github.com/ngtcp2/nghttp3 - cd nghttp3 - git submodule update --init - autoreconf -fi - ./configure --disable-dependency-tracking --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only - make - name: 'build nghttp3' + - name: cache ngtcp2 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 + id: cache-ngtcp2 + env: + cache-name: cache-ngtcp2 + with: + path: /home/runner/ngtcp2/build + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.ngtcp2-version }} + fail-on-cache-miss: true - - run: | - cd $HOME/nghttp3 - make install - name: 'install nghttp3' - - # depends on all other cached libs built so far - - run: | - git clone --quiet --depth=1 -b v${{ env.ngtcp2-version }} https://github.com/ngtcp2/ngtcp2 - cd ngtcp2 - autoreconf -fi - ./configure --disable-dependency-tracking --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only --with-openssl --with-gnutls --with-wolfssl - make install - name: 'install ngtcp2' - - # depends on all other cached libs built so far - - run: | - git clone --quiet --depth=1 -b v${{ env.nghttp2-version }} https://github.com/nghttp2/nghttp2 - cd nghttp2 - autoreconf -fi - ./configure --disable-dependency-tracking --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-http3 - make install - name: 'install nghttp2' + - name: cache nghttp2 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 + id: cache-nghttp2 + env: + cache-name: cache-nghttp2 + with: + path: /home/runner/nghttp2/build + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.nghttp2-version }} + fail-on-cache-miss: true - name: cache mod_h2 uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4