130 lines
4.3 KiB
YAML
130 lines
4.3 KiB
YAML
# Copyright 2019 Ilya Shipitsin <chipitsine@gmail.com>
|
|
# Copyright 2020 Tim Duesterhus <tim@bastelstu.be>
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version
|
|
# 2 of the License, or (at your option) any later version.
|
|
|
|
name: VTest
|
|
|
|
on:
|
|
push:
|
|
|
|
jobs:
|
|
# The generate-matrix job generates the build matrix using JSON output
|
|
# generated by .github/matrix.py.
|
|
generate-matrix:
|
|
name: Generate Build Matrix
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Generate Build Matrix
|
|
id: set-matrix
|
|
run: python3 .github/matrix.py "${{ github.event_name }}"
|
|
|
|
# The Test job actually runs the tests.
|
|
Test:
|
|
name: ${{ matrix.name }}
|
|
needs: generate-matrix
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }}
|
|
fail-fast: false
|
|
env:
|
|
# Configure a short TMPDIR to prevent failures due to long unix socket
|
|
# paths.
|
|
TMPDIR: /tmp
|
|
# Force ASAN output into asan.log to make the output more readable.
|
|
ASAN_OPTIONS: log_path=asan.log
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
fetch-depth: 100
|
|
- name: Install apt dependencies
|
|
if: ${{ startsWith(matrix.os, 'ubuntu-') }}
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y \
|
|
liblua5.3-dev \
|
|
libpcre2-dev \
|
|
libsystemd-dev \
|
|
ninja-build \
|
|
socat
|
|
- name: Install brew dependencies
|
|
if: ${{ startsWith(matrix.os, 'macos-') }}
|
|
run: |
|
|
brew install socat
|
|
brew install lua
|
|
- name: Install VTest
|
|
run: |
|
|
curl -fsSL https://github.com/vtest/VTest/archive/02a9bc16d78e70d1d415b40d5349b9f3e56df05b.tar.gz -o VTest.tar.gz
|
|
mkdir VTest
|
|
tar xvf VTest.tar.gz -C VTest --strip-components=1
|
|
make -C VTest -j$(nproc) FLAGS="-O2 -s -Wall"
|
|
sudo install -m755 VTest/vtest /usr/local/bin/vtest
|
|
- name: Install SLZ
|
|
if: ${{ contains(matrix.FLAGS, 'USE_SLZ=1') }}
|
|
run: |
|
|
curl -fsSL https://github.com/wtarreau/libslz/archive/master.tar.gz -o libslz.tar.gz
|
|
mkdir libslz
|
|
tar xvf libslz.tar.gz -C libslz --strip-components=1
|
|
make -C libslz
|
|
sudo make -C libslz install
|
|
- name: Install SSL ${{ matrix.ssl }}
|
|
if: ${{ matrix.ssl && matrix.ssl != 'stock' }}
|
|
run: env ${{ matrix.ssl }} scripts/build-ssl.sh
|
|
- name: Build WURFL
|
|
if: ${{ contains(matrix.FLAGS, 'USE_WURFL=1') }}
|
|
run: make -C contrib/wurfl
|
|
- name: Compile HAProxy with ${{ matrix.CC }}
|
|
run: |
|
|
make -j$(nproc) all \
|
|
ERR=1 \
|
|
TARGET=${{ matrix.TARGET }} \
|
|
CC=${{ matrix.CC }} \
|
|
DEBUG=-DDEBUG_STRICT=1 \
|
|
${{ join(matrix.FLAGS, ' ') }} \
|
|
ADDLIB="-Wl,-rpath,/usr/local/lib/ -Wl,-rpath,$HOME/opt/lib/"
|
|
sudo make install
|
|
- name: Show HAProxy version
|
|
id: show-version
|
|
run: |
|
|
echo "::group::Show dynamic libraries."
|
|
if command -v ldd > /dev/null; then
|
|
# Linux
|
|
ldd $(which haproxy)
|
|
else
|
|
# macOS
|
|
otool -L $(which haproxy)
|
|
fi
|
|
echo "::endgroup::"
|
|
haproxy -vv
|
|
echo "::set-output name=version::$(haproxy -v |awk 'NR==1{print $3}')"
|
|
- name: Install problem matcher for VTest
|
|
# This allows one to more easily see which tests fail.
|
|
run: echo "::add-matcher::.github/vtest.json"
|
|
- name: Run VTest for HAProxy ${{ steps.show-version.outputs.version }}
|
|
id: vtest
|
|
# sudo is required, because macOS fails due to an open files limit.
|
|
run: sudo make reg-tests REGTESTS_TYPES=default,bug,devel
|
|
- name: Show results
|
|
if: ${{ failure() }}
|
|
# The chmod / sudo is necessary due to the `sudo` while running the tests.
|
|
run: |
|
|
sudo chmod a+rX ${TMPDIR}/haregtests-*/
|
|
for folder in ${TMPDIR}/haregtests-*/vtc.*; do
|
|
printf "::group::"
|
|
cat $folder/INFO
|
|
cat $folder/LOG
|
|
echo "::endgroup::"
|
|
done
|
|
shopt -s nullglob
|
|
for asan in asan.log*; do
|
|
echo "::group::$asan"
|
|
sudo cat $asan
|
|
echo "::endgroup::"
|
|
done
|