Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
6d613ed
test: Tweak tomcat_wait_for_n_nodes to run faster when nodes are ready
jajik Sep 14, 2026
6f18a31
test: Simplify the defaulting of test variables
jajik Sep 14, 2026
24936b0
test: Make mod_proxy_cluster/mod_proxy_balancer tests execution condi…
jajik Sep 14, 2026
aa8d386
ci: Separate mod_proxy_cluster and mod_proxy_balancer tests into two …
jajik Sep 14, 2026
40fe84e
test: Run Base mod_proxy_balancer tests with multiple tomcat versions…
jajik Sep 15, 2026
7c5e86c
test: Make run_test format wider
jajik Sep 15, 2026
36d80fa
test: Make mod_proxy_cluster/mod_proxy_balancer tests execution condi…
jajik Sep 14, 2026
e1b5960
test: Separate container creation, allow to skip it
jajik Sep 30, 2026
75f4fab
ci: Rework the CI, build dependencies once then share
jajik Sep 30, 2026
18b9f6f
ci: Drop the setup-dependencies call from tests
jajik Oct 1, 2026
b70a1d8
test: Run setup-dependencies.sh only when containers are created
jajik Oct 1, 2026
6a8abf0
ci: Separate Hanging tests and MODCLUSTER-736 from the rest
jajik Oct 1, 2026
42017a4
test: Use $((...)) instead of expr
jajik Oct 2, 2026
faedf72
ci: Move the env vars to the top level
jajik Oct 2, 2026
c38f31f
test: Fix run_test when the test fails in shell with -e (GH Actions)
jajik Oct 2, 2026
007d0ce
ci: Gather only the logs on Windows
jajik Oct 2, 2026
f817d69
test: Simplify MODCLUSTER-736, drop redundant/dead code
jajik Oct 2, 2026
ed2352e
ci: Tweak the ignored workaround
jajik Oct 6, 2026
e62afd4
ci: Minor tweaks, drop ls, use apt-get everywhere
jajik Oct 6, 2026
a3b59c6
ci: Fix typo wstunned vs wstunnel for trunk httpd
jajik Oct 6, 2026
c4af7f6
ci: Make sure that any job failure causes gather-results to fail
jajik Oct 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 1 addition & 33 deletions .github/workflows/ci-ignored-workaround.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,42 +12,10 @@ on:
- 'LICENSE'

jobs:
cmake-fedora-latest:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
compiler: [ gcc, clang ]
steps:
- name: Skip
run: echo "Skipping the job"

clang-format-style-check:
runs-on: ubuntu-latest
steps:
- name: Skip
run: echo "Skipping the job"

clang-tidy-naming-check:
gather-results:
runs-on: ubuntu-latest
steps:
- name: Skip
run: echo "Skipping the job"

make-fedora-latest:
runs-on: ubuntu-latest
steps:
- name: Skip
run: echo "Skipping the job"

tests:
runs-on: ubuntu-latest
steps:
- name: Skip
run: echo "Skipping the job"

perl-tests:
runs-on: ubuntu-latest
steps:
- name: Skip
run: echo "Skipping the job"
239 changes: 202 additions & 37 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,7 @@ on:
debug:
description: "Test logs are generated when on"
type: choice
options:
- "on"
- "off"
options: [ "on", "off" ]
default: "on"

forever-pause:
Expand All @@ -37,10 +35,30 @@ on:
type: number
default: 2

mod_proxy_cluster:
description: "mod_proxy_cluster tests are executed"
type: choice
options: [ "on", "off" ]
default: "on"

balancer:
description: "mod_proxy_balancer tests are executed"
type: choice
options: [ "on", "off" ]
default: "on"

env:
IMG: local-tomcat
HTTPD_IMG: local-httpd
DEBUG: ${{ inputs.debug || 'on' }}
FOREVER_PAUSE: ${{ inputs.forever-pause || 100 }}
ITERATION_COUNT: ${{ inputs.iteration-count || 2 }}
TOMCAT_CYCLE_COUNT: ${{ inputs.tomcat-cycle-count || 2 }}
SKIP_CONTAINER_CREATION: 'on'

jobs:

cmake-fedora-latest:
name: cmake-fedora-latest
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
Expand Down Expand Up @@ -81,7 +99,7 @@ jobs:
path: mod_proxy_cluster
- name: Setup Podman
run: |
sudo apt update
sudo apt-get update
sudo apt-get -y install podman
- name: Create container and build
run: |
Expand All @@ -105,17 +123,17 @@ jobs:
} > Containerfile
podman build .

