1# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al. 2# 3# SPDX-License-Identifier: curl 4 5name: osslq-linux 6 7on: 8 push: 9 branches: 10 - master 11 - '*/ci' 12 paths-ignore: 13 - '**/*.md' 14 - '**/CMakeLists.txt' 15 - '.azure-pipelines.yml' 16 - '.circleci/**' 17 - '.cirrus.yml' 18 - 'appveyor.*' 19 - 'CMake/**' 20 - 'packages/**' 21 - 'plan9/**' 22 - 'projects/**' 23 - 'winbuild/**' 24 pull_request: 25 branches: 26 - master 27 paths-ignore: 28 - '**/*.md' 29 - '**/CMakeLists.txt' 30 - '.azure-pipelines.yml' 31 - '.circleci/**' 32 - '.cirrus.yml' 33 - 'appveyor.*' 34 - 'CMake/**' 35 - 'packages/**' 36 - 'plan9/**' 37 - 'projects/**' 38 - 'winbuild/**' 39 40concurrency: 41 # Hardcoded workflow filename as workflow name above is just Linux again 42 group: osslq-${{ github.event.pull_request.number || github.sha }} 43 cancel-in-progress: true 44 45permissions: {} 46 47env: 48 MAKEFLAGS: -j 3 49 # handled in renovate.json 50 openssl3-version: openssl-3.3.0 51 # unhandled 52 quictls-version: 3.1.4+quic 53 # renovate: datasource=github-tags depName=ngtcp2/nghttp3 versioning=semver registryUrl=https://github.com 54 nghttp3-version: 1.3.0 55 # renovate: datasource=github-tags depName=ngtcp2/ngtcp2 versioning=semver registryUrl=https://github.com 56 ngtcp2-version: 1.5.0 57 # renovate: datasource=github-tags depName=nghttp2/nghttp2 versioning=semver registryUrl=https://github.com 58 nghttp2-version: 1.62.1 59 # renovate: datasource=github-tags depName=icing/mod_h2 versioning=semver registryUrl=https://github.com 60 mod_h2-version: 2.0.27 61 62jobs: 63 autotools: 64 name: ${{ matrix.build.name }} 65 runs-on: 'ubuntu-latest' 66 timeout-minutes: 60 67 strategy: 68 fail-fast: false 69 matrix: 70 build: 71 - name: openssl-quic 72 configure: >- 73 PKG_CONFIG_PATH="$HOME/openssl3/lib64/pkgconfig" LDFLAGS="-Wl,-rpath,$HOME/openssl3/lib64" 74 --enable-warnings --enable-werror --enable-debug --disable-ntlm 75 --with-test-nghttpx="$HOME/nghttpx/bin/nghttpx" 76 --with-openssl=$HOME/openssl3 --with-openssl-quic 77 --with-nghttp3=$HOME/nghttpx 78 79 steps: 80 - run: | 81 sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list 82 sudo apt-get update 83 sudo apt-get install libtool autoconf automake pkg-config stunnel4 \ 84 libpsl-dev libbrotli-dev libzstd-dev zlib1g-dev libev-dev libc-ares-dev \ 85 nettle-dev libp11-kit-dev libtspi-dev libunistring-dev guile-2.2-dev libtasn1-bin \ 86 libtasn1-6-dev libidn2-0-dev gawk gperf libtss2-dev dns-root-data bison gtk-doc-tools \ 87 texinfo texlive texlive-extra-utils autopoint libev-dev \ 88 apache2 apache2-dev libnghttp2-dev 89 echo 'CC=gcc-12' >> $GITHUB_ENV 90 echo 'CXX=g++-12' >> $GITHUB_ENV 91 name: 'install prereqs and impacket, pytest, crypto, apache2' 92 93 - name: cache openssl3 94 if: contains(matrix.build.install_steps, 'openssl3') 95 uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 96 id: cache-openssl3 97 env: 98 cache-name: cache-openssl3 99 with: 100 path: /home/runner/openssl3 101 key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.openssl3-version }} 102 103 - name: 'install openssl3' 104 if: steps.cache-openssl3.outputs.cache-hit != 'true' 105 run: | 106 git clone --quiet --depth=1 -b ${{ env.openssl3-version }} https://github.com/openssl/openssl 107 cd openssl 108 ./config --prefix=$HOME/openssl3 109 make -j1 install_sw 110 cat exporters/openssl.pc 111 112 - name: cache quictls 113 if: contains(matrix.build.install_steps, 'quictls') 114 uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 115 id: cache-quictls 116 env: 117 cache-name: cache-quictls 118 with: 119 path: /home/runner/quictls 120 key: ${{ runner.os }}-build-${{ env.cache-name }}-quictls-${{ env.quictls-version }} 121 122 - name: cache quictls 123 uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 124 id: cache-quictls-no-deprecated 125 env: 126 cache-name: cache-quictls-no-deprecated 127 with: 128 path: /home/runner/quictls 129 key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.quictls-version }} 130 131 - if: steps.cache-quictls-no-deprecated.outputs.cache-hit != 'true' 132 run: | 133 cd $HOME 134 git clone --quiet --depth=1 -b openssl-${{ env.quictls-version }} https://github.com/quictls/openssl quictls 135 cd quictls 136 ./config no-deprecated --prefix=$HOME/nghttpx --libdir=$HOME/nghttpx/lib 137 make 138 name: 'build quictls' 139 140 - run: | 141 cd $HOME/quictls 142 make -j1 install_sw 143 name: 'install quictls' 144 145 146 - name: cache nghttp3 147 uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 148 id: cache-nghttp3 149 env: 150 cache-name: cache-nghttp3 151 with: 152 path: /home/runner/nghttp3 153 key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.nghttp3-version }} 154 155 - if: steps.cache-nghttp3.outputs.cache-hit != 'true' 156 run: | 157 cd $HOME 158 git clone --quiet --depth=1 -b v${{ env.nghttp3-version }} https://github.com/ngtcp2/nghttp3 159 cd nghttp3 160 git submodule update --init 161 autoreconf -fi 162 ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only 163 make 164 name: 'build nghttp3' 165 166 - run: | 167 cd $HOME/nghttp3 168 make install 169 name: 'install nghttp3' 170 171 # depends on all other cached libs built so far 172 - run: | 173 git clone --quiet --depth=1 -b v${{ env.ngtcp2-version }} https://github.com/ngtcp2/ngtcp2 174 cd ngtcp2 175 autoreconf -fi 176 ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only --with-openssl 177 make install 178 name: 'install ngtcp2' 179 180 # depends on all other cached libs built so far 181 - run: | 182 git clone --quiet --depth=1 -b v${{ env.nghttp2-version }} https://github.com/nghttp2/nghttp2 183 cd nghttp2 184 autoreconf -fi 185 ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-http3 186 make install 187 name: 'install nghttp2' 188 189 - name: cache mod_h2 190 uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 191 id: cache-mod_h2 192 env: 193 cache-name: cache-mod_h2 194 with: 195 path: /home/runner/mod_h2 196 key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.mod_h2-version }} 197 198 - if: steps.cache-mod_h2.outputs.cache-hit != 'true' 199 run: | 200 cd $HOME 201 git clone --quiet --depth=1 -b v${{ env.mod_h2-version }} https://github.com/icing/mod_h2 202 cd mod_h2 203 autoreconf -fi 204 ./configure 205 make 206 name: 'build mod_h2' 207 208 - run: | 209 cd $HOME/mod_h2 210 sudo make install 211 name: 'install mod_h2' 212 213 - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 214 215 - run: | 216 sudo python3 -m pip install -r tests/requirements.txt -r tests/http/requirements.txt 217 name: 'install python test prereqs' 218 219 - run: autoreconf -fi 220 name: 'autoreconf' 221 222 - run: ./configure ${{ matrix.build.configure }} 223 name: 'configure' 224 225 - run: make V=1 226 name: 'make' 227 228 - run: make V=1 examples 229 name: 'make examples' 230 231 - run: make V=1 -C tests 232 name: 'make tests' 233 234 - run: make V=1 test-ci 235 name: 'run tests' 236 237 - run: pytest -v tests 238 name: 'run pytest' 239 env: 240 TFLAGS: "${{ matrix.build.tflags }}" 241 CURL_CI: github 242