From c40e1a1beb079f3695e6e2e0678d201acd6e2038 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Ludwig?= Date: Sat, 17 Feb 2024 10:48:49 +0100 Subject: [PATCH] Add OpenSSL test from the vibe.d repository. --- .github/workflows/openssl.yml | 110 ++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 .github/workflows/openssl.yml diff --git a/.github/workflows/openssl.yml b/.github/workflows/openssl.yml new file mode 100644 index 0000000..05e3bc4 --- /dev/null +++ b/.github/workflows/openssl.yml @@ -0,0 +1,110 @@ +# Test old OpenSSL version(s) +# +# As we are using `ubuntu-latest`, we cannot rely on the installed +# `openssl` package to test all supported versions. +# Instead, this workflow installs an explicit version, builds it, +# and test the tls package with it. +name: OpenSSL + +on: [push, pull_request] + +jobs: + deps: + strategy: + matrix: + os: [ ubuntu-latest ] + openssl: + - version: 1.0.2u + link: https://www.openssl.org/source/old/1.0.2/openssl-1.0.2u.tar.gz + - version: 1.1.0l + link: https://www.openssl.org/source/old/1.1.0/openssl-1.1.0l.tar.gz + - version: 1.1.1o + link: https://www.openssl.org/source/openssl-1.1.1o.tar.gz + - version: 3.0.3 + link: https://www.openssl.org/source/openssl-3.0.3.tar.gz + + runs-on: ${{ matrix.os }} + timeout-minutes: 15 + + # Build the OpenSSL version if not already cached + steps: + - name: 'Looking up cache' + id: cache-openssl + uses: actions/cache@v1 + with: + path: ${{ github.workspace }}/openssl/ + key: ${{ runner.os }}-${{ runner.arch }}-${{ matrix.openssl.version }} + + - name: 'Download and build OpenSSL ${{ matrix.openssl.version }}' + if: steps.cache-openssl.outputs.cache-hit != 'true' + run: | + + mkdir -p ${{ github.workspace }}/openssl/ + pushd ${{ github.workspace }}/openssl/ + wget -O download.tar.gz ${{ matrix.openssl.link }} + tar -xf download.tar.gz + pushd openssl-${{ matrix.openssl.version }}/ + ./config --prefix=${{ github.workspace }}/openssl/install/ + make install + echo "OpenSSL ${{ matrix.openssl.version }} has been installed in: ${{ github.workspace }}/openssl/install/" + # The previous job was separated to avoid a build once per matrix row, + # as opposed to once per platform / version as we want. + test: + name: Run + needs: deps + strategy: + fail-fast: false + matrix: + os: [ ubuntu-latest ] + dc: + - dmd-latest +# - ldc-latest + openssl: + - version: 1.0.2u + lib-dir: lib + - version: 1.1.0l + lib-dir: lib + - version: 1.1.1o + lib-dir: lib + - version: 3.0.3 + lib-dir: lib64 + + runs-on: ${{ matrix.os }} + timeout-minutes: 60 + + steps: + - uses: actions/checkout@v3 + + - name: Prepare compiler + uses: dlang-community/setup-dlang@v1 + with: + compiler: ${{ matrix.dc }} + + - name: 'Restore openssl from cache' + id: lookup-openssl + uses: actions/cache@v1 + with: + path: ${{ github.workspace }}/openssl/ + key: ${{ runner.os }}-${{ runner.arch }}-${{ matrix.openssl.version }} + + - name: 'Make sure OpenSSL was loaded from cache' + if: steps.lookup-openssl.outputs.cache-hit != 'true' + run: exit 1 + + - name: 'Export env variables & fetch dependencies' + run: | + # LD_LIBRARY_PATH affects `dub` somehow when fetching from the registry, leading to an error, + # so pre-fetch dependencies. + dub build :tls + + echo "PKG_CONFIG_PATH=${{ github.workspace }}/openssl/install/${{ matrix.openssl.lib-dir }}/pkgconfig/" >> $GITHUB_ENV + echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${{ github.workspace }}/openssl/install/${{ matrix.openssl.lib-dir }}/" >> $GITHUB_ENV + + - name: 'Run tests for vibe-stream:tls' + run: | + echo "pkg-config uses: $(pkg-config --modversion openssl)" + if [ `pkg-config --modversion openssl` != "${{ matrix.openssl.version }}" ]; then + echo "Expected version '${{ matrix.openssl.version }}' but got `pkg-config --modversion openssl`" + exit 1 + fi + dub --skip-registry=all test :tls