Edit

kc3-lang/libevent/.github/workflows/build.yml

Branch :

  • Show log

    Commit

  • Author : Hennadii Stepanov
    Date : 2024-05-10 20:00:37
    Hash : 525f5d0a
    Message : ci: Switch `lukka/run-vcpkg` back to v7 Newer versions expect a vcpkg manifest.

  • .github/workflows/build.yml
  • ---
    name: build
    
    on:
      pull_request:
        types:
          - synchronize
          - reopened
          - opened
        branches:
          - master
        paths-ignore:
          - '**.md'
          - '.mailmap'
          - 'ChangeLog*'
          - 'whatsnew*'
          - 'LICENSE'
      push:
        branches:
          - master
        paths-ignore:
          - '**.md'
          - '.mailmap'
          - 'ChangeLog*'
          - 'whatsnew*'
          - 'LICENSE'
    
    permissions: read-all
    
    jobs:
      linux-cmake-job:
        runs-on: ${{ matrix.os }}
        if: "!contains(github.event.head_commit.message, 'ci/linux skip') && !contains(github.event.head_commit.message, 'ci/linux/cmake skip')"
        strategy:
          fail-fast: false
          matrix:
            os: [ubuntu-20.04]
            EVENT_MATRIX:
              - DIST
              - NONE
              - NO_SSL
              - REQUIRE_SSL
              - DISABLE_OPENSSL
              - DISABLE_THREAD_SUPPORT
              - DISABLE_DEBUG_MODE
              - DISABLE_MM_REPLACEMENT
              - COMPILER_CLANG
              - TEST_EXPORT_STATIC
              - TEST_EXPORT_SHARED
            include:
              - os: ubuntu-22.04
                EVENT_MATRIX: OPENSSL_3
              # use recent ubuntu with recent clang for recent sanitizers
              - os: ubuntu-22.04
                EVENT_MATRIX: TSAN
              - os: ubuntu-22.04
                EVENT_MATRIX: ASAN
              - os: ubuntu-22.04
                EVENT_MATRIX: UBSAN
    
        steps:
          - uses: actions/checkout@v4
          - name: Cache Build
            uses: actions/cache@v4
            with:
              path: build
              key: ${{ matrix.os }}-cmake-${{ matrix.EVENT_MATRIX }}-v3
          - name: Cache Dist Build
            uses: actions/cache@v4
            with:
              path: dist
              key: ${{ matrix.os }}-cmake-dist-${{ matrix.EVENT_MATRIX }}-v3
    
          - name: Install Depends
            run: |
              sudo apt-get update
              sudo apt-get install -y libmbedtls-dev
    
          - name: Build
            shell: bash
            run: |
              if [ "${{ matrix.EVENT_MATRIX }}" == "DIST" ]; then
                ./autogen.sh
                mkdir -p dist
                cd dist
                ../configure
                rm -fr *.tar.gz
                make dist
                archive=$(echo *.tar.gz)
                tar -vxf $archive
                cd $(basename $archive .tar.gz)
              fi
    
              if [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_OPENSSL" ]; then
                EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_OPENSSL=ON"
              elif [ "${{ matrix.EVENT_MATRIX }}" == "NO_SSL" ]; then
                EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_OPENSSL=ON -DEVENT__DISABLE_MBEDTLS=ON"
              elif [ "${{ matrix.EVENT_MATRIX }}" == "REQUIRE_SSL" ]; then
                EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_OPENSSL=OFF -DEVENT__DISABLE_MBEDTLS=OFF"
              elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_THREAD_SUPPORT" ]; then
                EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_THREAD_SUPPORT=ON"
              elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_DEBUG_MODE" ]; then
                EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_DEBUG_MODE=ON"
              elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_MM_REPLACEMENT" ]; then
                EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_MM_REPLACEMENT=ON"
              elif [ "${{ matrix.EVENT_MATRIX }}" == "COMPILER_CLANG" ]; then
                EVENT_CMAKE_OPTIONS=""
                export CC=clang
              elif [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_STATIC" ]; then
                EVENT_CMAKE_OPTIONS="-DEVENT__LIBRARY_TYPE=STATIC -DEVENT__DISABLE_TESTS=ON -DEVENT__DISABLE_SAMPLES=ON"
              elif [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_SHARED" ]; then
                EVENT_CMAKE_OPTIONS="-DEVENT__LIBRARY_TYPE=SHARED -DEVENT__DISABLE_TESTS=ON -DEVENT__DISABLE_SAMPLES=ON"
              elif [ "${{ matrix.EVENT_MATRIX }}" == "ASAN" ]; then
                EVENT_CMAKE_OPTIONS="-DCMAKE_C_FLAGS=-fsanitize=address -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=debug"
              elif [ "${{ matrix.EVENT_MATRIX }}" == "TSAN" ]; then
                EVENT_CMAKE_OPTIONS="-DCMAKE_C_FLAGS=-fsanitize=thread -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=debug"
              elif [ "${{ matrix.EVENT_MATRIX }}" == "UBSAN" ]; then
                EVENT_CMAKE_OPTIONS="-DCMAKE_C_FLAGS=-fsanitize=undefined -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=debug"
              else
                EVENT_CMAKE_OPTIONS=""
              fi
    
              mkdir -p build
              cd build
              echo [cmake]: cmake .. -DEVENT__ENABLE_GCC_WARNINGS=ON $EVENT_CMAKE_OPTIONS
              cmake .. -DEVENT__ENABLE_GCC_WARNINGS=ON $EVENT_CMAKE_OPTIONS || (rm -rf * && cmake .. -DEVENT__ENABLE_GCC_WARNINGS=ON $EVENT_CMAKE_OPTIONS)
              cmake --build .
    
          - name: Test
            uses: nick-fields/retry@v3
            with:
              max_attempts: 5
              timeout_minutes: 60
              shell: bash
              command: |
                JOBS=20
                export CTEST_PARALLEL_LEVEL=$JOBS
                export CTEST_OUTPUT_ON_FAILURE=1
    
                # Enable allocator_may_return_null for test_event_calloc_enomem
                export TSAN_OPTIONS=suppressions=$PWD/extra/tsan.supp:allocator_may_return_null=1
                export LSAN_OPTIONS=suppressions=$PWD/extra/lsan.supp
                export ASAN_OPTIONS=allocator_may_return_null=1
    
                if [ "${{ matrix.EVENT_MATRIX }}" == "DIST" ]; then
                  cd dist
                  archive=$(echo *.tar.gz)
                  cd $(basename $archive .tar.gz)
                fi
                cd build
    
                if [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_STATIC" ]; then
                  sudo python3 ../test-export/test-export.py static
                elif [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_SHARED" ]; then
                  sudo python3 ../test-export/test-export.py shared
                else
                  cmake --build . --target verify
                fi
    
          - uses: actions/upload-artifact@v4
            if: failure() && matrix.EVENT_MATRIX != 'DIST'
            with:
              name: ${{ matrix.os }}-cmake-${{ matrix.EVENT_MATRIX }}-build
              path: build
          - uses: actions/upload-artifact@v4
            if: failure() && matrix.EVENT_MATRIX == 'DIST'
            with:
              name: ${{ matrix.os }}-cmake-${{ matrix.EVENT_MATRIX }}-dist
              path: dist
    
      linux-autotools-job:
        runs-on: ${{ matrix.os }}
        if: "!contains(github.event.head_commit.message, 'ci/linux skip') && !contains(github.event.head_commit.message, 'ci/linux/autotools skip')"
        strategy:
          fail-fast: false
          matrix:
            os: [ubuntu-20.04]
            include:
              # openssl 3.0
              - os: ubuntu-22.04
    
        steps:
          - uses: actions/checkout@v4
          - name: Cache Build
            uses: actions/cache@v4
            with:
              path: dist
              key: ${{ matrix.os }}-autotools-${{ matrix.EVENT_MATRIX }}-v3
    
          - name: Install Depends
            run: |
              sudo apt-get update
              sudo apt-get install -y libmbedtls-dev
    
          - name: Build
            shell: bash
            run: |
              ./autogen.sh
    
              # dist archive
              mkdir -p dist
              cd dist
              rm -fr *.tar.gz
              ../configure
              make dist
              archive=$(echo *.tar.gz)
              tar -vxf $archive
              cd $(basename $archive .tar.gz)
              # \dist archive
    
              mkdir -p build
              cd build
              echo [configure]: ../configure --enable-gcc-warnings
              ../configure --enable-gcc-warnings
              make
          - name: Test
            uses: nick-fields/retry@v3
            with:
              max_attempts: 5
              timeout_minutes: 60
              shell: bash
              command: |
                JOBS=20
    
                cd dist
                archive=$(echo *.tar.gz)
                cd $(basename $archive .tar.gz)
    
                cd build
                make -j $JOBS verify
    
          - uses: actions/upload-artifact@v4
            if: failure()
            with:
              name: ${{ matrix.os }}-autotools-${{ matrix.EVENT_MATRIX }}-dist
              path: dist
    
      windows-vs-job:
        runs-on: ${{ matrix.os }}
        if: "!contains(github.event.head_commit.message, 'ci/windows skip')"
        strategy:
          fail-fast: false
          matrix:
            os: [windows-latest]
            EVENT_MATRIX:
              - NONE
              - NO_SSL
              - LIBRARY_TYPE_STATIC
              - DISABLE_OPENSSL
              - DISABLE_THREAD_SUPPORT
              - DISABLE_DEBUG_MODE
              - DISABLE_MM_REPLACEMENT
              - DUNICODE
              - UNICODE_TEMPORARY_DIRECTORY
              - TEST_EXPORT_SHARED
              - TEST_EXPORT_STATIC
    
        steps:
          - uses: actions/checkout@v4
    
          - name: Cache Build
            uses: actions/cache@v4
            with:
              path: build
              key: ${{ matrix.os }}-${{ matrix.EVENT_MATRIX }}-v4
    
          - name: Prepare vcpkg
            uses: lukka/run-vcpkg@v7
            id: runvcpkg
            with:
              vcpkgArguments: zlib:x64-windows openssl:x64-windows mbedtls:x64-windows
              vcpkgDirectory: ${{ runner.workspace }}/vcpkg/
              vcpkgTriplet: x64-windows
              vcpkgGitCommitId: c8696863d371ab7f46e213d8f5ca923c4aef2a00  # 2023.12.12
    
          - name: Build
            shell: powershell
            run: |
              $EVENT_BUILD_PARALLEL=10
    
              if ( "${{ matrix.EVENT_MATRIX }}" -eq "LIBRARY_TYPE_STATIC" ) {
                $EVENT_CMAKE_OPTIONS="-DEVENT__LIBRARY_TYPE=STATIC -DEVENT__MSVC_STATIC_RUNTIME=OFF"
              }
              elseif ( "${{ matrix.EVENT_MATRIX }}" -eq "DISABLE_OPENSSL" ) {
                $EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_OPENSSL=ON"
              }
              elseif ( "${{ matrix.EVENT_MATRIX }}" -eq "DISABLE_THREAD_SUPPORT" ) {
                $EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_THREAD_SUPPORT=ON"
              }
              elseif ( "${{ matrix.EVENT_MATRIX }}" -eq "DISABLE_DEBUG_MODE" ) {
                $EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_DEBUG_MODE=ON"
              }
              elseif ( "${{ matrix.EVENT_MATRIX }}" -eq "DISABLE_MM_REPLACEMENT" ) {
                $EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_MM_REPLACEMENT=ON"
              }
              elseif ( "${{ matrix.EVENT_MATRIX }}" -eq "UNICODE" ) {
                $EVENT_CMAKE_OPTIONS="-DCMAKE_C_FLAGS='-DUNICODE -D_UNICODE'"
              }
              elseif ( "${{ matrix.EVENT_MATRIX }}" -eq "UNICODE_TEMPORARY_DIRECTORY" ) {
                $EVENT_CMAKE_OPTIONS=""
                mkdir "${{ runner.workspace }}\𝑼𝑡𝑰π‘ͺ𝑢𝑫𝑬"
                echo "TMP=${{ runner.workspace }}\𝑼𝑡𝑰π‘ͺ𝑢𝑫𝑬" >> $env:GITHUB_ENV
              }
              elseif ( "${{ matrix.EVENT_MATRIX }}" -eq "TEST_EXPORT_SHARED" ) {
                $EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_TESTS=ON -DEVENT__DISABLE_SAMPLES=ON"
              }
              elseif ( "${{ matrix.EVENT_MATRIX }}" -eq "TEST_EXPORT_STATIC" ) {
                $EVENT_CMAKE_OPTIONS="-DEVENT__LIBRARY_TYPE=STATIC -DEVENT__MSVC_STATIC_RUNTIME=OFF -DEVENT__DISABLE_TESTS=ON -DEVENT__DISABLE_SAMPLES=ON"
              }
              elseif ( "${{ matrix.EVENT_MATRIX }}" -eq "NO_SSL" ) {
                $EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_OPENSSL=ON -DEVENT__DISABLE_MBEDTLS=ON"
              }
              else {
                $EVENT_CMAKE_OPTIONS=""
              }
    
              mkdir build -ea 0
              cd build
    
              $CMAKE_CMD="cmake -G 'Visual Studio 17 2022' -A x64 -DCMAKE_TOOLCHAIN_FILE=${{ runner.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake .. $EVENT_CMAKE_OPTIONS"
              function cmake_configure($retry)
              {
                $errcode=0
                try {
                  if ($retry -eq 0) {
                    echo "[cmake configure retry] $CMAKE_CMD"
                  } else {
                    echo "[cmake configure] $CMAKE_CMD"
                  }
                  Invoke-Expression $CMAKE_CMD
                  $errcode=$LastExitCode
                }
                catch {
                  $errcode=1
                }
                finally {
                  if ($errcode -ne 0) {
                    if ($retry -eq 0) {
                      $host.SetShouldExit($LastExitCode)
                    } else {
                      echo "Remove all entries in build directory"
                      rm -r -fo *
                      cmake_configure 0
                    }
                  }
                }
              }
              cmake_configure 1
              cmake --build . -j $EVENT_BUILD_PARALLEL -- /nologo /verbosity:minimal
    
          - name: Test
            uses: nick-fields/retry@v3
            with:
              max_attempts: 5
              timeout_minutes: 60
              shell: powershell
              command: |
                $EVENT_TESTS_PARALLEL=1
    
                cd build
    
                try {
                  if ("${{ matrix.EVENT_MATRIX }}" -eq "TEST_EXPORT_STATIC") {
                    python ../test-export/test-export.py static
                  } elseif ("${{ matrix.EVENT_MATRIX }}" -eq "TEST_EXPORT_SHARED") {
                    python ../test-export/test-export.py shared
                  } else {
                    ctest --output-on-failure -j $EVENT_TESTS_PARALLEL
                    if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }
                  }
                } catch {
                  $host.SetShouldExit($LastExitCode)
                }
    
          - uses: actions/upload-artifact@v4
            if: failure()
            with:
              name: ${{ matrix.os }}-${{ matrix.EVENT_MATRIX }}-build
              path: build
    
      mingw-autotools-job:
        runs-on: windows-latest
        if: "!contains(github.event.head_commit.message, 'ci/mingw skip') && !contains(github.event.head_commit.message, 'ci/mingw/autotools skip')"
        strategy:
          fail-fast: false
    
        steps:
          - uses: actions/checkout@v4
          - name: Cache Build
            uses: actions/cache@v4
            with:
              path: build
              key: mingw-autotools-v5
          - name: Setup MSYS2
            uses: msys2/setup-msys2@v2
            with:
              msystem: MINGW64
              update: true
              install: mingw-w64-x86_64-gcc autoconf automake libtool mingw-w64-x86_64-openssl mingw-w64-x86_64-mbedtls pkg-config
    
          - name: Build
            shell: powershell
            run: |
              $env:EVENT_BUILD_PARALLEL=10
    
              $script='
              export PATH="/mingw64/bin:/usr/bin:/bin:/usr/local/bin:/opt/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:$PATH"
              ./autogen.sh 2>&1 3>&1
              [[ $? -ne 0 ]] && exit 1
              mkdir -p build
              cd build
              [[ $? -ne 0 ]] && exit 1
              LDFLAGS="-L/mingw64/lib" CFLAGS="-I/mingw64/include" ../configure 2>&1
              [[ $? -ne 0 ]] && exit 1
              make -j $EVENT_BUILD_PARALLEL 2>&1
              [[ $? -ne 0 ]] && exit 1
              exit 0
              '
              D:\a\_temp\msys64\usr\bin\bash.exe -c $script
    
          - name: Test
            uses: nick-fields/retry@v3
            with:
              max_attempts: 5
              timeout_minutes: 60
              shell: powershell
              command: |
                $env:EVENT_TESTS_PARALLEL=1
    
                $script='
                export PATH="/mingw64/bin:/usr/bin:/bin:/usr/local/bin:/opt/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:$PATH"
                cd build
                make verify -j $EVENT_TESTS_PARALLEL 2>&1 '
                D:\a\_temp\msys64\usr\bin\bash.exe -c $script
    
          - uses: actions/upload-artifact@v4
            if: failure()
            with:
              name: mingw-${{ matrix.EVENT_MATRIX }}-build
              path: build
    
      mingw-cmake-job:
        runs-on: windows-latest
        # FIXME: disabled for now, see [1].
        #   [1]: https://github.com/libevent/libevent/issues/1207
        if: "false && !contains(github.event.head_commit.message, 'ci/mingw skip') && !contains(github.event.head_commit.message, 'ci/mingw/cmake skip')"
        strategy:
          fail-fast: false
          matrix:
            EVENT_MATRIX:
              - NONE
              - NO_SSL
              - DISABLE_OPENSSL
              - DISABLE_THREAD_SUPPORT
              - DISABLE_DEBUG_MODE
              - DISABLE_MM_REPLACEMENT
    
        steps:
          - uses: actions/checkout@v4
          - name: Cache Build
            uses: actions/cache@v4
            with:
              path: build
              key: mingw-cmake-${{ matrix.EVENT_MATRIX }}-v4
    
          - name: Setup MSYS2
            uses: msys2/setup-msys2@v2
            with:
              msystem: MINGW64
              update: true
              install: mingw-w64-x86_64-gcc mingw-w64-x86_64-openssl mingw-w64-x86_64-mbedtls
    
          - name: Build
            shell: powershell
            run: |
              $EVENT_CMAKE_OPTIONS=""
              if ( "${{ matrix.EVENT_MATRIX }}" -ne "NO_SSL" ) {
                $EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_OPENSSL=ON -DEVENT__DISABLE_MBEDTLS=ON"
              }
              elseif ( "${{ matrix.EVENT_MATRIX }}" -ne "NONE" ) {
                $EVENT_CMAKE_OPTIONS="-DEVENT__${{ matrix.EVENT_MATRIX }}=ON"
              }
              $env:PATH="D:\a\_temp\msys64\mingw64\bin;D:\a\_temp\msys64\usr\bin;$env:PATH"
              mkdir build -ea 0
              cd build
              function cmake_configure($retry)
              {
                $errcode=0
                try {
                  cmake .. -G "MSYS Makefiles" $EVENT_CMAKE_OPTIONS -DCMAKE_C_FLAGS=-w
                  $errcode=$LastExitCode
                }
                catch {
                  $errcode=1
                }
                finally {
                  if ($errcode -ne 0) {
                    if ($retry -eq 0) {
                      $host.SetShouldExit($LastExitCode)
                    } else {
                      echo "Remove all entries in build directory"
                      rm -r -fo *
                      cmake_configure 0
                    }
                  }
                }
              }
              cmake_configure 1
              cmake --build .
    
          - name: Test
            uses: nick-fields/retry@v3
            with:
              max_attempts: 5
              timeout_minutes: 60
              shell: powershell
              command: |
                cd build
                ctest --output-on-failure
    
          - uses: actions/upload-artifact@v4
            if: failure()
            with:
              name: mingw-${{ matrix.EVENT_MATRIX }}-build
              path: build
    
      macos-cmake-job:
        runs-on: ${{ matrix.os }}
        if: "!contains(github.event.head_commit.message, 'ci/macos skip') && !contains(github.event.head_commit.message, 'ci/macos/cmake skip')"
        strategy:
          fail-fast: false
          matrix:
            os: [macos-latest]
            EVENT_MATRIX:
              - NONE
              - NO_SSL
              - DISABLE_OPENSSL
              - DISABLE_THREAD_SUPPORT
              - DISABLE_DEBUG_MODE
              - DISABLE_MM_REPLACEMENT
              - TEST_EXPORT_STATIC
              - TEST_EXPORT_SHARED
    
        steps:
          - uses: actions/checkout@v4
    
          - name: Cache Build
            uses: actions/cache@v4
            with:
              path: build
              key: ${{ matrix.os }}-cmake-${{ matrix.EVENT_MATRIX }}-v3
    
          - name: Install Depends
            run: brew install mbedtls@2
    
          - name: Build
            shell: bash
            run: |
              if [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_OPENSSL" ]; then
                EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_OPENSSL=ON"
    
              elif [ "${{ matrix.EVENT_MATRIX }}" == "NO_SSL" ]; then
                EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_OPENSSL=ON -DEVENT__DISABLE_MBEDTLS=ON"
    
              elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_THREAD_SUPPORT" ]; then
                EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_THREAD_SUPPORT=ON"
    
              elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_DEBUG_MODE" ]; then
                EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_DEBUG_MODE=ON"
    
              elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_MM_REPLACEMENT" ]; then
                EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_MM_REPLACEMENT=ON"
    
              elif [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_STATIC" ]; then
                EVENT_CMAKE_OPTIONS="-DEVENT__LIBRARY_TYPE=STATIC -DEVENT__DISABLE_TESTS=ON -DEVENT__DISABLE_SAMPLES=ON"
    
              elif [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_SHARED" ]; then
                EVENT_CMAKE_OPTIONS="-DEVENT__LIBRARY_TYPE=SHARED -DEVENT__DISABLE_TESTS=ON -DEVENT__DISABLE_SAMPLES=ON"
    
              else
                EVENT_CMAKE_OPTIONS=""
              fi
              EVENT_CMAKE_OPTIONS="$EVENT_CMAKE_OPTIONS -DMBEDTLS_ROOT_DIR=`brew --prefix mbedtls@2`"
    
              mkdir -p build
              cd build
              echo [cmake]: cmake .. $EVENT_CMAKE_OPTIONS
              cmake .. $EVENT_CMAKE_OPTIONS || (rm -rf * && cmake .. $EVENT_CMAKE_OPTIONS)
              cmake --build .
    
          - name: Test
            uses: nick-fields/retry@v3
            with:
              max_attempts: 5
              timeout_minutes: 60
              shell: bash
              command: |
                JOBS=1
                export CTEST_PARALLEL_LEVEL=$JOBS
                export CTEST_OUTPUT_ON_FAILURE=1
    
                cd build
    
                if [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_STATIC" ]; then
                  sudo python3 ../test-export/test-export.py static
                elif [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_SHARED" ]; then
                  sudo python3 ../test-export/test-export.py shared
                else
                  cmake --build . --target verify
                fi
    
          - uses: actions/upload-artifact@v4
            if: failure()
            with:
              name: ${{ matrix.os }}-cmake-${{ matrix.EVENT_MATRIX }}-build
              path: build
    
      macos-autotools-job:
        runs-on: ${{ matrix.os }}
        if: "!contains(github.event.head_commit.message, 'ci/macos skip') && !contains(github.event.head_commit.message, 'ci/macos/autotools skip')"
        strategy:
          fail-fast: false
          matrix:
            os: [macos-latest]
    
        steps:
          - uses: actions/checkout@v4
    
          - name: Cache Build
            uses: actions/cache@v4
            with:
              path: build
              key: ${{ matrix.os }}-autotools-v3
    
          - name: Install Depends
            run: brew install autoconf automake libtool pkg-config mbedtls@2
    
          - name: Build
            shell: bash
            run: |
              export CPPFLAGS="-I`brew --prefix mbedtls@2`/include"
              export  LDFLAGS="-L`brew --prefix mbedtls@2`/lib"
    
              ./autogen.sh
              mkdir -p build
              cd build
              echo [configure]: ../configure
              ../configure
              make
    
          - name: Test
            uses: nick-fields/retry@v3
            with:
              max_attempts: 5
              timeout_minutes: 60
              shell: bash
              command: |
                JOBS=1
                cd build
                make -j $JOBS verify
    
          - uses: actions/upload-artifact@v4
            if: failure()
            with:
              name: ${{ matrix.os }}-autotools-${{ matrix.EVENT_MATRIX }}-build
              path: build
    
      freebsd-cmake-job:
        runs-on: ubuntu-latest
        if: "!contains(github.event.head_commit.message, 'ci/freebsd skip') && !contains(github.event.head_commit.message, 'ci/freebsd/cmake skip')"
        strategy:
          fail-fast: false
          matrix:
            release: ["13.2", "14.0"]
            EVENT_MATRIX:
              - NONE
              - NO_SSL
              - DISABLE_OPENSSL
              - DISABLE_THREAD_SUPPORT
              - DISABLE_DEBUG_MODE
              - DISABLE_MM_REPLACEMENT
              - TEST_EXPORT_STATIC
              - TEST_EXPORT_SHARED
    
        steps:
          - uses: actions/checkout@v4
    
          - name: Cache Build
            uses: actions/cache@v4
            with:
              path: build
              key: freebsd-${{ matrix.release }}-cmake-${{ matrix.EVENT_MATRIX }}-v1
    
          - name: Build
            uses: vmactions/freebsd-vm@v1
            with:
              release: ${{ matrix.release }}
              prepare: |
                pkg install -y  mbedtls cmake python3
              usesh: true
              run: |
                if [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_OPENSSL" ]; then
                  EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_OPENSSL=ON"
    
                elif [ "${{ matrix.EVENT_MATRIX }}" == "NO_SSL" ]; then
                  EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_OPENSSL=ON -DEVENT__DISABLE_MBEDTLS=ON"
    
                elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_THREAD_SUPPORT" ]; then
                  EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_THREAD_SUPPORT=ON"
    
                elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_DEBUG_MODE" ]; then
                  EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_DEBUG_MODE=ON"
    
                elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_MM_REPLACEMENT" ]; then
                  EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_MM_REPLACEMENT=ON"
    
                elif [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_STATIC" ]; then
                  EVENT_CMAKE_OPTIONS="-DEVENT__LIBRARY_TYPE=STATIC -DEVENT__DISABLE_TESTS=ON -DEVENT__DISABLE_SAMPLES=ON"
    
                elif [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_SHARED" ]; then
                  EVENT_CMAKE_OPTIONS="-DEVENT__LIBRARY_TYPE=SHARED -DEVENT__DISABLE_TESTS=ON -DEVENT__DISABLE_SAMPLES=ON"
    
                else
                  EVENT_CMAKE_OPTIONS=""
                fi
                EVENT_CMAKE_OPTIONS="$EVENT_CMAKE_OPTIONS -DMBEDTLS_ROOT_DIR=/usr/local/opt/mbedtls@2"
    
                mkdir -p build
                cd build
                echo [cmake]: cmake .. $EVENT_CMAKE_OPTIONS
                cmake .. $EVENT_CMAKE_OPTIONS || (rm -rf * && cmake .. $EVENT_CMAKE_OPTIONS)
                cmake --build .
    
          - name: Test
            uses: nick-fields/retry@v3
            with:
              max_attempts: 5
              timeout_minutes: 60
              shell: bash
              command: |
                ssh freebsd sh <<EOF
                cd $GITHUB_WORKSPACE
                JOBS=1
                export CTEST_PARALLEL_LEVEL=$JOBS
                export CTEST_OUTPUT_ON_FAILURE=1
                cd build
                if [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_STATIC" ]; then
                  python3 ../test-export/test-export.py static
                elif [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_SHARED" ]; then
                  python3 ../test-export/test-export.py shared
                else
                  cmake --build . --target verify
                fi
                EOF
    
          - uses: actions/upload-artifact@v4
            if: failure()
            with:
              name: freebsd-${{ matrix.release }}-cmake-${{ matrix.EVENT_MATRIX }}-build
              path: build
    
      freebsd-autotools-job:
        runs-on: ubuntu-latest
        if: "!contains(github.event.head_commit.message, 'ci/freebsd skip') && !contains(github.event.head_commit.message, 'ci/freebsd/autotools skip')"
        strategy:
          fail-fast: false
          matrix:
            release: ["13.2"]
    
        steps:
          - uses: actions/checkout@v4
    
          - name: Cache Build
            uses: actions/cache@v4
            with:
              path: build
              key: freebsd-${{ matrix.release }}-autotools-v1
    
    
          - name: Build
            uses: vmactions/freebsd-vm@v1
            with:
              release: ${{ matrix.release }}
              prepare: |
                pkg install -y  mbedtls  python3 autoconf automake libtool pkgconf
              usesh: true
              run: |
                ./autogen.sh
                mkdir -p build
                cd build
                echo [configure]: ../configure
                ../configure
                make
    
          - name: Test
            uses: nick-fields/retry@v3
            with:
              max_attempts: 5
              timeout_minutes: 60
              shell: bash
              command: |
                ssh freebsd sh <<EOF
                cd $GITHUB_WORKSPACE
                JOBS=1
                cd build
                make verify
                EOF
    
          - uses: actions/upload-artifact@v4
            if: failure()
            with:
              name: freebsd-${{ matrix.release }}-autotools-${{ matrix.EVENT_MATRIX }}-build
              path: build
    
      openbsd-cmake-job:
        runs-on: ubuntu-latest
        if: "!contains(github.event.head_commit.message, 'ci/openbsd skip') && !contains(github.event.head_commit.message, 'ci/openbsd/cmake skip')"
        strategy:
          fail-fast: false
          matrix:
            release: [
              # 6.9 has some issues with autoconf/autotools [1].
              #   [1]: https://github.com/libevent/libevent/pull/1326#issuecomment-1229531718
              #"6.9",
              "",
            ]
            EVENT_MATRIX:
              - NONE
              - NO_SSL
              - DISABLE_OPENSSL
              - DISABLE_THREAD_SUPPORT
              - DISABLE_DEBUG_MODE
              - DISABLE_MM_REPLACEMENT
              - TEST_EXPORT_STATIC
              # For now this test is disabled due to incorrect library paths [1].
              #   [1]: https://github.com/libevent/libevent/pull/1326#issuecomment-1245159690
              #
              # - TEST_EXPORT_SHARED
    
        steps:
          - uses: actions/checkout@v4
    
          - name: Cache Build
            uses: actions/cache@v4
            with:
              path: build
              key: openbsd-${{ matrix.release }}-cmake-${{ matrix.EVENT_MATRIX }}-v1
    
          - name: Build
            uses: vmactions/openbsd-vm@v1
            with:
              release: ${{ matrix.release }}
              prepare: |
                pkg_add  mbedtls cmake python3
              usesh: true
              run: |
                if [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_OPENSSL" ]; then
                  EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_OPENSSL=ON"
    
                elif [ "${{ matrix.EVENT_MATRIX }}" == "NO_SSL" ]; then
                  EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_OPENSSL=ON -DEVENT__DISABLE_MBEDTLS=ON"
    
                elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_THREAD_SUPPORT" ]; then
                  EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_THREAD_SUPPORT=ON"
    
                elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_DEBUG_MODE" ]; then
                  EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_DEBUG_MODE=ON"
    
                elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_MM_REPLACEMENT" ]; then
                  EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_MM_REPLACEMENT=ON"
    
                elif [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_STATIC" ]; then
                  EVENT_CMAKE_OPTIONS="-DEVENT__LIBRARY_TYPE=STATIC -DEVENT__DISABLE_TESTS=ON -DEVENT__DISABLE_SAMPLES=ON"
    
                elif [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_SHARED" ]; then
                  EVENT_CMAKE_OPTIONS="-DEVENT__LIBRARY_TYPE=SHARED -DEVENT__DISABLE_TESTS=ON -DEVENT__DISABLE_SAMPLES=ON"
    
                else
                  EVENT_CMAKE_OPTIONS=""
                fi
                EVENT_CMAKE_OPTIONS="$EVENT_CMAKE_OPTIONS -DMBEDTLS_ROOT_DIR=/usr/local/opt/mbedtls@2"
    
                mkdir -p build
                cd build
                echo [cmake]: cmake .. $EVENT_CMAKE_OPTIONS
                cmake .. $EVENT_CMAKE_OPTIONS || (rm -rf * && cmake .. $EVENT_CMAKE_OPTIONS)
                cmake --build .
    
          - name: Test
            uses: nick-fields/retry@v3
            with:
              max_attempts: 5
              timeout_minutes: 60
              shell: bash
              command: |
                ssh openbsd sh <<EOF
                cd $GITHUB_WORKSPACE
                JOBS=1
                export CTEST_PARALLEL_LEVEL=$JOBS
                export CTEST_OUTPUT_ON_FAILURE=1
                cd build
                if [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_STATIC" ]; then
                  python3 ../test-export/test-export.py static
                elif [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_SHARED" ]; then
                  python3 ../test-export/test-export.py shared
                else
                  cmake --build . --target verify
                fi
                EOF
    
          - uses: actions/upload-artifact@v4
            if: failure()
            with:
              name: openbsd-${{ matrix.release }}-cmake-${{ matrix.EVENT_MATRIX }}-build
              path: .
    
      openbsd-autotools-job:
        runs-on: ubuntu-latest
        if: "!contains(github.event.head_commit.message, 'ci/openbsd skip') && !contains(github.event.head_commit.message, 'ci/openbsd/autotools skip')"
        strategy:
          fail-fast: false
          matrix:
            release: [""]
    
        steps:
          - uses: actions/checkout@v4
    
          - name: Cache Build
            uses: actions/cache@v4
            with:
              path: build
              key: openbsd-${{ matrix.release }}-autotools-v1
    
    
          - name: Build
            uses: vmactions/openbsd-vm@v1
            with:
              release: ${{ matrix.release }}
              prepare: |
                pkg_add  mbedtls  python3 automake-1.16.5  autoconf-2.71  libtool pkgconf
              usesh: true
              run: |
                export AUTOMAKE_VERSION=1.16
                export AUTOCONF_VERSION=2.71
    
                ./autogen.sh
                mkdir -p build
                cd build
                echo [configure]: ../configure
                ../configure
                make V=1
    
          - name: Test
            uses: nick-fields/retry@v3
            with:
              max_attempts: 5
              timeout_minutes: 60
              shell: bash
              command: |
                ssh openbsd sh <<EOF
                cd $GITHUB_WORKSPACE
                JOBS=1
                cd build
                make verify
                EOF
    
          - uses: actions/upload-artifact@v4
            if: failure()
            with:
              name: openbsd-${{ matrix.release }}-autotools-${{ matrix.EVENT_MATRIX }}-build
              path: .
    
      apple-cmake-job:
        runs-on: ${{ matrix.os }}
        if: "!contains(github.event.head_commit.message, 'ci/macos skip') && !contains(github.event.head_commit.message, 'ci/macos/cmake skip')"
        strategy:
          fail-fast: false
          matrix:
            os: [macos-latest]
            EVENT_MATRIX:
              - iphoneos
              - appletvos
              - xros
              - watchos
    
        steps:
          - uses: actions/checkout@v4
    
          - name: Cache Build
            uses: actions/cache@v4
            with:
              path: build
              key: ${{ matrix.os }}-cmake-${{ matrix.EVENT_MATRIX }}-v4
    
          - name: Xcode
            uses: maxim-lobanov/setup-xcode@v1
            with:
              xcode-version: latest-stable
    
          - name: Build
            shell: bash
            run: |
              CMAKE_OSX_SYSROOT="${{ matrix.EVENT_MATRIX }}"
    
              echo [cmake]: cmake -B build -G Xcode -D CMAKE_OSX_SYSROOT=$CMAKE_OSX_SYSROOT
              cmake -B build -G Xcode -D CMAKE_OSX_SYSROOT=$CMAKE_OSX_SYSROOT || (rm -rf build && cmake -B build -G Xcode -D CMAKE_OSX_SYSROOT=$CMAKE_OSX_SYSROOT)
              cmake --build build -t event_static
    
      # ABI job without deploy
      abi-job:
        runs-on: ubuntu-22.04
        strategy:
          fail-fast: false
        steps:
          - uses: actions/checkout@v4
          - name: Install Dependencies
            run:
              sudo apt install
                abi-tracker
                abi-monitor
                abi-dumper
                abi-compliance-checker
                pkgdiff
                vtable-dumper
          # FIXME: clone git repo or report to debian
          - name: Patch abi-compliance-checker to avoid endless loop
            run: sudo patch /usr/bin/abi-compliance-checker < extra/abi-check/debian.patch
          - name: Generate
            shell: bash
            run: |
              ./extra/abi-check/abi_check.sh
            env:
              ABI_CHECK_ROOT: /tmp/le-abi-root
          - uses: actions/upload-artifact@v4
            if: failure()
            with:
              name: build
              path: /tmp/le-abi-root
          - uses: actions/upload-artifact@v4
            with:
              name: build
              path: /tmp/le-abi-root/work/abi-check