clang-format-style-check:
clang-style-checks:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
path: mod_proxy_cluster
- name: Install clang-format
- name: Install clang-format and clang-tidy
run: |
sudo apt-get update
sudo apt-get install -y clang-format
sudo apt-get install -y clang-format clang-tidy apache2-dev
- name: Check styles
run: |
code=0
Expand All @@ -132,18 +150,6 @@ jobs:
rm diff.txt || true # we don't fail if the file does not exist
done;
exit $code

clang-tidy-naming-check:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
path: mod_proxy_cluster
- name: Install clang-tidy
run: |
sudo apt-get update
sudo apt-get install -y clang-tidy apache2-dev
- name: Check naming conventions
run: |
code=0
Expand All @@ -161,6 +167,7 @@ jobs:
done
exit $code


make-httpd-maintainer-mode:
runs-on: ubuntu-latest
strategy:
Expand Down Expand Up @@ -210,25 +217,22 @@ jobs:
path: httpd/srclib/apr
- name: Install necessary packages
run: |
ls
sudo apt-get update
sudo apt-get install gcc cmake make libtool libtool-bin python3 autoconf libxml2-dev libpcre2-dev -y
- name: Build httpd
run: |
ls
export "APACHE_DIR=/usr/local/apache2/"
cd httpd
./buildconf
./configure --prefix=/usr/local/apache2 --with-included-apr --enable-proxy-ajp --enable-maintainer-mode \
--enable-so --enable-proxy --enable-proxy-http --enable-proxy-wstunned --enable-proxy-hcheck \
--enable-so --enable-proxy --enable-proxy-http --enable-proxy-wstunnel --enable-proxy-hcheck \
--with-port=8090
sudo make
sudo make install
- name: Build mod_proxy_cluster and add it to httpd
env:
CFLAGS: "-Wall -Werror"
run: |
ls
cd mod_proxy_cluster/native
for module in advertise/ mod_proxy_cluster/ balancers/ mod_manager/; do \
cd $module; \
Expand Down Expand Up @@ -289,22 +293,17 @@ jobs:
if: always()
with:
name: Windows logs for ${{ matrix.os }}
path: C:\Apache24\logs\
path: C:\Apache24\logs\*log
retention-days: 7

