From 7640d7949f7b3210db25443e397e868e7c2c962d Mon Sep 17 00:00:00 2001 From: Tim Duesterhus Date: Mon, 13 Apr 2026 21:23:41 +0200 Subject: [PATCH] CI: Integrate Musl build into vtest.yml With the previous sync, these two workflows perform almost the same steps and both logically belong to "Run VTest tests". Integrate musl.yml into vtest.yml, which will hopefully encourage future changes to consistently apply to all jobs in that workflow. --- .github/workflows/musl.yml | 111 ------------------------------------ .github/workflows/vtest.yml | 102 +++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 111 deletions(-) delete mode 100644 .github/workflows/musl.yml diff --git a/.github/workflows/musl.yml b/.github/workflows/musl.yml deleted file mode 100644 index 4220e6fcf..000000000 --- a/.github/workflows/musl.yml +++ /dev/null @@ -1,111 +0,0 @@ -name: alpine/musl - -on: - push: - -permissions: - contents: read - -jobs: - Test: - name: musl, ${{ matrix.name }} - runs-on: ubuntu-latest - strategy: - matrix: - include: - - name: gcc - CC: gcc - FLAGS: - - ARCH_FLAGS='-ggdb3' - - USE_LUA=1 - - LUA_INC=/usr/include/lua5.3 - - LUA_LIB=/usr/lib/lua5.3 - - USE_OPENSSL=1 - - USE_PCRE2=1 - - USE_PCRE2_JIT=1 - - USE_PROMEX=1 - fail-fast: false - container: - image: alpine:latest - options: --privileged --ulimit core=-1 --security-opt seccomp=unconfined - volumes: - - /tmp/core:/tmp/core - steps: - - name: Setup coredumps - run: | - echo '/tmp/core/core.%h.%e.%t' > /proc/sys/kernel/core_pattern - - uses: actions/checkout@v6 - - name: Install dependencies - run: apk add gcc gdb make tar git python3 libc-dev linux-headers pcre-dev pcre2-dev openssl-dev lua5.3-dev grep socat curl musl-dbg lua5.3-dbg jose - - uses: ./.github/actions/setup-vtest - - name: Compile HAProxy with ${{ matrix.CC }} - run: | - echo "::group::Show compiler's version" - echo | ${{ matrix.CC }} -v - echo "::endgroup::" - echo "::group::Show platform specific defines" - echo | ${{ matrix.CC }} -dM -xc -E - - echo "::endgroup::" - make -j$(nproc) all \ - ERR=1 \ - TARGET=linux-musl \ - CC=${{ matrix.CC }} \ - DEBUG="-DDEBUG_POOL_INTEGRITY -DDEBUG_UNIT" \ - ${{ join(matrix.FLAGS, ' ') }} \ - ADDLIB="-Wl,-rpath,/usr/local/lib/ -Wl,-rpath,$HOME/opt/lib/" - make install-bin - - 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 "version=$(haproxy -vq)" >> $GITHUB_OUTPUT - - name: Run VTest for HAProxy ${{ steps.show-version.outputs.version }} - id: vtest - run: | - make reg-tests VTEST_PROGRAM=${{ github.workspace }}/vtest/vtest REGTESTS_TYPES=default,bug,devel - - name: Show VTest results - if: ${{ failure() && steps.vtest.outcome == 'failure' }} - run: | - for folder in ${TMPDIR:-/tmp}/haregtests-*/vtc.*; do - printf "::group::" - cat $folder/INFO - cat $folder/LOG - echo "::endgroup::" - done - exit 1 - - name: Run Unit tests - id: unittests - run: | - make unit-tests - - name: Show Unit-Tests results - if: ${{ failure() && steps.unittests.outcome == 'failure' }} - run: | - for result in ${TMPDIR:-/tmp}/ha-unittests-*/results/res.*; do - printf "::group::" - cat $result - echo "::endgroup::" - done - exit 1 - - name: Show coredumps - if: ${{ failure() && steps.vtest.outcome == 'failure' }} - run: | - failed=false - ls /tmp/core/ - for file in /tmp/core/core.*; do - failed=true - printf "::group::" - gdb -ex 'thread apply all bt full' ./haproxy $file - echo "::endgroup::" - done - if [ "$failed" = true ]; then - exit 1; - fi diff --git a/.github/workflows/vtest.yml b/.github/workflows/vtest.yml index dec473512..6113e4a3c 100644 --- a/.github/workflows/vtest.yml +++ b/.github/workflows/vtest.yml @@ -178,3 +178,105 @@ jobs: if [ "$failed" = true ]; then exit 1; fi + Test-musl: + name: Alpine+musl, ${{ matrix.name }} + runs-on: ubuntu-latest + strategy: + matrix: + include: + - name: gcc + CC: gcc + FLAGS: + - ARCH_FLAGS='-ggdb3' + - USE_LUA=1 + - LUA_INC=/usr/include/lua5.3 + - LUA_LIB=/usr/lib/lua5.3 + - USE_OPENSSL=1 + - USE_PCRE2=1 + - USE_PCRE2_JIT=1 + - USE_PROMEX=1 + fail-fast: false + container: + image: alpine:latest + options: --privileged --ulimit core=-1 --security-opt seccomp=unconfined + volumes: + - /tmp/core:/tmp/core + steps: + - name: Setup coredumps + run: | + echo '/tmp/core/core.%h.%e.%t' > /proc/sys/kernel/core_pattern + - uses: actions/checkout@v6 + - name: Install dependencies + run: apk add gcc gdb make tar git python3 libc-dev linux-headers pcre-dev pcre2-dev openssl-dev lua5.3-dev grep socat curl musl-dbg lua5.3-dbg jose + - uses: ./.github/actions/setup-vtest + - name: Compile HAProxy with ${{ matrix.CC }} + run: | + echo "::group::Show compiler's version" + echo | ${{ matrix.CC }} -v + echo "::endgroup::" + echo "::group::Show platform specific defines" + echo | ${{ matrix.CC }} -dM -xc -E - + echo "::endgroup::" + make -j$(nproc) all \ + ERR=1 \ + TARGET=linux-musl \ + CC=${{ matrix.CC }} \ + DEBUG="-DDEBUG_POOL_INTEGRITY -DDEBUG_UNIT" \ + ${{ join(matrix.FLAGS, ' ') }} \ + ADDLIB="-Wl,-rpath,/usr/local/lib/ -Wl,-rpath,$HOME/opt/lib/" + make install-bin + - 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 "version=$(haproxy -vq)" >> $GITHUB_OUTPUT + - name: Run VTest for HAProxy ${{ steps.show-version.outputs.version }} + id: vtest + run: | + make reg-tests VTEST_PROGRAM=${{ github.workspace }}/vtest/vtest REGTESTS_TYPES=default,bug,devel + - name: Show VTest results + if: ${{ failure() && steps.vtest.outcome == 'failure' }} + run: | + for folder in ${TMPDIR:-/tmp}/haregtests-*/vtc.*; do + printf "::group::" + cat $folder/INFO + cat $folder/LOG + echo "::endgroup::" + done + exit 1 + - name: Run Unit tests + id: unittests + run: | + make unit-tests + - name: Show Unit-Tests results + if: ${{ failure() && steps.unittests.outcome == 'failure' }} + run: | + for result in ${TMPDIR:-/tmp}/ha-unittests-*/results/res.*; do + printf "::group::" + cat $result + echo "::endgroup::" + done + exit 1 + - name: Show coredumps + if: ${{ failure() && steps.vtest.outcome == 'failure' }} + run: | + failed=false + ls /tmp/core/ + for file in /tmp/core/core.*; do + failed=true + printf "::group::" + gdb -ex 'thread apply all bt full' ./haproxy $file + echo "::endgroup::" + done + if [ "$failed" = true ]; then + exit 1; + fi