name: Dev on: workflow_dispatch: inputs: job_id: type: choice description: Specific job to run default: all required: true options: - all - canary - dragon - puffin - dodo - passenger - greatawk - wasp - bat - pterodactyl - bigbird - camel - chaffinch - fruitbat - ptarmigan - zebrilus - bee push: branches: [ master, "release/**" ] pull_request: branches: [ master ] permissions: contents: read env: CFLAGS_GCC_STYLE: '-Wall -Wextra -pedantic -Wdeclaration-after-statement -Wshadow -Wno-overlength-strings -Wimplicit-fallthrough' CFLAGS_MSVC: '/W3' CMAKE_FLAGS: '-Wdev -Werror=dev -Wdeprecated -Werror=deprecated --warn-uninitialized' jobs: canary: # Tests with: Debug & assertions; link-size=4; libedit name: GCC -O0 runs-on: ubuntu-latest if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'canary') steps: - name: Setup run: | echo "set man-db/auto-update false" | sudo debconf-communicate && sudo dpkg-reconfigure man-db sudo apt-get -qq update sudo apt-get -qq install -y libedit-dev - name: Checkout uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: submodules: true - name: Prepare run: ./autogen.sh - name: Configure run: ./configure CC='gcc -fsanitize=undefined,address -fsanitize-undefined-trap-on-error' CFLAGS="-O0 $CFLAGS_GCC_STYLE" --enable-jit --enable-pcre2-16 --enable-pcre2-32 --enable-debug --enable-Werror --enable-pcre2test-libedit --with-link-size=4 - name: Build run: make -j3 - name: Test run: (make check; rc=$?; for i in test-suite.log Run*Test.log pcre2*_test.log; do echo "== $i =="; cat $i; done; exit $rc) dragon: # Tests with: clang AB/UB; link-size=3. Clang's logo is a dragon. name: Clang runs-on: ubuntu-latest if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'dragon') strategy: fail-fast: false matrix: opt: ["-O0", "-O2"] steps: - name: Checkout uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: submodules: true - name: Prepare run: ./autogen.sh - name: Configure run: ./configure CC='clang -fsanitize=undefined,address,integer -fno-sanitize-recover=undefined,integer -fno-sanitize=unsigned-integer-overflow,unsigned-shift-base,function' CFLAGS="${{ matrix.opt }} $CFLAGS_GCC_STYLE" --enable-jit --enable-pcre2-16 --enable-pcre2-32 --enable-debug --enable-Werror --with-link-size=3 - name: Build run: make -j3 - name: Test run: | ulimit -S -s 49152 # Raise stack limit; ASAN with -O0 is very stack-hungry (make check; rc=$?; for i in test-suite.log Run*Test.log pcre2*_test.log; do echo "== $i =="; cat $i; done; exit $rc) puffin: # Tests with: GCC, -O3, very latest CMake, libedit name: GCC -O3, CMake runs-on: ubuntu-latest if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'puffin') steps: - name: Setup run: | echo "set man-db/auto-update false" | sudo debconf-communicate && sudo dpkg-reconfigure man-db sudo apt-get -qq update sudo apt-get -qq install -y git build-essential cmake zlib1g-dev libbz2-dev libedit-dev - name: Checkout uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: submodules: true - name: Check latest CMake id: get-cmake-ver run: | CMAKE_VER=$(curl -s https://api.github.com/repos/Kitware/CMake/releases/latest | jq -r '.tag_name' | sed 's/^v//') if ! echo "$CMAKE_VER" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$' ; then echo "Extracted CMake version: '$CMAKE_VER'" >&2 echo "This does not match the expected version format" >&2 exit 1 fi echo "CMAKE_VER=$CMAKE_VER" >> $GITHUB_OUTPUT echo "CMAKE_VER=$CMAKE_VER" >> $GITHUB_ENV echo "Latest CMake version is $CMAKE_VER" - name: Cache CMake uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: key: cmake-${{ steps.get-cmake-ver.outputs.CMAKE_VER }}-linux-x86_64 path: cmake-${{ steps.get-cmake-ver.outputs.CMAKE_VER }}-linux-x86_64.tar.gz - name: Install CMake run: | [ -f cmake-${CMAKE_VER}-linux-x86_64.tar.gz ] || curl -L -S -O "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VER}/cmake-${CMAKE_VER}-linux-x86_64.tar.gz" tar -xz -f cmake-${CMAKE_VER}-linux-x86_64.tar.gz -C "$RUNNER_TEMP" realpath "$RUNNER_TEMP/cmake-${CMAKE_VER}-linux-x86_64/bin" >> "$GITHUB_PATH" - name: Configure run: | cmake --version | grep "version ${CMAKE_VER}" || (echo "CMake version mismatch" && exit 1) cmake $CMAKE_FLAGS -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DPCRE2_DEBUG=ON -DPCRE2_SUPPORT_LIBEDIT=ON -DPCRE2_SUPPORT_LIBREADLINE=OFF -DCMAKE_C_FLAGS="$CFLAGS_GCC_STYLE" -DCMAKE_POLICY_VERSION_MINIMUM=$CMAKE_VER -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_BUILD_TYPE=Release -B build - name: Build run: cd build && make -j3 - name: Test run: cd build && ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true) - name: Install run: | cd build cmake --install . --prefix install-dir ../maint/RunManifestTest install-dir ../maint/manifest-cmakeinstall-linux ../maint/RunSymbolTest install-dir/lib/ ../maint/ - name: Test CMake install interface run: | INSTALL_PREFIX=`pwd`/build/install-dir cd maint/cmake-tests/install-interface for useStaticLibs in ON OFF; do echo "== Testing CMake install interface with PCRE2_USE_STATIC_LIBS=$useStaticLibs ==" rm -rf build cmake $CMAKE_FLAGS -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALL_PREFIX" -DPCRE2_USE_STATIC_LIBS=$useStaticLibs -B build (cd build; make) ./build/test_executable ldd ./build/test_executable if [ $useStaticLibs = ON ]; then (ldd ./build/test_executable | grep -q "pcre2") && (echo "Error: PCRE2 found in ldd output" && exit 1) else # Test that the shared library is actually linked in (ldd ./build/test_executable | grep -q "$INSTALL_PREFIX/lib/libpcre2-8.so.0") || (echo "Error: Shared library not linked in" && exit 1) fi done - name: Test CMake build interface run: | BUILD_DIR=`pwd` cp -rp maint/cmake-tests/build-interface ../cmake-tests-build-interface cd ../cmake-tests-build-interface ln -s "$BUILD_DIR" pcre2 for buildLibs in "ON;OFF" "OFF;ON"; do static=`echo $buildLibs | cut -d';' -f1` shared=`echo $buildLibs | cut -d';' -f2` echo "== Testing CMake build interface with BUILD_STATIC_LIBS=$static and BUILD_SHARED_LIBS=$shared ==" rm -rf build cmake $CMAKE_FLAGS -DCMAKE_BUILD_TYPE=Debug -DBUILD_STATIC_LIBS=$static -DBUILD_SHARED_LIBS=$shared -B build (cd build; make) ./build/test_executable ldd ./build/test_executable if [ $static = ON ]; then (ldd ./build/test_executable | grep -q "pcre2") && (echo "Error: PCRE2 found in ldd output" && exit 1) else # Test that the shared library is actually linked in (ldd ./build/test_executable | grep -q "`pwd`/build/pcre2/libpcre2-8.so.0") || (echo "Error: Shared library not linked in" && exit 1) fi done dodo: # Tests with: Autoconf on oldest supported Ubuntu (in non-extended support) name: GCC -Os, old Autotools runs-on: ubuntu-latest container: ubuntu:22.04 if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'dodo') steps: - name: Setup run: | echo "set man-db/auto-update false" | debconf-communicate && dpkg-reconfigure man-db export DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get -qq update apt-get -qq install -y git build-essential autoconf automake libtool - name: Checkout uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: submodules: true - name: Prepare run: ./autogen.sh - name: Configure run: ./configure CFLAGS="-Os $CFLAGS_GCC_STYLE" --enable-jit --enable-pcre2-16 --enable-pcre2-32 --enable-debug --enable-Werror - name: Build run: make -j3 - name: Test run: (make check; rc=$?; for i in test-suite.log Run*Test.log pcre2*_test.log; do echo "== $i =="; cat $i; done; exit $rc) - name: Install run: | make install "DESTDIR=`pwd`/install-dir" maint/RunManifestTest install-dir maint/manifest-makeinstall-linux maint/RunSymbolTest install-dir/usr/local/lib/ maint/ passenger: # Tests with: Autoconf on oldest RHEL (in extended support). # That's the absolute limit to how old a Linux version I'll tolerate regular testing on. name: GCC, very old Autotools runs-on: ubuntu-latest container: redhat/ubi8:8.6 if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'passenger') steps: - name: Setup run: | yum -q makecache yum -q install -y gcc git make automake autoconf libtool diffutils file glibc-langpack-en yum -q update -y glibc-common - name: Checkout uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: submodules: true - name: Prepare run: ./autogen.sh - name: Configure run: ./configure CFLAGS="-O0 $CFLAGS_GCC_STYLE" --enable-jit --enable-pcre2-16 --enable-pcre2-32 --enable-debug --enable-Werror - name: Build run: make -j3 - name: Test run: (make check; rc=$?; for i in test-suite.log Run*Test.log pcre2*_test.log; do echo "== $i =="; cat $i; done; exit $rc) - name: Install run: | make install "DESTDIR=`pwd`/install-dir" maint/RunManifestTest install-dir maint/manifest-makeinstall-linux maint/RunSymbolTest install-dir/usr/local/lib/ maint/ greatawk: # Tests with: GCC, -O2, oldest supported Ubuntu (in non-extended support) name: GCC -O2, old CMake runs-on: ubuntu-latest container: ubuntu:22.04 if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'greatawk') steps: - name: Setup run: | echo "set man-db/auto-update false" | debconf-communicate && dpkg-reconfigure man-db export DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get -qq update apt-get -qq install -y git build-essential cmake zlib1g-dev libbz2-dev libreadline-dev - name: Checkout uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: submodules: true - name: Configure run: cmake $CMAKE_FLAGS -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DPCRE2_DEBUG=ON -DCMAKE_C_FLAGS="$CFLAGS_GCC_STYLE" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -B build - name: Build run: cd build && make -j3 - name: Test run: cd build && ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true) - name: Install run: | cd build cmake --install . --prefix install-dir ../maint/RunManifestTest install-dir ../maint/manifest-cmakeinstall-linux relwithdebinfo ../maint/RunSymbolTest install-dir/lib/ ../maint/ - name: Test CMake install interface run: | INSTALL_PREFIX=`pwd`/build/install-dir cd maint/cmake-tests/install-interface for useStaticLibs in ON OFF; do echo "== Testing CMake install interface with PCRE2_USE_STATIC_LIBS=$useStaticLibs ==" rm -rf build cmake $CMAKE_FLAGS -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_PREFIX_PATH="$INSTALL_PREFIX" -DPCRE2_USE_STATIC_LIBS=$useStaticLibs -B build (cd build; make) ./build/test_executable ldd ./build/test_executable if [ $useStaticLibs = ON ]; then (ldd ./build/test_executable | grep -q "pcre2") && (echo "Error: PCRE2 found in ldd output" && exit 1) else # Test that the shared library is actually linked in (ldd ./build/test_executable | grep -q "$INSTALL_PREFIX/lib/libpcre2-8.so.0") || (echo "Error: Shared library not linked in" && exit 1) fi done - name: Test CMake build interface run: | BUILD_DIR=`pwd` cp -rp maint/cmake-tests/build-interface ../cmake-tests-build-interface cd ../cmake-tests-build-interface ln -s "$BUILD_DIR" pcre2 for buildLibs in "ON;OFF" "OFF;ON"; do static=`echo $buildLibs | cut -d';' -f1` shared=`echo $buildLibs | cut -d';' -f2` echo "== Testing CMake build interface with BUILD_STATIC_LIBS=$static and BUILD_SHARED_LIBS=$shared ==" rm -rf build cmake $CMAKE_FLAGS -DCMAKE_BUILD_TYPE=Debug -DBUILD_STATIC_LIBS=$static -DBUILD_SHARED_LIBS=$shared -B build (cd build; make) ./build/test_executable ldd ./build/test_executable if [ $static = ON ]; then (ldd ./build/test_executable | grep -q "pcre2") && (echo "Error: PCRE2 found in ldd output" && exit 1) else # Test that the shared library is actually linked in (ldd ./build/test_executable | grep -q "`pwd`/build/pcre2/libpcre2-8.so.0") || (echo "Error: Shared library not linked in" && exit 1) fi done wasp: # Tests with: French locale; oldest supported CMake; no JIT; -Os; libreadline name: GCC -Os, very old CMake, ninja, no JIT runs-on: ubuntu-latest if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'wasp') env: CMAKE_VER: "3.15.7" steps: - name: Setup run: | echo "set man-db/auto-update false" | sudo debconf-communicate && sudo dpkg-reconfigure man-db sudo apt-get -qq update sudo apt-get -qq install -y language-pack-fr ninja-build zlib1g-dev libbz2-dev libreadline-dev - name: Checkout uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: submodules: true - name: Cache CMake uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: key: cmake-${{ env.CMAKE_VER }}-Linux-x86_64 path: cmake-${{ env.CMAKE_VER }}-Linux-x86_64.tar.gz - name: Install CMake run: | [ -f cmake-${CMAKE_VER}-Linux-x86_64.tar.gz ] || curl -L -S -O "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VER}/cmake-${CMAKE_VER}-Linux-x86_64.tar.gz" tar -xz -f cmake-${CMAKE_VER}-Linux-x86_64.tar.gz -C "$RUNNER_TEMP" realpath "$RUNNER_TEMP/cmake-${CMAKE_VER}-Linux-x86_64/bin" >> "$GITHUB_PATH" - name: Configure run: | cmake --version | grep "version ${CMAKE_VER}" || (echo "CMake version mismatch" && exit 1) CC='clang' cmake $CMAKE_FLAGS -G Ninja -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DPCRE2_DEBUG=ON -DPCRE2_SUPPORT_LIBREADLINE=ON -DCMAKE_C_FLAGS="$CFLAGS_GCC_STYLE" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_BUILD_TYPE=MinSizeRel -B build - name: Build run: ninja -C build - name: Test run: cd build && ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true) - name: Install run: | cd build cmake --install . --prefix install-dir ../maint/RunManifestTest install-dir ../maint/manifest-cmakeinstall-linux minsizerel ../maint/RunSymbolTest install-dir/lib/ ../maint/ bat: # Tests with: MSVC 32-bit, and a variety of CMake options. Windows has "bat" files. name: Windows (Win32) runs-on: windows-latest if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'bat') steps: - name: Checkout uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: submodules: true - name: Configure run: cmake $CMAKE_FLAGS -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DPCRE2GREP_SUPPORT_CALLOUT_FORK=OFF -DPCRE2_DEBUG=ON -DPCRE2_NEWLINE=ANYCRLF -DPCRE2_STATIC_PIC=ON -DPCRE2_SUPPORT_BSR_ANYCRLF=ON -DBUILD_SHARED_LIBS=OFF -DBUILD_STATIC_LIBS=ON -DCMAKE_C_FLAGS="$CFLAGS_MSVC" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded -B build -A Win32 - name: Build run: cmake --build build --config RelWithDebInfo - name: Test run: cd build && ctest -C RelWithDebInfo -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true) pterodactyl: # Tests with: MSVC 64-bit, Debug, shared libraries name: Windows (x64) runs-on: windows-latest if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'pterodactyl') steps: - name: Checkout uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: submodules: true - name: Configure run: cmake $CMAKE_FLAGS -DPCRE2_SUPPORT_JIT=OFF -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DPCRE2_DEBUG=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=OFF -DCMAKE_C_FLAGS="$CFLAGS_MSVC" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -B build -A x64 - name: Build run: cmake --build build --config Debug - name: Test run: cd build && ctest -C Debug -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true) bigbird: # Job to execute ManyConfigTests name: manyconfig runs-on: ubuntu-latest if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'bigbird') steps: - name: Setup run: | echo "set man-db/auto-update false" | sudo debconf-communicate && sudo dpkg-reconfigure man-db sudo apt-get -qq update sudo apt-get -qq install -y valgrind - name: Checkout uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: submodules: true - name: Run run: | ./autogen.sh ./maint/ManyConfigTests camel: # Job to execute RunPerlTest. "Camel bird" is another name for an ostrich (and it's Perl's logo). name: perl runs-on: ubuntu-latest container: perl:devel if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'camel') steps: - name: Checkout uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: submodules: yes - name: Test run: | perl -v maint/RunPerlTest chaffinch: # Job to verify that the CMake "unity" build (single-file / jumbo build) passes. # If this fails, it's usually because two different files define some file-static # functions or macros which collide. name: CMake unity build runs-on: ubuntu-latest if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'chaffinch') env: # Disallowing shadowing would be very spammy for unity builds, because the # same variable name can be used in multiple files. CFLAGS_UNITY: "-Wno-shadow" steps: - name: Checkout uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: submodules: true - name: Configure run: cmake $CMAKE_FLAGS -DCMAKE_UNITY_BUILD=ON -DCMAKE_UNITY_BUILD_BATCH_SIZE=0 -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DPCRE2_DEBUG=ON -DCMAKE_C_FLAGS="$CFLAGS_GCC_STYLE $CFLAGS_UNITY" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_BUILD_TYPE=Release -B build - name: Build run: cd build && make -j3 - name: Test run: cd build && ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true) fruitbat: # Tests with: MSYS2 unix-on-Windows environment name: MSYS2 runs-on: windows-latest if: | (github.event_name == 'workflow_dispatch' && (inputs.job_id == 'all' || inputs.job_id == 'fruitbat')) || github.event_name == 'push' strategy: fail-fast: false matrix: # UCRT64 is the new default MSYS2 runtime, which builds native 64-bit # binaries which can then be shipped and run on systems without MSYS2 # installed (using MinGW-x64 + the UCRT). # MSYS is the Unix-variant runtime, which builds binaries that have a # dependency on MSYS2 being installed, but those binaries then use a # full emulated Unix environment at runtime. msystem: ["UCRT64", "MSYS"] steps: - name: Pre-checkout run: git config --global core.autocrlf input - name: Checkout uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: submodules: true - name: Setup uses: msys2/setup-msys2@fb197b72ce45fb24f17bf3f807a388985654d1f2 # v2.29.0 with: msystem: ${{ matrix.msystem }} update: true pacboy: diffutils gcc:p cmake:p ninja:p ${{ matrix.msystem == 'MSYS' && 'libreadline:p' || 'readline:p' }} - name: Configure shell: msys2 {0} run: cmake $CMAKE_FLAGS -G Ninja -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DPCRE2_DEBUG=ON -DCMAKE_C_FLAGS="$CFLAGS_GCC_STYLE" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_BUILD_TYPE=Release -B build - name: Build shell: msys2 {0} run: ninja -C build - name: Test shell: msys2 {0} run: cd build && ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true) ptarmigan: # Tests with various unusual processor architectures name: Multiarch strategy: fail-fast: false matrix: include: # S390x is important, because it's basically the only supported big-endian # architecture I can find anywhere. I used to work on SPARC and PPC-be systems # a long time ago, but even Debian has dropped those architectures now, so # it's nice that there's *least one* arch remaining to shake out endian # assumptions. - arch: "s390x" distro: ubuntu_latest # Big-iron POWER only (this is not the PowerPC arch used in old Apple Macs) - arch: "ppc64le" distro: "ubuntu_latest" # A 32-bit Linux build. i386 is mostly gone now, so ARMv7 is all that's left. - arch: "armv7" distro: "ubuntu_latest" # The only really widely-deployed non-x86 archicture, at least that's likely # to be running PCRE2. - arch: "aarch64" distro: "ubuntu_latest" # Not used by anyone yet, really, but potentially the "next big thing". - arch: "riscv64" distro: "ubuntu_latest" runs-on: ubuntu-latest permissions: contents: read packages: write # Necessary for uraimo/run-on-arch-action to use GitHub's Docker repository as a cache if: | (github.event_name == 'workflow_dispatch' && (inputs.job_id == 'all' || inputs.job_id == 'ptarmigan')) || github.event_name == 'push' steps: - name: Checkout uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: submodules: true - name: Prepare run: ./autogen.sh - uses: uraimo/run-on-arch-action@d94c13912ea685de38fccc1109385b83fd79427d # v3.0.1 name: Configure, build, and test with: arch: ${{ matrix.arch }} distro: ${{ matrix.distro }} # Not required, but speeds up builds by storing container images in # a GitHub package registry. githubToken: ${{ github.token }} env: | # YAML, but pipe character is necessary CFLAGS_GCC_STYLE: ${{ env.CFLAGS_GCC_STYLE }} CMAKE_FLAGS: ${{ env.CMAKE_FLAGS }} install: | echo "set man-db/auto-update false" | debconf-communicate && dpkg-reconfigure man-db apt-get -qq update apt-get -qq install -y gcc cmake ninja-build zlib1g-dev libbz2-dev libreadline-dev run: | set -e # TODO: Set -DCMAKE_COMPILE_WARNING_AS_ERROR=ON (there's currently a build failure on S390x) cmake $CMAKE_FLAGS -G Ninja -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DPCRE2_DEBUG=ON -DCMAKE_C_FLAGS="$CFLAGS_GCC_STYLE" -DCMAKE_COMPILE_WARNING_AS_ERROR=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo -B build cd build ninja ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true) zebrilus: # Tests with: Zig compiler. A "zebrilus" is known as a "zigzag heron". name: Zig runs-on: ubuntu-latest if: | (github.event_name == 'workflow_dispatch' && (inputs.job_id == 'all' || inputs.job_id == 'zebrilus')) || github.event_name == 'push' steps: - name: Setup run: | sudo snap install zig --classic --beta - name: Checkout uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: submodules: true - name: Build run: zig build -Dsupport_jit - name: Test run: | srcdir=`pwd` pcre2test=`pwd`/zig-out/bin/pcre2test ./RunTest -bigstack bee: # Tests with: Bazel build system. A bee goes "buzz buzz buzz(el)". name: Bazel strategy: fail-fast: false matrix: os: ["ubuntu-latest", "windows-latest"] runs-on: ${{ matrix.os }} if: | (github.event_name == 'workflow_dispatch' && (inputs.job_id == 'all' || inputs.job_id == 'bee')) || github.event_name == 'push' steps: - name: Checkout uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: submodules: true - name: Build run: bazelisk build //... --enable_runfiles --incompatible_strict_action_env - name: Test run: bazelisk test //... --enable_runfiles --incompatible_strict_action_env --test_output=all