summaryrefslogtreecommitdiff
path: root/.github/workflows/linux.yml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/linux.yml')
-rw-r--r--.github/workflows/linux.yml210
1 files changed, 210 insertions, 0 deletions
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml
new file mode 100644
index 00000000..703fb962
--- /dev/null
+++ b/.github/workflows/linux.yml
@@ -0,0 +1,210 @@
+---
+name: linux
+
+on:
+ pull_request:
+ types: [opened, synchronize]
+ paths-ignore:
+ - '**.md'
+ - '.mailmap'
+ - 'ChangeLog*'
+ - 'whatsnew*'
+ - 'LICENSE'
+ push:
+ paths-ignore:
+ - '**.md'
+ - '.mailmap'
+ - 'ChangeLog*'
+ - 'whatsnew*'
+ - 'LICENSE'
+
+jobs:
+ cmake:
+ runs-on: ${{ matrix.os }}
+ if: "!contains(github.event.head_commit.message, 'ci skip')"
+ strategy:
+ fail-fast: false
+ matrix:
+ os: [ubuntu-18.04]
+ EVENT_MATRIX:
+ - DIST
+ - NONE
+ - DISABLE_OPENSSL
+ - DISABLE_THREAD_SUPPORT
+ - DISABLE_DEBUG_MODE
+ - DISABLE_MM_REPLACEMENT
+ - COMPILER_CLANG
+ - TEST_EXPORT_STATIC
+ - TEST_EXPORT_SHARED
+ - ASAN
+ - TSAN
+ - UBSAN
+
+ steps:
+ - uses: actions/checkout@v2.0.0
+ - name: Cache Build
+ uses: actions/cache@v1.1.0
+ with:
+ path: build
+ key: ${{ matrix.os }}-cmake-${{ matrix.EVENT_MATRIX }}-v2
+ - name: Cache Dist Build
+ uses: actions/cache@v1.1.0
+ with:
+ path: dist
+ key: ${{ matrix.os }}-cmake-dist-${{ matrix.EVENT_MATRIX }}-v2
+
+ - name: Build And Test
+ 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
+
+ export TSAN_OPTIONS=suppressions=$PWD/extra/tsan.supp
+ export LSAN_OPTIONS=suppressions=$PWD/extra/lsan.supp
+
+ if [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_OPENSSL" ]; then
+ EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_OPENSSL=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 }}" == "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
+
+ #run build and test
+ JOBS=20
+ export CTEST_PARALLEL_LEVEL=$JOBS
+ export CTEST_OUTPUT_ON_FAILURE=1
+ mkdir -p build
+ cd build
+ echo [cmake]: cmake .. $EVENT_CMAKE_OPTIONS
+ cmake .. $EVENT_CMAKE_OPTIONS || (rm -rf * && cmake .. $EVENT_CMAKE_OPTIONS)
+ cmake --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@v1
+ if: failure()
+ with:
+ name: ${{ matrix.os }}-cmake-${{ matrix.EVENT_MATRIX }}-build
+ path: build
+ - uses: actions/upload-artifact@v1
+ if: failure() && matrix.EVENT_MATRIX == 'DIST'
+ with:
+ name: ${{ matrix.os }}-cmake-${{ matrix.EVENT_MATRIX }}-dist
+ path: dist
+
+ autotools:
+ runs-on: ${{ matrix.os }}
+ if: "!contains(github.event.head_commit.message, 'ci skip')"
+ strategy:
+ fail-fast: false
+ matrix:
+ os: [ubuntu-18.04]
+ EVENT_MATRIX:
+ - DIST
+ - NONE
+ - DISABLE_OPENSSL
+ - DISABLE_THREAD_SUPPORT
+ - DISABLE_DEBUG_MODE
+ - DISABLE_MM_REPLACEMENT
+ - COMPILER_CLANG
+
+ steps:
+ - uses: actions/checkout@v2.0.0
+ - name: Cache Build
+ uses: actions/cache@v1.1.0
+ with:
+ path: build
+ key: ${{ matrix.os }}-autotools-${{ matrix.EVENT_MATRIX }}-v2
+ - name: Cache Dist Build
+ uses: actions/cache@v1.1.0
+ with:
+ path: dist
+ key: ${{ matrix.os }}-autotools-dist-${{ matrix.EVENT_MATRIX }}-v2
+
+ - name: Build And Test
+ shell: bash
+ run: |
+ if [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_OPENSSL" ]; then
+ EVENT_CONFIGURE_OPTIONS="--disable-openssl"
+
+ elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_THREAD_SUPPORT" ]; then
+ EVENT_CONFIGURE_OPTIONS="--disable-thread-support"
+
+ elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_DEBUG_MODE" ]; then
+ EVENT_CONFIGURE_OPTIONS="--disable-debug-mode"
+
+ elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_MM_REPLACEMENT" ]; then
+ EVENT_CONFIGURE_OPTIONS="--disable-malloc-replacement"
+
+ elif [ "${{ matrix.EVENT_MATRIX }}" == "COMPILER_CLANG" ]; then
+ EVENT_CONFIGURE_OPTIONS=""
+ export CC=clang
+
+ else
+ EVENT_CONFIGURE_OPTIONS=""
+ fi
+
+ #run build and test
+ JOBS=20
+ ./autogen.sh
+
+ if [ "${{ matrix.EVENT_MATRIX }}" == "DIST" ]; then
+ mkdir -p dist
+ cd dist
+ rm -fr *.tar.gz
+ ../configure $EVENT_CONFIGURE_OPTIONS
+ make dist
+ archive=$(echo *.tar.gz)
+ tar -vxf $archive
+ cd $(basename $archive .tar.gz)
+ fi
+
+ mkdir -p build
+ cd build
+ echo [configure]: ../configure $EVENT_CONFIGURE_OPTIONS
+ ../configure $EVENT_CONFIGURE_OPTIONS
+ make
+ make -j $JOBS verify
+
+ - uses: actions/upload-artifact@v1
+ if: failure()
+ with:
+ name: ${{ matrix.os }}-autotools-${{ matrix.EVENT_MATRIX }}-build
+ path: build
+ - uses: actions/upload-artifact@v1
+ if: failure() && matrix.EVENT_MATRIX == 'DIST'
+ with:
+ name: ${{ matrix.os }}-autotools-${{ matrix.EVENT_MATRIX }}-dist
+ path: dist