xref: /curl/.github/workflows/osslq-linux.yml (revision 7e932fac)
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