Skip to content

improve/correct event handler wrapping #674

improve/correct event handler wrapping

improve/correct event handler wrapping #674

Workflow file for this run

name: Linux wxGTK builds
on:
push:
branches:
- master
tags:
- v*
paths-ignore:
- '.github/**'
- 'assets/**'
- 'tools/**'
- 'lib/wx/doc/**'
- 'lib/wx/version.rb'
- '**.md'
- '.cirrus.yml'
pull_request:
branches:
- master
paths-ignore:
- '.github/**'
- 'assets/**'
- 'tools/**'
- 'lib/wx/doc/**'
- 'lib/wx/version.rb'
- 'rakelib/lib/**/*.yaml'
- '**.md'
- 'Gemfile'
- '.yardopts'
- '.gitignore'
- 'LICENSE'
- '.cirrus.yml'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
env:
WXWIDGETS_ROOT: ${{ github.workspace }}/ext/wxWidgets
WXWIN_INSTALL: ${{ github.workspace }}/ext/wxWidgets/install
WXWIDGETS_LATEST_STABLE: ${{ vars.WXWIDGETS_LATEST_STABLE }}
jobs:
build:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-20.04
gtk_version: 3
CC: gcc-9
CXX: g++-9
ruby: '2.5'
swig: '4'
configure_flags:
use_xvfb: true
wxw_type: system
wxr_type: develop
- os: ubuntu-22.04
gtk_version: 3
CC: gcc
CXX: g++
ruby: 'system'
swig: '4'
configure_flags:
use_xvfb: true
wxw_type: develop
wxr_type: develop
- os: ubuntu-22.04
gtk_version: 3
CC: gcc-12
CXX: g++-12
ruby: 'ruby'
swig: '4'
configure_flags:
use_xvfb: true
wxw_type: system
wxr_type: develop
- os: ubuntu-22.04
gtk_version: 3
CC: gcc-12
CXX: g++-12
ruby: '3.2'
swig: '4'
configure_flags:
use_xvfb: true
wxw_type: system
wxr_type: gem
- os: ubuntu-22.04
gtk_version: 3
CC: gcc-12
CXX: g++-12
ruby: 'ruby'
swig: '4'
configure_flags:
use_xvfb: true
wxw_type: embed
wxr_type: gem
- os: ubuntu-22.04
gtk_version: 3
CC: gcc-12
CXX: g++-12
ruby: 'ruby'
swig: '4'
configure_flags:
use_xvfb: true
wxw_type: embed
wxr_type: binpkg
- os: ubuntu-24.04
gtk_version: 3
CC: gcc-12
CXX: g++-12
ruby: 'ruby'
swig: '4'
configure_flags:
use_xvfb: true
wxw_type: develop
wxr_type: develop
wxr_test_exclude: 'test_media_ctrl'
- os: ubuntu-24.04
gtk_version: 3
CC: gcc
CXX: g++
ruby: 'system'
swig: '4'
configure_flags:
use_xvfb: true
wxw_type: develop
wxr_type: gem
wxr_test_exclude: 'test_media_ctrl'
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }} wxRuby(${{ matrix.wxr_type }}) ${{ matrix.CXX }} ruby-${{ matrix.ruby }} wxWidgets-${{ vars.WXWIDGETS_LATEST_STABLE }}(${{ matrix.wxw_type }}) SWIG${{ matrix.swig }}
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 }}
WX_EXTRA_PACKAGES: doxygen patchelf
CC: ${{ matrix.CC }}
CXX: ${{ matrix.CXX }}
steps:
- name: Checkout wxRuby3
uses: actions/checkout@v4
- name: Install Ruby
if: matrix.ruby != 'system'
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
- name: Prepare package repos
run: |
sudo apt-get update
- name: Install Ruby packages
if: matrix.ruby == 'system'
run: |
sudo apt-get install -y ruby-bundler
- name: Set Ruby Bundler path
if: matrix.ruby == 'system'
run: |
mkdir -p ${{ github.workspace }}/.bundler
bundle config path ${{ github.workspace }}/.bundler
- name: Setup Ruby gems
run: |
bundle install
- name: checkout wxWidgets
if: matrix.wxw_type != 'embed'
uses: actions/checkout@v4
with:
repository: wxWidgets/wxWidgets
path: ${{ env.WXWIDGETS_ROOT }}
ref: v${{ env.WXWIDGETS_LATEST_STABLE }}
submodules: 'recursive'
- name: Set up build environment
if: matrix.wxw_type != 'embed'
run: |
$WXWIDGETS_ROOT/build/tools/before_install.sh
- name: Show build environment
run: |
echo "Environment:"
env | sort
echo
echo "Ruby version:"
ruby -v
echo
echo "SWIG version:"
swig -version
echo
if [ "${{ matrix.wxw_type }}" != "embed" ]; then
echo "Doxygen version:"
doxygen -v
echo
fi
echo "Compiler version:"
${CXX-g++} --version
echo
- name: Configuring wxWidgets
if: matrix.wxw_type != 'embed'
working-directory: ${{ env.WXWIDGETS_ROOT }}
run: |
wxCONFIGURE_OPTIONS="$wxCONFIGURE_FLAGS"
if [ -n "${{ matrix.gtk_version }}" ]; then
wxCONFIGURE_OPTIONS="--with-gtk=${{ matrix.gtk_version }} $wxCONFIGURE_OPTIONS"
fi
if [ "${{ matrix.wxw_type }}" == "develop" ]; then
./configure $wxCONFIGURE_OPTIONS --prefix=$WXWIN_INSTALL --disable-tests --without-subdirs --disable-debug_info || rc=$?
else
./configure $wxCONFIGURE_OPTIONS --disable-tests --without-subdirs --disable-debug_info || rc=$?
fi
if [ -n "$rc" ]; then
echo '*** Configuring failed, contents of config.log follows: ***'
echo '-----------------------------------------------------------'
cat $WXWIDGETS_ROOT/config.log
echo '-----------------------------------------------------------'
exit $rc
fi
- name: Build wxWidgets
if: matrix.wxw_type != 'embed'
working-directory: ${{ env.WXWIDGETS_ROOT }}
run: |
if [ "${{ matrix.wxw_type }}" == "develop" ]; then
export WX_SKIP_DOXYGEN_VERSION_CHECK=1
make -j$(nproc) && make install && pushd docs/doxygen && ./regen.sh xml && popd
else
make -j$(nproc) && sudo make install && sudo ldconfig
fi
- name: Remove wxWidgets
if: matrix.wxw_type == 'system'
run: rm -rf $WXWIDGETS_ROOT
- name: Configure wxRuby3
if: matrix.wxr_type != 'gem'
run: |
if [ "${{ matrix.wxw_type }}" == "embed" ]; then
bundle exec rake configure[--autoinstall]
elif [ "${{ matrix.wxw_type }}" == "develop" ]; then
bundle exec rake configure[--wxwin=$WXWIN_INSTALL,--wxxml=$WXWIDGETS_ROOT/docs/doxygen/out/xml]
else
bundle exec rake configure
fi
- name: Build wxRuby3
if: matrix.wxr_type != 'gem'
run: |
bundle exec rake build
- name: Run wxRuby3 post-build checks
if: matrix.wxr_type != 'gem'
run: |
ruby tools/check_swig_types.rb
- name: Build wxRuby3 gem
if: matrix.wxr_type == 'gem' || matrix.wxr_type == 'binpkg'
run: |
bundle exec rake gem
if [ "${{ matrix.wxr_type }}" == "binpkg" ]; then
bundle exec rake binpkg
fi
- name: Clean wxRuby3 build artifacts
if: matrix.wxr_type != 'develop'
run: bundle exec rake clean
- name: Install wxRuby3 gem
if: matrix.wxr_type != 'develop'
run: |
if [ "${{ matrix.ruby }}" == "system" ]; then
GEM_CMD_PFX="sudo "
else
GEM_CMD_PFX=""
fi
if [ "${{ matrix.wxr_type }}" == "binpkg" ]; then
$GEM_CMD_PFX gem install $(echo pkg/*.gem) -- package=`pwd`/$(echo pkg/*.pkg)
else
if [ "${{ matrix.wxw_type }}" == "system" ]; then
$GEM_CMD_PFX gem install $(echo pkg/*.gem) -- prebuilt=none && $GEM_CMD_PFX wxruby setup -- --wxwin=@system
elif [ "${{ matrix.wxw_type }}" == "embed" ]; then
$GEM_CMD_PFX gem install $(echo pkg/*.gem) -- prebuilt=none && $GEM_CMD_PFX wxruby setup --autoinstall
else
$GEM_CMD_PFX gem install $(echo pkg/*.gem) -- prebuilt=none && $GEM_CMD_PFX wxruby setup --wxwin=$WXWIN_INSTALL
fi
fi
- name: Check wxRuby3 gem install
if: matrix.wxr_type != 'develop'
run: |
if [ "${{ matrix.wxw_type }}" == "develop" ]; then
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$WXWIN_INSTALL/lib
fi
wxruby check
- name: Check embedded wxWidgets version
if: matrix.wxw_type == 'embed'
run: |
if [ "${{ matrix.wxr_type }}" == "develop" ]; then
bundle exec rake wxruby:exec[ruby,tools/check_wxw_version.rb,$WXWIDGETS_LATEST_STABLE]
else
ruby tools/check_wxw_version.rb "$WXWIDGETS_LATEST_STABLE"
fi
- name: Run wxRuby3 regression tests
run: |
ulimit -c unlimited
if [ ! -z "${{ matrix.wxr_test_exclude }}" ]; then
export WXRUBY_TEST_EXCLUDE="${{ matrix.wxr_test_exclude }}"
fi
if [ "${{ matrix.wxr_type }}" == "develop" ]; then
TEST_CMD="bundle exec rake test"
else
if [ "${{ matrix.wxw_type }}" == "develop" ]; then
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$WXWIN_INSTALL/lib
fi
TEST_CMD="wxruby test"
if [ ! -z "${{ matrix.wxr_test_exclude }}" ]; then
TEST_CMD="$TEST_CMD --exclude=${WXRUBY_TEST_EXCLUDE//;/ --exclude=}"
fi
fi
/bin/bash -o pipefail -c "xvfb-run -a -s '-screen 0 1600x1200x24' $TEST_CMD 2>&1 | tee -a wxtest.out" || rc=$?
if [ -n "$rc" ]; then
if fgrep -q '(core dumped)' wxtest.out; then
echo '*** Test crashed, trying to get more information ***'
gdb --quiet --core=core -ex 'where' -ex 'thread apply all bt' -ex 'q' --args $TEST_CMD
fi
exit $rc
fi