osslq-linux.yml 7.8 KB

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