Add basic tests into CI #225
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: | |
- '*' | |
pull_request: | |
branches: | |
- '*' | |
jobs: | |
cmake-fedora-latest: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
compiler: [ gcc, clang ] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
path: mod_proxy_cluster | |
- name: Setup Podman | |
run: | | |
sudo apt update | |
sudo apt-get -y install podman | |
podman pull fedora:38 | |
- name: Create container and build | |
run: | | |
{ | |
echo 'FROM fedora:38' | |
echo 'RUN dnf install cmake httpd-devel ${{ matrix.compiler }} -y' | |
echo 'RUN dnf groupinstall "C Development Tools and Libraries" -y' | |
echo 'RUN dnf clean all' | |
echo 'COPY mod_proxy_cluster mod_proxy_cluster' | |
echo 'WORKDIR /mod_proxy_cluster/native' | |
echo 'RUN cmake . -DCMAKE_C_COMPILER=${{ matrix.compiler }}' | |
echo 'RUN make' | |
} > podmanfile | |
podman build -f ./podmanfile | |
name: cmake-fedora-latest | |
make-fedora-latest: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
path: mod_proxy_cluster | |
- name: Setup Podman | |
run: | | |
sudo apt update | |
sudo apt-get -y install podman | |
podman pull fedora:38 | |
- name: Create container and build | |
run: | | |
{ | |
echo 'FROM fedora:38' | |
echo 'RUN dnf install httpd-devel redhat-rpm-config -y' | |
echo 'RUN dnf groupinstall "C Development Tools and Libraries" -y' | |
echo 'RUN dnf clean all' | |
echo 'COPY mod_proxy_cluster mod_proxy_cluster' | |
echo 'WORKDIR /mod_proxy_cluster/native' | |
echo 'RUN \' | |
echo 'for module in advertise/ mod_proxy_cluster/ balancers/ mod_manager; do \' | |
echo ' echo Building: $module; \' | |
echo ' cd $module; \' | |
echo ' sh buildconf; \' | |
echo ' ./configure --with-apxs=$APACHE_DIR/bin/apxs; \' | |
echo ' make clean; \' | |
# Ensure the build fails in case of a failure in any of the module builds! | |
echo ' make || exit 1; \' | |
echo ' cd ..; \' | |
echo 'done;' | |
} > podmanfile | |
podman build -f ./podmanfile | |
clang-format-style-check: | |
# The ubuntu-latest has an old version of clang-format, let's just use the latest installed via brew. | |
runs-on: macos-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
path: mod_proxy_cluster | |
- name: Install clang-format | |
run: | | |
brew install clang-format | |
- name: Check styles | |
# Take full control over shell parameters by providing a template string to the shell options | |
# to display the resulting diff in the build logs. | |
shell: bash {0} | |
run: | | |
code=0 | |
cd mod_proxy_cluster/native | |
for file in */*.c */*.h; do | |
clang-format $file -n &> diff.txt; | |
if [ ! -s diff.txt ]; then | |
printf "%-42s ... OK\n" $file | |
else | |
cat diff.txt | |
printf "%-42s ... NOK\n" $file | |
code=1 | |
fi | |
rm diff.txt || true # we don't fail if the file does not exist | |
done; | |
exit $code | |
make-httpd-maintainer-mode: | |
runs-on: ubuntu-latest | |
container: | |
image: quay.io/mod_cluster/ci-httpd-dev | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Build | |
run: | | |
cd native | |
for module in advertise/ mod_proxy_cluster/ balancers/ mod_manager/; do \ | |
cd $module; \ | |
sh buildconf; \ | |
./configure --with-apxs=/usr/local/apache2/bin/apxs; \ | |
make clean; \ | |
make || exit 1; \ | |
cd ..; \ | |
done; | |
cmake-windows-latest: | |
runs-on: windows-latest | |
env: | |
APACHE_LOUNGE_DISTRO_VERSION: 2.4.57 | |
HTTPD_DEV_HOME: '${{ github.workspace }}\httpd-apache-lounge\Apache24' | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Setup Developer Command Prompt for Microsoft Visual C++ | |
uses: ilammy/msvc-dev-cmd@v1 | |
- name: Get httpd | |
run: | | |
curl.exe --output "httpd-apache-lounge.zip" --url "https://www.apachelounge.com/download/VS16/binaries/httpd-${{ env.APACHE_LOUNGE_DISTRO_VERSION }}-win64-VS16.zip" | |
Expand-Archive -Path "httpd-apache-lounge.zip" -DestinationPath "httpd-apache-lounge" | |
- name: Build | |
run: | | |
./native/scripts/windows-build.bat | |
tests: | |
runs-on: ubuntu-latest | |
env: | |
IMG: local-tomcat | |
HTTPD_IMG: local-httpd | |
DEBUG: on | |
FOREVER_PAUSE: 30 | |
ITERATION_COUNT: 2 | |
TOMCAT_CYCLE_COUNT: 2 | |
strategy: | |
fail-fast: false | |
matrix: | |
# Those are currently all tests we have. In CI only MODCLUSTER-755/testit.sh passes, so until we fix the issue, only this test is enabled. | |
# testcase: [ basetests.sh, hangingtests.sh, maintests.sh, JBCS-1236/testit.sh, MODCLUSTER-640/testit.sh, MODCLUSTER-734/testit.sh, MODCLUSTER-755/testit.sh, MODCLUSTER-785/testit.sh ] | |
testcase: [ MODCLUSTER-755/testit.sh ] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Setup dependencies | |
run: | | |
sudo apt update -y | |
sudo apt install -y moby* maven git curl iproute2 | |
cd test | |
sh setup-dependencies.sh | |
- name: Setup images | |
run: | | |
cd test | |
source includes/common.sh | |
httpd_create | |
tomcat_create | |
- name: Run test | |
shell: bash {0} | |
run: | | |
cd test | |
mkdir logs | |
# set vars | |
export MPC_SOURCES=$(git remote -v | grep "origin.*fetch" | awk ' { print $2 } ') | |
export MPC_BRANCH=$(git branch --show-current) | |
source includes/common.sh | |
run_test "${{ matrix.testcase }}" $(echo ${{ matrix.testcase }} | cut -f1 -d/) | |
- name: Preserve test logs | |
uses: actions/upload-artifact@v3 | |
if: always() | |
with: | |
name: Test logs | |
path: | | |
test/logs/* | |
retention-days: 7 |