osslq-linux.yml 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  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.61.0
  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. name: 'install prereqs and impacket, pytest, crypto, apache2'
  83. - name: cache openssl3
  84. if: contains(matrix.build.install_steps, 'openssl3')
  85. uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
  86. id: cache-openssl3
  87. env:
  88. cache-name: cache-openssl3
  89. with:
  90. path: /home/runner/openssl3
  91. key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.openssl3-version }}
  92. - name: 'install openssl3'
  93. if: steps.cache-openssl3.outputs.cache-hit != 'true'
  94. run: |
  95. git clone --quiet --depth=1 -b ${{ env.openssl3-version }} https://github.com/openssl/openssl
  96. cd openssl
  97. ./config --prefix=$HOME/openssl3
  98. make -j1 install_sw
  99. cat exporters/openssl.pc
  100. - name: cache quictls
  101. if: contains(matrix.build.install_steps, 'quictls')
  102. uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
  103. id: cache-quictls
  104. env:
  105. cache-name: cache-quictls
  106. with:
  107. path: /home/runner/quictls
  108. key: ${{ runner.os }}-build-${{ env.cache-name }}-quictls-${{ env.quictls-version }}
  109. - name: cache quictls
  110. uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
  111. id: cache-quictls-no-deprecated
  112. env:
  113. cache-name: cache-quictls-no-deprecated
  114. with:
  115. path: /home/runner/quictls
  116. key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.quictls-version }}
  117. - if: steps.cache-quictls-no-deprecated.outputs.cache-hit != 'true'
  118. run: |
  119. cd $HOME
  120. git clone --quiet --depth=1 -b openssl-${{ env.quictls-version }} https://github.com/quictls/openssl quictls
  121. cd quictls
  122. ./config no-deprecated --prefix=$HOME/nghttpx --libdir=$HOME/nghttpx/lib
  123. make
  124. name: 'build quictls'
  125. - run: |
  126. cd $HOME/quictls
  127. make -j1 install_sw
  128. name: 'install quictls'
  129. - name: cache nghttp3
  130. uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
  131. id: cache-nghttp3
  132. env:
  133. cache-name: cache-nghttp3
  134. with:
  135. path: /home/runner/nghttp3
  136. key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.nghttp3-version }}
  137. - if: steps.cache-nghttp3.outputs.cache-hit != 'true'
  138. run: |
  139. cd $HOME
  140. git clone --quiet --depth=1 -b v${{ env.nghttp3-version }} https://github.com/ngtcp2/nghttp3
  141. cd nghttp3
  142. git submodule update --init
  143. autoreconf -fi
  144. ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only
  145. make
  146. name: 'build nghttp3'
  147. - run: |
  148. cd $HOME/nghttp3
  149. make install
  150. name: 'install nghttp3'
  151. # depends on all other cached libs built so far
  152. - run: |
  153. git clone --quiet --depth=1 -b v${{ env.ngtcp2-version }} https://github.com/ngtcp2/ngtcp2
  154. cd ngtcp2
  155. autoreconf -fi
  156. ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only --with-openssl
  157. make install
  158. name: 'install ngtcp2'
  159. # depends on all other cached libs built so far
  160. - run: |
  161. git clone --quiet --depth=1 -b v${{ env.nghttp2-version }} https://github.com/nghttp2/nghttp2
  162. cd nghttp2
  163. autoreconf -fi
  164. ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-http3
  165. make install
  166. name: 'install nghttp2'
  167. - name: cache mod_h2
  168. uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
  169. id: cache-mod_h2
  170. env:
  171. cache-name: cache-mod_h2
  172. with:
  173. path: /home/runner/mod_h2
  174. key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.mod_h2-version }}
  175. - if: steps.cache-mod_h2.outputs.cache-hit != 'true'
  176. run: |
  177. cd $HOME
  178. git clone --quiet --depth=1 -b v${{ env.mod_h2-version }} https://github.com/icing/mod_h2
  179. cd mod_h2
  180. autoreconf -fi
  181. ./configure
  182. make
  183. name: 'build mod_h2'
  184. - run: |
  185. cd $HOME/mod_h2
  186. sudo make install
  187. name: 'install mod_h2'
  188. - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4
  189. - run: |
  190. sudo python3 -m pip install -r tests/requirements.txt -r tests/http/requirements.txt
  191. name: 'install python test prereqs'
  192. - run: autoreconf -fi
  193. name: 'autoreconf'
  194. - run: ./configure ${{ matrix.build.configure }}
  195. name: 'configure'
  196. - run: make V=1
  197. name: 'make'
  198. - run: make V=1 examples
  199. name: 'make examples'
  200. - run: make V=1 -C tests
  201. name: 'make tests'
  202. - run: make V=1 test-ci
  203. name: 'run tests'
  204. - run: pytest -v tests
  205. name: 'run pytest'
  206. env:
  207. TFLAGS: "${{ matrix.build.tflags }}"
  208. CURL_CI: github