# Continuous integration workflow for wxWidgets. name: GitHub CI on: push: branches: - master paths-ignore: - 'docs' - 'interface' pull_request: branches: - master paths-ignore: - 'docs' - 'interface' jobs: build: runs-on: ${{ matrix.runner }} name: ${{ matrix.name }} strategy: fail-fast: false matrix: include: - name: Ubuntu 16.04 wxGTK 2 runner: ubuntu-16.04 gtk_version: 2 use_xvfb: true - name: Ubuntu 16.04 wxGTK 3 static runner: ubuntu-16.04 configure_flags: --disable-shared use_xvfb: true - name: Ubuntu 18.04 wxGTK 2 UTF-8 runner: ubuntu-18.04 gtk_version: 2 configure_flags: --enable-utf8 --enable-utf8only --enable-monolithic use_xvfb: true - name: Ubuntu 18.04 wxGTK 3 STL runner: ubuntu-18.04 configure_flags: --enable-cxx11 --enable-stl --disable-compat30 use_xvfb: true - name: Ubuntu 18.04 wxGTK 3 with clang runner: ubuntu-18.04 compiler: clang configure_flags: --disable-sys-libs --with-libcurl use_xvfb: true - name: Ubuntu 20.04 wxGTK ANSI runner: ubuntu-20.04 configure_flags: --disable-unicode skip_samples: true - name: Ubuntu 20.04 wxGTK with ASAN runner: ubuntu-20.04 configure_flags: --disable-compat30 --disable-sys-libs --with-libcurl --disable-webview skip_samples: true use_asan: true use_xvfb: true - name: Ubuntu 18.04 wxX11 runner: ubuntu-18.04 configure_flags: --with-x11 --enable-pch --disable-stc skip_samples: true - name: Ubuntu 18.04 wxDFB runner: ubuntu-18.04 configure_flags: --with-directfb --enable-pch --disable-stc skip_samples: true allow_warnings: true - name: Ubuntu 18.04 wxMotif runner: ubuntu-18.04 configure_flags: --with-motif --enable-pch --disable-stc skip_samples: true - name: Ubuntu 18.04 wxQt runner: ubuntu-18.04 configure_flags: --with-qt --enable-pch --without-opengl skip_samples: true env: wxGTK_VERSION: ${{ matrix.gtk_version && matrix.gtk_version || 3 }} wxCONFIGURE_FLAGS: ${{ matrix.configure_flags }} wxUSE_ASAN: ${{ matrix.use_asan && 1 || 0 }} wxUSE_XVFB: ${{ matrix.use_xvfb && 1 || 0 }} steps: - name: Checkout uses: actions/checkout@v2 with: submodules: 'recursive' - name: Set environment variables run: | echo LD_LIBRARY_PATH=`pwd`/lib >> $GITHUB_ENV wxPROC_COUNT=`nproc` ((wxPROC_COUNT++)) echo wxPROC_COUNT=$wxPROC_COUNT >> $GITHUB_ENV echo wxBUILD_ARGS=-j$wxPROC_COUNT >> $GITHUB_ENV # Setting this variable suppresses "Error retrieving accessibility bus address" # messages from WebKit tests that we're not interested in. echo NO_AT_BRIDGE=1 >> $GITHUB_ENV case "${{ matrix.compiler }}" in clang) echo CC=clang >> $GITHUB_ENV echo CXX=clang++ >> $GITHUB_ENV echo LD=clang++ >> $GITHUB_ENV allow_warn_opt="-Wno-error=#warnings" ;; '') # Assume gcc. allow_warn_opt="-Wno-error=cpp" ;; *) echo "*** Unknown compiler: ${{ matrix.compiler }} ***" ;; esac if [ -z ${{ matrix.allow_warnings }} ]; then error_opts="-Werror $allow_warn_opt" echo "wxMAKEFILE_ERROR_CXXFLAGS=$error_opts" >> $GITHUB_ENV echo "wxMAKEFILE_CXXFLAGS=$wxMAKEFILE_CXXFLAGS $error_opts" >> $GITHUB_ENV fi echo "wxMAKEFILE_CXXFLAGS=$wxMAKEFILE_CXXFLAGS $error_opts" >> $GITHUB_ENV - name: Before install run: | ./build/tools/before_install.sh - name: Configuring run: | wxCONFIGURE_OPTIONS="--disable-optimise $wxCONFIGURE_FLAGS" if [ -n "${{ matrix.gtk_version }}" ]; then wxCONFIGURE_OPTIONS="--with-gtk=${{ matrix.gtk_version }} $wxCONFIGURE_OPTIONS" fi if [ ${{ matrix.use_asan }} ]; then wxASAN_CFLAGS="-fsanitize=address -fno-omit-frame-pointer" wxASAN_CXXFLAGS=$wxASAN_CFLAGS wxASAN_LDFLAGS="-fsanitize=address" ./configure $wxCONFIGURE_OPTIONS --enable-debug "CFLAGS=$wxASAN_CFLAGS" "CXXFLAGS=$wxASAN_CXXFLAGS" "LDFLAGS=$wxASAN_LDFLAGS" || rc=$? else ./configure $wxCONFIGURE_OPTIONS --disable-debug_info || rc=$? fi if [ -n "$rc" ]; then echo '*** Configuring failed, contents of config.log follows: ***' echo '-----------------------------------------------------------' cat config.log echo '-----------------------------------------------------------' exit $rc fi - name: Building run: | make -k $wxBUILD_ARGS "CXXFLAGS=$wxMAKEFILE_ERROR_CXXFLAGS" - name: Building tests run: | if [ !${{ matrix.skip_gui }} ]; then make -C tests $wxBUILD_ARGS failtest fi make -k -C tests $wxBUILD_ARGS "CXXFLAGS=$wxMAKEFILE_CXXFLAGS" "LDFLAGS=$wxMAKEFILE_LDFLAGS" - name: Launching httpbin if: matrix.skip_testing != true run: | pip install httpbin python -m httpbin.core 2>&1 >httpbin.log & echo 'WX_TEST_WEBREQUEST_URL=http://localhost:5000' >> $GITHUB_ENV - name: Testing if: matrix.skip_testing != true run: | echo 'Testing...' pushd tests ./test || rc=$? popd if [ -n "$rc" ]; then echo '*** Tests failed, contents of httpbin.log follows: ***' echo '-----------------------------------------------------------' cat httpbin.log echo '-----------------------------------------------------------' exit $rc fi - name: Testing GUI using Xvfb if: matrix.skip_testing != true && matrix.skip_gui != true && matrix.use_xvfb run: | if [ ${{ matrix.use_asan }} ]; then export LSAN_OPTIONS=suppressions=$(pwd)/misc/suppressions/lsan export ASAN_OPTIONS=fast_unwind_on_malloc=0 fi pushd tests xvfb-run -a -s '-screen 0 1600x1200x24' ./test_gui popd - name: Building samples if: matrix.skip_testing != true && matrix.skip_gui != true && matrix.skip_samples != true run: | make -k $wxBUILD_ARGS "CXXFLAGS=$wxMAKEFILE_CXXFLAGS" "LDFLAGS=$wxMAKEFILE_LDFLAGS" samples - name: Installing if: matrix.skip_testing != true run: | sudo make install - name: Testing installation if: matrix.skip_testing != true run: | make -C samples/minimal -f makefile.unx clean make -C samples/minimal -f makefile.unx $wxBUILD_ARGS "CXXFLAGS=$wxMAKEFILE_CXXFLAGS" "LDFLAGS=$wxMAKEFILE_LDFLAGS"