tests:
# Both testsuites run against this one image, so that they exercise the very same
# binaries and the coverage they gather can be merged (see the merged-coverage job).
build-test-containers:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ ubuntu-latest, ubuntu-24.04-arm ]
env:
IMG: local-tomcat
HTTPD_IMG: local-httpd
DEBUG: ${{ inputs.debug || 'on' }}
FOREVER_PAUSE: ${{ inputs.forever-pause || 100 }}
ITERATION_COUNT: ${{ inputs.iteration-count || 2 }}
TOMCAT_CYCLE_COUNT: ${{ inputs.tomcat-cycle-count || 2 }}
os: [ ubuntu-latest, ubuntu-24.04-arm ]
steps:
- name: Checkout
uses: actions/checkout@v6
Expand All @@ -316,10 +315,119 @@ jobs:
- name: Setup dependencies
run: |
sudo apt-get update -y
sudo apt-get install -y podman-docker maven git curl iproute2 wcstools
sudo apt-get install -y podman-docker maven git curl iproute2 wcstools zstd
sudo touch /etc/containers/nodocker
cd test
sh setup-dependencies.sh
- name: Build the test images
run: |
cd test
. includes/common.sh
test_create_all_containers
for img in $(docker image ls --format "{{.Repository}}:{{.Tag}}" | sed 's|^localhost/||'); do
if [[ "$img" != "$IMG"* ]] && [[ "$img" != "$HTTPD_IMG"* ]]; then continue; fi
echo "Saving $img image"
docker save $img | zstd -T0 -o /tmp/$(echo $img | sed 's|:|-|').tar.zst
done
- name: Preserve the test images
uses: actions/upload-artifact@v6
with:
name: test-containers-${{ matrix.os }}
path: /tmp/*.tar.zst
retention-days: 1
# the tests themselves need these, they don't run setup-dependencies.sh
- name: Preserve the test dependencies
uses: actions/upload-artifact@v6
with:
name: test-dependencies-${{ matrix.os }}
path: |
test/websocket/websocket-hello-0.0.1.war
test/includes/target/test-1.0.jar
retention-days: 1

test-extra:
name: test-extra (${{ matrix.os }}, ${{ matrix.test.name }})
runs-on: ${{ matrix.os }}
needs: build-test-containers
strategy:
fail-fast: false
matrix:
os: [ ubuntu-latest, ubuntu-24.04-arm ]
# these tests take a lot of time, that's why we keep them separate
test:
- name: MODCLUSTER-736
script: MODCLUSTER-736/testit.sh

- name: Hanging tests
script: hangingtests.sh
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup dependencies
run: |
sudo apt-get update -y
sudo apt-get install -y podman-docker git curl iproute2 wcstools zstd
sudo touch /etc/containers/nodocker
# create the network (usually done by setup-dependencies.sh
docker network create mod_proxy_cluster_testsuite_net > /dev/null 2>&1 || true
- name: Configure Podman logging driver
run: |
mkdir -p ~/.config/containers
cat <<EOF > ~/.config/containers/containers.conf
[containers]
log_driver = "k8s-file"

[engine]
events_logger = "file"
EOF
- name: Get the test images built
uses: actions/download-artifact@v7
with:
name: test-containers-${{ matrix.os }}
path: /tmp
- name: Load the test images
run: |
cd /tmp
for img in $(ls *.tar.zst); do
echo "Loading $img image"
zstd -dc $img | docker load
done
- name: Run ${{ matrix.test.name }}
run: |
cd test
mkdir logs
. includes/common.sh
run_test "${{ matrix.test.script }}" "${{ matrix.test.name }}"
- name: Preserve test logs
uses: actions/upload-artifact@v6
if: ${{ !cancelled() && env.DEBUG == 'on' }}
with:
name: ${{ matrix.test.name }} logs ${{ matrix.os }}
path: |
test/logs/*
retention-days: 7

tests:
runs-on: ${{ matrix.os }}
needs: build-test-containers
strategy:
fail-fast: false
matrix:
os: [ ubuntu-latest, ubuntu-24.04-arm ]
suite: [ mod_proxy_cluster, mod_proxy_balancer ]
env:
MOD_PROXY_CLUSTER_TESTS: ${{ matrix.suite == 'mod_proxy_cluster' && (inputs.mod_proxy_cluster || 'on') || 'off' }}
MOD_PROXY_BALANCER_TESTS: ${{ matrix.suite == 'mod_proxy_balancer' && (inputs.balancer || 'on') || 'off' }}
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup dependencies
run: |
sudo apt-get update -y
sudo apt-get install -y podman-docker git curl iproute2 wcstools zstd
sudo touch /etc/containers/nodocker
# create the network (usually done by setup-dependencies.sh
docker network create mod_proxy_cluster_testsuite_net > /dev/null 2>&1 || true
- name: Configure Podman logging driver
run: |
mkdir -p ~/.config/containers
Expand All @@ -330,15 +438,37 @@ jobs:
[engine]
events_logger = "file"
EOF
- name: Get the test images built
uses: actions/download-artifact@v7
with:
name: test-containers-${{ matrix.os }}
path: /tmp
- name: Load the test images
run: |
cd /tmp
for img in $(ls *.tar.zst); do
echo "Loading $img image"
zstd -dc $img | docker load
done
- name: Get the test dependencies built
uses: actions/download-artifact@v7
with:
name: test-dependencies-${{ matrix.os }}
path: test
- name: Disable MODCLUSTER-736 and Hanging tests
run: |
cd test
sed -i '/MODCLUSTER-736/s|^|#|' testsuite.sh
sed -i '/Hanging tests/s|^|#|' testsuite.sh
- name: Run testsuite
run: |
cd test
sh testsuite.sh
- name: Preserve test logs
uses: actions/upload-artifact@v6
if: ${{ env.DEBUG == 'on' }}
if: ${{ !cancelled() && env.DEBUG == 'on' }}
with:
name: Test logs ${{ matrix.os }}
name: Test logs ${{ matrix.os }} ${{ matrix.suite }}
path: |
test/logs/*
retention-days: 7
Expand Down Expand Up @@ -403,3 +533,38 @@ jobs:
name: Doxygen docs
path: doxygen-out/html/*
retention-days: 30

gather-results:
runs-on: ubuntu-latest
if: always()
# make-with-httpd-trunk is in there transitively through perl tests
needs: [ tests, perl-tests, clang-style-checks, cmake-fedora-latest, make-httpd-maintainer-mode, make-fedora-latest, doxygen, cmake-windows-latest, test-extra ]
steps:
# Check that all the needs jobs were successful
- name: Check the results of all the jobs
if: always()
run: |
results="${{ join(needs.*.result, ' ') }}"
echo "Job results: $results"
for result in $results; do
if [ "$result" != "success" ]; then
echo "At least one job did not succeed"
exit 1
fi
done
- name: Delete all the containers/dependencies we no longer need
uses: geekyeggo/delete-artifact@v6
with:
name: |
test-containers*
test-dependencies*
failOnError: false
- name: Merge all the logs
uses: actions/upload-artifact/merge@v6
with:
name: Test logs
pattern: '*logs*'
separate-directories: true
delete-merged: true
retention-days: 7

Loading
Loading