1---
2name: linux
3
4on:
5  pull_request:
6    types: [opened, synchronize]
7    paths-ignore:
8      - '**.md'
9      - '.mailmap'
10      - 'ChangeLog*'
11      - 'whatsnew*'
12      - 'LICENSE'
13  push:
14    paths-ignore:
15      - '**.md'
16      - '.mailmap'
17      - 'ChangeLog*'
18      - 'whatsnew*'
19      - 'LICENSE'
20
21jobs:
22  cmake:
23    runs-on: ${{ matrix.os }}
24    if: "!contains(github.event.head_commit.message, 'ci skip')"
25    strategy:
26      fail-fast: false
27      matrix:
28        os: [ubuntu-18.04]
29        EVENT_MATRIX:
30          - DIST
31          - NONE
32          - DISABLE_OPENSSL
33          - DISABLE_THREAD_SUPPORT
34          - DISABLE_DEBUG_MODE
35          - DISABLE_MM_REPLACEMENT
36          - COMPILER_CLANG
37          - TEST_EXPORT_STATIC
38          - TEST_EXPORT_SHARED
39          - ASAN
40          - TSAN
41          - UBSAN
42
43    steps:
44      - uses: actions/checkout@v2.0.0
45      - name: Cache Build
46        uses: actions/cache@v1.1.0
47        with:
48          path: build
49          key: ${{ matrix.os }}-cmake-${{ matrix.EVENT_MATRIX }}-v2
50      - name: Cache Dist Build
51        uses: actions/cache@v1.1.0
52        with:
53          path: dist
54          key: ${{ matrix.os }}-cmake-dist-${{ matrix.EVENT_MATRIX }}-v2
55
56      - name: Build And Test
57        shell: bash
58        run: |
59          if [ "${{ matrix.EVENT_MATRIX }}" == "DIST" ]; then
60            ./autogen.sh
61            mkdir -p dist
62            cd dist
63            ../configure
64            rm -fr *.tar.gz
65            make dist
66            archive=$(echo *.tar.gz)
67            tar -vxf $archive
68            cd $(basename $archive .tar.gz)
69          fi
70
71          export TSAN_OPTIONS=suppressions=$PWD/extra/tsan.supp
72          export LSAN_OPTIONS=suppressions=$PWD/extra/lsan.supp
73
74          if [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_OPENSSL" ]; then
75            EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_OPENSSL=ON"
76          elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_THREAD_SUPPORT" ]; then
77            EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_THREAD_SUPPORT=ON"
78          elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_DEBUG_MODE" ]; then
79            EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_DEBUG_MODE=ON"
80          elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_MM_REPLACEMENT" ]; then
81            EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_MM_REPLACEMENT=ON"
82          elif [ "${{ matrix.EVENT_MATRIX }}" == "COMPILER_CLANG" ]; then
83            EVENT_CMAKE_OPTIONS=""
84            export CC=clang
85          elif [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_STATIC" ]; then
86            EVENT_CMAKE_OPTIONS="-DEVENT__LIBRARY_TYPE=STATIC -DEVENT__DISABLE_TESTS=ON -DEVENT__DISABLE_SAMPLES=ON"
87          elif [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_SHARED" ]; then
88            EVENT_CMAKE_OPTIONS="-DEVENT__LIBRARY_TYPE=SHARED -DEVENT__DISABLE_TESTS=ON -DEVENT__DISABLE_SAMPLES=ON"
89          elif [ "${{ matrix.EVENT_MATRIX }}" == "ASAN" ]; then
90            EVENT_CMAKE_OPTIONS="-DCMAKE_C_FLAGS=-fsanitize=address -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=debug"
91          elif [ "${{ matrix.EVENT_MATRIX }}" == "TSAN" ]; then
92            EVENT_CMAKE_OPTIONS="-DCMAKE_C_FLAGS=-fsanitize=thread -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=debug"
93          elif [ "${{ matrix.EVENT_MATRIX }}" == "UBSAN" ]; then
94            EVENT_CMAKE_OPTIONS="-DCMAKE_C_FLAGS=-fsanitize=undefined -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=debug"
95          else
96            EVENT_CMAKE_OPTIONS=""
97          fi
98
99          #run build and test
100          JOBS=20
101          export CTEST_PARALLEL_LEVEL=$JOBS
102          export CTEST_OUTPUT_ON_FAILURE=1
103          mkdir -p build
104          cd build
105          echo [cmake]: cmake .. $EVENT_CMAKE_OPTIONS
106          cmake .. $EVENT_CMAKE_OPTIONS || (rm -rf * && cmake .. $EVENT_CMAKE_OPTIONS)
107          cmake --build .
108          if [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_STATIC" ]; then
109            sudo python3 ../test-export/test-export.py static
110          elif [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_SHARED" ]; then
111            sudo python3 ../test-export/test-export.py shared
112          else
113            cmake --build . --target verify
114          fi
115
116      - uses: actions/upload-artifact@v1
117        if: failure()
118        with:
119          name: ${{ matrix.os }}-cmake-${{ matrix.EVENT_MATRIX }}-build
120          path: build
121      - uses: actions/upload-artifact@v1
122        if: failure() && matrix.EVENT_MATRIX == 'DIST'
123        with:
124          name: ${{ matrix.os }}-cmake-${{ matrix.EVENT_MATRIX }}-dist
125          path: dist
126
127  autotools:
128    runs-on: ${{ matrix.os }}
129    if: "!contains(github.event.head_commit.message, 'ci skip')"
130    strategy:
131      fail-fast: false
132      matrix:
133        os: [ubuntu-18.04]
134        EVENT_MATRIX:
135          - DIST
136          - NONE
137          - DISABLE_OPENSSL
138          - DISABLE_THREAD_SUPPORT
139          - DISABLE_DEBUG_MODE
140          - DISABLE_MM_REPLACEMENT
141          - COMPILER_CLANG
142
143    steps:
144      - uses: actions/checkout@v2.0.0
145      - name: Cache Build
146        uses: actions/cache@v1.1.0
147        with:
148          path: build
149          key: ${{ matrix.os }}-autotools-${{ matrix.EVENT_MATRIX }}-v2
150      - name: Cache Dist Build
151        uses: actions/cache@v1.1.0
152        with:
153          path: dist
154          key: ${{ matrix.os }}-autotools-dist-${{ matrix.EVENT_MATRIX }}-v2
155
156      - name: Build And Test
157        shell: bash
158        run: |
159          if [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_OPENSSL" ]; then
160            EVENT_CONFIGURE_OPTIONS="--disable-openssl"
161
162          elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_THREAD_SUPPORT" ]; then
163            EVENT_CONFIGURE_OPTIONS="--disable-thread-support"
164
165          elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_DEBUG_MODE" ]; then
166            EVENT_CONFIGURE_OPTIONS="--disable-debug-mode"
167
168          elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_MM_REPLACEMENT" ]; then
169            EVENT_CONFIGURE_OPTIONS="--disable-malloc-replacement"
170
171          elif [ "${{ matrix.EVENT_MATRIX }}" == "COMPILER_CLANG" ]; then
172            EVENT_CONFIGURE_OPTIONS=""
173            export CC=clang
174
175          else
176            EVENT_CONFIGURE_OPTIONS=""
177          fi
178
179          #run build and test
180          JOBS=20
181          ./autogen.sh
182
183          if [ "${{ matrix.EVENT_MATRIX }}" == "DIST" ]; then
184            mkdir -p dist
185            cd dist
186            rm -fr *.tar.gz
187            ../configure $EVENT_CONFIGURE_OPTIONS
188            make dist
189            archive=$(echo *.tar.gz)
190            tar -vxf $archive
191            cd $(basename $archive .tar.gz)
192          fi
193
194          mkdir -p build
195          cd build
196          echo [configure]: ../configure $EVENT_CONFIGURE_OPTIONS
197          ../configure $EVENT_CONFIGURE_OPTIONS
198          make
199          make -j $JOBS verify
200
201      - uses: actions/upload-artifact@v1
202        if: failure()
203        with:
204          name: ${{ matrix.os }}-autotools-${{ matrix.EVENT_MATRIX }}-build
205          path: build
206      - uses: actions/upload-artifact@v1
207        if: failure() && matrix.EVENT_MATRIX == 'DIST'
208        with:
209          name: ${{ matrix.os }}-autotools-${{ matrix.EVENT_MATRIX }}-dist
210          path: dist
211