mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2026-10-24 04:09:07 +03:00
The retry added for the flaky Docker OpenSSH-server tests was a no-op. automake generates the recheck target only in the directory that defines TESTS, so libssh2 has it in tests/Makefile but not at the top level. Every flaky run ended with "No rule to make target 'recheck'" twice and failed the job on the first transient error. Run recheck in tests/ instead. Also correct the description of the race. The handshake fails with -43, which is LIBSSH2_ERROR_SOCKET_RECV rather than a banner timeout: docker-proxy binds the published port as soon as the container starts, so connect() succeeds and sshd resets the connection because it is not listening inside the container yet. That is why the fixture cannot recover on its own, as its retry loop only covers connect(), which never fails here. Cap the test parallelism at the runner's CPU count. "make -j" is unbounded, and the failing runs started around 20 containers at once on a four-CPU runner, which is what starves sshd of the time it needs to come up. Every observed failure was a single random test out of 46 inside that burst. A genuine failure is still retried twice and still fails the job.
114 lines
3.7 KiB
YAML
114 lines
3.7 KiB
YAML
name: libssh2 Tests
|
|
|
|
# START OF COMMON SECTION
|
|
on:
|
|
push:
|
|
branches: [ 'release/**' ]
|
|
pull_request:
|
|
types: [opened, synchronize, reopened, ready_for_review]
|
|
branches: [ '*' ]
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
permissions:
|
|
contents: read
|
|
# END OF COMMON SECTION
|
|
|
|
jobs:
|
|
build_wolfssl:
|
|
name: Build wolfSSL
|
|
# Just to keep it the same as the testing target
|
|
if: ${{ (github.repository_owner == 'wolfssl') && (github.event_name != 'pull_request' || github.event.pull_request.draft == false) }}
|
|
runs-on: ubuntu-24.04
|
|
# This should be a safe limit for the tests to run.
|
|
timeout-minutes: 4
|
|
steps:
|
|
- name: Build wolfSSL
|
|
uses: wolfSSL/actions-build-autotools-project@v1
|
|
with:
|
|
path: wolfssl
|
|
configure: --enable-all
|
|
check: false # config is already tested in many other PRB's
|
|
install: true
|
|
|
|
- name: tar build-dir
|
|
run: tar -zcf build-dir.tgz build-dir
|
|
|
|
- name: Upload built lib
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
name: wolf-install-libssh2
|
|
path: build-dir.tgz
|
|
retention-days: 5
|
|
|
|
libssh2_check:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
# List of releases to test
|
|
ref: [ 1.11.1 ]
|
|
name: ${{ matrix.ref }}
|
|
if: ${{ (github.repository_owner == 'wolfssl') && (github.event_name != 'pull_request' || github.event.pull_request.draft == false) }}
|
|
runs-on: ubuntu-24.04
|
|
# This should be a safe limit for the tests to run.
|
|
timeout-minutes: 8
|
|
needs: build_wolfssl
|
|
steps:
|
|
- name: Download lib
|
|
uses: actions/download-artifact@v7
|
|
with:
|
|
name: wolf-install-libssh2
|
|
|
|
- name: untar build-dir
|
|
run: tar -xf build-dir.tgz
|
|
|
|
- name: Clone libssh2
|
|
uses: actions/checkout@v5
|
|
with:
|
|
repository: libssh2/libssh2
|
|
ref: libssh2-${{ matrix.ref }}
|
|
path: libssh2
|
|
fetch-depth: 1
|
|
|
|
- name: Update libssh2 test to use a stable version of debian
|
|
working-directory: libssh2
|
|
run: |
|
|
sed -i 's/testing-slim/oldstable-slim/' tests/openssh_server/Dockerfile
|
|
|
|
- name: Build libssh2
|
|
working-directory: libssh2
|
|
run: |
|
|
autoreconf -fi
|
|
./configure --with-crypto=wolfssl --with-libwolfssl-prefix=$GITHUB_WORKSPACE/build-dir
|
|
make -j
|
|
|
|
- name: Pre-build Docker image to avoid concurrent docker build race
|
|
working-directory: libssh2
|
|
run: docker build -t libssh2/openssh_server tests/openssh_server
|
|
|
|
- name: Run libssh2 tests
|
|
working-directory: libssh2
|
|
# The Docker OpenSSH-server tests hit a container-readiness race:
|
|
# docker-proxy binds the published port as soon as the container
|
|
# starts, so connect() succeeds and the handshake then fails with
|
|
# ECONNRESET (-43) because sshd inside the container is not listening
|
|
# yet. The libssh2 fixture only retries connect(), which never fails
|
|
# here, so it cannot recover on its own. Cap the parallelism to the
|
|
# runner's CPU count to shrink the burst of simultaneous containers,
|
|
# then re-run only the tests that did not pass. Note that recheck is
|
|
# generated by automake only in the directory holding TESTS, so it has
|
|
# to run in tests/. A genuine failure still fails the job.
|
|
run: |
|
|
make -j"$(nproc)" check \
|
|
|| make -C tests recheck \
|
|
|| make -C tests recheck
|
|
|
|
- name: Confirm libssh2 built with wolfSSL
|
|
run: ldd libssh2/src/.libs/libssh2.so | grep wolfssl
|
|
|
|
- name: print test logs
|
|
if: ${{ failure() }}
|
|
run: tail -n +1 libssh2/tests/*.log
|