Merge branch 'ci-improvements'
Re-add most of the Linux CI builds previously run by Travis CI to GitHub Actions CI workflow. See #2084.
This commit is contained in:
commit
892db20d12
6 changed files with 270 additions and 63 deletions
303
.github/workflows/ci.yml
vendored
303
.github/workflows/ci.yml
vendored
|
|
@ -3,58 +3,228 @@ name: CI
|
|||
on:
|
||||
push:
|
||||
branches: master
|
||||
paths-ignore:
|
||||
- 'CHANGES*'
|
||||
- 'Doc/**'
|
||||
pull_request:
|
||||
branches: master
|
||||
paths-ignore:
|
||||
- 'CHANGES*'
|
||||
- 'Doc/**'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
runs-on: ${{ matrix.os || 'ubuntu-20.04' }}
|
||||
|
||||
# By default, the name of the build is just the language used, but matrix
|
||||
# entries can define the additional "desc" field with any additional
|
||||
# information to include in the name.
|
||||
name: ${{ matrix.SWIGLANG || 'none' }}${{ matrix.PY3 }} ${{ matrix.ENGINE}} ${{ matrix.VER }} ${{ matrix.desc }}
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
#SWIGJOBS: ["-j2"]
|
||||
# other variables to optionally set
|
||||
# CC, GCC (used as suffix)
|
||||
# CPP11, CPP14, CPP17
|
||||
# CONFIGOPTS
|
||||
# SWIGLANG
|
||||
# PY3,VER
|
||||
# SWIG_FEATURES
|
||||
include:
|
||||
- os: ubuntu-latest
|
||||
- SWIGLANG: ""
|
||||
desc: gcc
|
||||
- SWIGLANG: ""
|
||||
GCC: 7
|
||||
desc: gcc7
|
||||
- SWIGLANG: ""
|
||||
GCC: 8
|
||||
desc: gcc8
|
||||
- SWIGLANG: ""
|
||||
GCC: 9
|
||||
desc: gcc9
|
||||
- SWIGLANG: ""
|
||||
GCC: 10
|
||||
desc: gcc10
|
||||
- SWIGLANG: ""
|
||||
compiler: clang
|
||||
desc: clang
|
||||
- SWIGLANG: csharp
|
||||
# D support can't be enabled because dmd 2.066 fails to build anything
|
||||
# under Ubuntu 18.04 due to its standard library (libphobos2.a) not
|
||||
# being compiled with -FPIC, but system gcc using -fpie by default,
|
||||
# resulting in linking errors for any output. And later versions, such
|
||||
# as 2.086.1, are not supported and result in errors in SWIG test suite.
|
||||
#
|
||||
# - SWIGLANG: d
|
||||
# VER: '2.066.0'
|
||||
# os: ubuntu-18.04 # This dlang version doesn't work under 20.04.
|
||||
- SWIGLANG: go
|
||||
VER: '1.3'
|
||||
- SWIGLANG: go
|
||||
VER: '1.6'
|
||||
- SWIGLANG: go
|
||||
VER: '1.8'
|
||||
- SWIGLANG: go
|
||||
VER: '1.12'
|
||||
CSTD: gnu99
|
||||
- SWIGLANG: go
|
||||
VER: '1.16'
|
||||
CSTD: gnu99
|
||||
- SWIGLANG: guile
|
||||
- SWIGLANG: java
|
||||
- SWIGLANG: javascript
|
||||
ENGINE: node
|
||||
VER: '12'
|
||||
CPP11: 1
|
||||
SWIGLANG: ""
|
||||
- os: ubuntu-latest
|
||||
- SWIGLANG: javascript
|
||||
ENGINE: node
|
||||
VER: '14'
|
||||
CPP11: 1
|
||||
SWIGLANG: python
|
||||
- os: ubuntu-latest
|
||||
- SWIGLANG: javascript
|
||||
ENGINE: node
|
||||
VER: '16'
|
||||
CPP14: 1
|
||||
- SWIGLANG: javascript
|
||||
ENGINE: jsc
|
||||
os: ubuntu-18.04 # libwebkitgtk-dev dependency not available in 20.04.
|
||||
- SWIGLANG: javascript
|
||||
ENGINE: v8
|
||||
os: ubuntu-18.04 # libv8-dev only actually provides v8 in 18.04.
|
||||
- SWIGLANG: lua
|
||||
- SWIGLANG: lua
|
||||
VER: '5.3'
|
||||
- SWIGLANG: octave
|
||||
CPP11: 1
|
||||
SWIGLANG: python
|
||||
- SWIGLANG: perl5
|
||||
- SWIGLANG: php
|
||||
VER: '7.4'
|
||||
- SWIGLANG: php
|
||||
VER: '8.0'
|
||||
- SWIGLANG: python
|
||||
- SWIGLANG: python
|
||||
PY3: 3
|
||||
- os: ubuntu-latest
|
||||
VER: '3.2'
|
||||
os: ubuntu-18.04 # Python < 3.5 not available for 20.04.
|
||||
- SWIGLANG: python
|
||||
PY3: 3
|
||||
VER: '3.3'
|
||||
os: ubuntu-18.04 # Python < 3.5 not available for 20.04.
|
||||
- SWIGLANG: python
|
||||
PY3: 3
|
||||
VER: '3.4'
|
||||
os: ubuntu-18.04 # Python < 3.5 not available for 20.04.
|
||||
- SWIGLANG: python
|
||||
PY3: 3
|
||||
VER: '3.5'
|
||||
- SWIGLANG: python
|
||||
PY3: 3
|
||||
VER: '3.6'
|
||||
- SWIGLANG: python
|
||||
PY3: 3
|
||||
VER: '3.7'
|
||||
- SWIGLANG: python
|
||||
PY3: 3
|
||||
VER: '3.8'
|
||||
- SWIGLANG: python
|
||||
PY3: 3
|
||||
VER: '3.9'
|
||||
- SWIGLANG: python
|
||||
SWIG_FEATURES: -builtin
|
||||
desc: builtin
|
||||
- SWIGLANG: python
|
||||
SWIG_FEATURES: -builtin -O
|
||||
desc: builtin optimized
|
||||
- SWIGLANG: python
|
||||
PY3: 3
|
||||
SWIG_FEATURES: -builtin
|
||||
desc: builtin
|
||||
- SWIGLANG: python
|
||||
PY3: 3
|
||||
SWIG_FEATURES: -builtin -O
|
||||
desc: builtin optimized
|
||||
- SWIGLANG: r
|
||||
- SWIGLANG: ruby
|
||||
VER: '1.9'
|
||||
os: ubuntu-18.04
|
||||
- SWIGLANG: ruby
|
||||
VER: '2.0'
|
||||
os: ubuntu-18.04
|
||||
- SWIGLANG: ruby
|
||||
VER: '2.1'
|
||||
os: ubuntu-18.04
|
||||
- SWIGLANG: ruby
|
||||
VER: '2.2'
|
||||
os: ubuntu-18.04
|
||||
- SWIGLANG: ruby
|
||||
VER: '2.3'
|
||||
os: ubuntu-18.04
|
||||
- SWIGLANG: ruby
|
||||
VER: '2.4'
|
||||
- SWIGLANG: ruby
|
||||
VER: '2.5'
|
||||
- SWIGLANG: ruby
|
||||
VER: '2.6'
|
||||
- SWIGLANG: ruby
|
||||
VER: '2.7'
|
||||
- SWIGLANG: ruby
|
||||
VER: '3.0'
|
||||
CSTD: c99
|
||||
CPP11: 1
|
||||
SWIGLANG: tcl
|
||||
- SWIGLANG: tcl
|
||||
# let's run all of them, as opposed to aborting when one fails
|
||||
fail-fast: false
|
||||
|
||||
env:
|
||||
SWIGLANG: ${{ matrix.SWIGLANG }}
|
||||
PY3: ${{ matrix.PY3 }}
|
||||
VER: ${{ matrix.VER }}
|
||||
ENGINE: ${{ matrix.ENGINE }}
|
||||
SWIG_FEATURES: ${{ matrix.SWIG_FEATURES }}
|
||||
CSTD: ${{ matrix.CSTD }}
|
||||
CPP11: ${{ matrix.CPP11 }}
|
||||
CPP14: ${{ matrix.CPP14 }}
|
||||
CPP17: ${{ matrix.CPP17 }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: ccache
|
||||
|
||||
- name: Install CCache
|
||||
uses: hendrikmuhs/ccache-action@v1
|
||||
with:
|
||||
key: ${{ matrix.os }}-${{ matrix.SWIGLANG }}
|
||||
- name: configure
|
||||
shell: bash
|
||||
env:
|
||||
SWIGLANG: ${{ matrix.SWIGLANG }}
|
||||
CONFIGOPTS: ${{ matrix.CONFIGOPTS }}
|
||||
CC: ${{ matrix.CC }}
|
||||
key: ${{ matrix.os || 'ubuntu-20.04' }}-${{ matrix.compiler || 'gcc' }}${{ matrix.GCC }}
|
||||
|
||||
- name: Configure
|
||||
run: |
|
||||
set -ex
|
||||
set -x
|
||||
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
|
||||
echo PATH="$PATH" >> $GITHUB_ENV
|
||||
|
||||
source Tools/GHA-linux-install.sh
|
||||
|
||||
if test '${{ matrix.compiler }}' = 'clang'; then
|
||||
CC="clang"
|
||||
CXX="clang++"
|
||||
|
||||
CFLAGS="$CFLAGS -fPIE"
|
||||
CXXFLAGS="$CXXFLAGS -fPIE"
|
||||
elif test -n "$GCC"; then
|
||||
CC="gcc-$GCC"
|
||||
CXX="g++-$GCC"
|
||||
else
|
||||
CC="gcc"
|
||||
CXX="g++"
|
||||
fi
|
||||
|
||||
export CC CXX
|
||||
|
||||
echo CC="$CC" >> $GITHUB_ENV
|
||||
echo CXX="$CXX" >> $GITHUB_ENV
|
||||
|
||||
echo "Compiler used:"
|
||||
ls -la $(which $CC) $(which $CXX)
|
||||
$CC --version
|
||||
$CXX --version
|
||||
|
||||
if test -n '${{ matrix.CONFIGOPTS }}'; then
|
||||
CONFIGOPTS=${{ matrix.CONFIGOPTS }}
|
||||
fi
|
||||
if test -n "$CPP11"; then CONFIGOPTS+=(--enable-cpp11-testing "CXXFLAGS=-std=c++11 $CXXFLAGS" "CFLAGS=-std=c11 $CFLAGS") && export CSTD=c11 && export CPPSTD=c++11; fi
|
||||
if test -n "$CPP14"; then CONFIGOPTS+=(--enable-cpp11-testing "CXXFLAGS=-std=c++14 $CXXFLAGS" "CFLAGS=-std=c11 $CFLAGS") && export CSTD=c11 && export CPPSTD=c++14; fi
|
||||
if test -n "$CPP17"; then CONFIGOPTS+=(--enable-cpp11-testing "CXXFLAGS=-std=c++17 $CXXFLAGS" "CFLAGS=-std=c17 $CFLAGS") && export CSTD=c17 && export CPPSTD=c++17; fi
|
||||
|
|
@ -62,44 +232,67 @@ jobs:
|
|||
echo "${CONFIGOPTS[@]}"
|
||||
./autogen.sh && mkdir -p build/build && cd build/build && ../../configure "${CONFIGOPTS[@]}"
|
||||
|
||||
- name: build
|
||||
shell: bash
|
||||
env:
|
||||
SWIGLANG: ${{ matrix.SWIGLANG }}
|
||||
SWIGJOBS: ${{ matrix.SWIGJOBS }}
|
||||
case $(uname) in
|
||||
Linux)
|
||||
cpu_count=$(nproc)
|
||||
;;
|
||||
|
||||
Darwin)
|
||||
cpu_count=$(sysctl -n hw.ncpu)
|
||||
;;
|
||||
|
||||
*)
|
||||
cpu_count=1
|
||||
;;
|
||||
esac
|
||||
if [[ $cpu_count != 1 ]]; then
|
||||
echo SWIGJOBS=-j$cpu_count >> $GITHUB_ENV
|
||||
fi
|
||||
|
||||
- name: Build
|
||||
working-directory: build/build
|
||||
run: |
|
||||
set -ex
|
||||
cd ${GITHUB_WORKSPACE}/build/build;
|
||||
make -s $SWIGJOBS
|
||||
set -x
|
||||
make $SWIGJOBS
|
||||
./swig -version && ./swig -pcreversion
|
||||
if test -z "$SWIGLANG"; then make -s $SWIGJOBS check-ccache; fi
|
||||
if test -z "$SWIGLANG"; then make -s $SWIGJOBS check-errors-test-suite; fi
|
||||
if test -z "$SWIGLANG"; then make $SWIGJOBS check-ccache; fi
|
||||
if test -z "$SWIGLANG"; then make $SWIGJOBS check-errors-test-suite; fi
|
||||
echo 'Installing...'
|
||||
if test -z "$SWIGLANG"; then sudo make -s install && swig -version && ccache-swig -V; fi
|
||||
- name: tests
|
||||
shell: bash
|
||||
env:
|
||||
SWIGLANG: ${{ matrix.SWIGLANG }}
|
||||
SWIGJOBS: ${{ matrix.SWIGJOBS }}
|
||||
SWIG_FEATURES: ${{ matrix.SWIG_FEATURES }}
|
||||
CC: ${{ matrix.CC }}
|
||||
CSTD: ${{ matrix.CSTD }}
|
||||
CPP11: ${{ matrix.CPP11 }}
|
||||
CPP14: ${{ matrix.CPP14 }}
|
||||
CPP17: ${{ matrix.CPP17 }}
|
||||
if test -z "$SWIGLANG"; then sudo make install && swig -version && ccache-swig -V; fi
|
||||
|
||||
- name: Test
|
||||
working-directory: build/build
|
||||
run: |
|
||||
set -ex
|
||||
cd ${GITHUB_WORKSPACE}/build/build;
|
||||
case "$SWIGLANG" in
|
||||
javascript)
|
||||
case "$ENGINE" in
|
||||
node)
|
||||
export NVM_DIR="$HOME/.nvm"
|
||||
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
|
||||
nvm use ${VER}
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
|
||||
ruby)
|
||||
source $HOME/.rvm/scripts/rvm
|
||||
;;
|
||||
esac
|
||||
|
||||
set -x
|
||||
if test -n "$CPP11"; then export CPPSTD=c++11; fi
|
||||
if test -n "$CPP14"; then export CPPSTD=c++14; fi
|
||||
if test -n "$CPP17"; then export CPPSTD=c++17; fi
|
||||
# Stricter compile flags for examples. Various headers and SWIG generated code prevents full use of -pedantic.
|
||||
if test -n "$SWIGLANG"; then cflags=$($GITHUB_WORKSPACE/Tools/testflags.py --language $SWIGLANG --cflags --std=$CSTD --compiler=$CC) && echo $cflags; fi
|
||||
if test -n "$SWIGLANG"; then cxxflags=$($GITHUB_WORKSPACE/Tools/testflags.py --language $SWIGLANG --cxxflags --std=$CPPSTD --compiler=$CC) && echo $cxxflags; fi
|
||||
if test -n "$SWIGLANG"; then make -s check-$SWIGLANG-version; fi
|
||||
if test -n "$SWIGLANG"; then make check-$SWIGLANG-version; fi
|
||||
if test -n "$SWIGLANG"; then make check-$SWIGLANG-enabled; fi
|
||||
if test -n "$SWIGLANG"; then make $SWIGJOBS check-$SWIGLANG-examples CFLAGS="$cflags" CXXFLAGS="$cxxflags"; fi
|
||||
if test -n "$SWIGLANG"; then make $SWIGJOBS check-$SWIGLANG-test-suite CFLAGS="$cflags" CXXFLAGS="$cxxflags"; fi
|
||||
#echo 'Cleaning...'
|
||||
# Skip on osx as often fails with: rm: Resource temporarily unavailable
|
||||
#if test "$TRAVIS_OS_NAME" != "osx"; then make check-maintainer-clean && ../../configure $CONFIGOPTS; fi
|
||||
|
||||
- name: Clean
|
||||
working-directory: build/build
|
||||
run: |
|
||||
set -x
|
||||
make check-maintainer-clean && ../../configure $CONFIGOPTS
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ namespace TopLevel
|
|||
class FooBar {
|
||||
public:
|
||||
FooBar() {}
|
||||
FooBar(const FooBar&) {}
|
||||
virtual ~FooBar() {}
|
||||
|
||||
std::string FooBarDo() { return "Bar::Foo2::Foo2Bar()"; }
|
||||
|
|
@ -56,7 +55,6 @@ namespace TopLevel
|
|||
class FooBar {
|
||||
public:
|
||||
FooBar();
|
||||
FooBar(const FooBar&);
|
||||
virtual ~FooBar();
|
||||
|
||||
std::string FooBarDo();
|
||||
|
|
|
|||
|
|
@ -13,9 +13,6 @@ srcdir = @srcdir@
|
|||
top_srcdir = @top_srcdir@
|
||||
top_builddir = @top_builddir@
|
||||
|
||||
C_TEST_CASES += \
|
||||
ccomplextest \
|
||||
|
||||
CPP_TEST_CASES += \
|
||||
javascript_lib_arrays \
|
||||
|
||||
|
|
@ -57,8 +54,10 @@ ifeq (node,$(JSENGINE))
|
|||
# dunno... ignoring generously
|
||||
apply_signed_char.cpptest: GYP_CFLAGS = \"-Wno-ignored-qualifiers\"
|
||||
constant_pointers.cpptest: GYP_CFLAGS = \"-Wno-ignored-qualifiers\"
|
||||
cpp11_ref_qualifiers.cpptest: GYP_CFLAGS = \"-Wno-ignored-qualifiers\"
|
||||
director_basic.cpptest: GYP_CFLAGS = \"-Wno-ignored-qualifiers\"
|
||||
enum_thorough.cpptest: GYP_CFLAGS = \"-Wno-ignored-qualifiers\"
|
||||
member_funcptr_galore.cpptest: GYP_CFLAGS = \"-Wno-ignored-qualifiers\"
|
||||
|
||||
setup_node = \
|
||||
test -d $* || mkdir $* && \
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@
|
|||
return *this;
|
||||
}
|
||||
public:
|
||||
Foo() { }
|
||||
Foo(const Foo &f) { } // copy ctor can still be public, however.
|
||||
void bar() { }
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -63,7 +63,9 @@ def test
|
|||
yield method(:_map), Li_std_functors::Map
|
||||
end
|
||||
|
||||
# these should fail and not segfault
|
||||
# these should fail and not segfault but currently do segfault with Ruby 2.6
|
||||
# in GitHub Actions environment
|
||||
if RUBY_VERSION != '2.6.6'
|
||||
begin
|
||||
Li_std_functors::Set.new('sd')
|
||||
rescue
|
||||
|
|
@ -72,5 +74,4 @@ end
|
|||
test do |proc, container|
|
||||
proc.call(container)
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -96,6 +96,20 @@ case "$SWIGLANG" in
|
|||
$RETRY sudo apt-get -qq install r-base
|
||||
;;
|
||||
"ruby")
|
||||
if ! command -v rvm; then
|
||||
case "$VER" in
|
||||
1.9 | 2.0 | 2.1 | 2.2 | 2.3 )
|
||||
$RETRY sudo apt-get -qq install libgdbm-dev libncurses5-dev libyaml-dev libssl1.0-dev
|
||||
;;
|
||||
esac
|
||||
# YOLO
|
||||
curl -sSL https://rvm.io/mpapis.asc | gpg --import -
|
||||
curl -sSL https://rvm.io/pkuczynski.asc | gpg --import -
|
||||
curl -sSL https://get.rvm.io | bash -s stable
|
||||
set +x
|
||||
source $HOME/.rvm/scripts/rvm
|
||||
set -x
|
||||
fi
|
||||
if [[ "$VER" == "2.7" || "$VER" == "3.0" ]]; then
|
||||
# Ruby 2.7+ support is currently only rvm master (30 Dec 2019)
|
||||
$RETRY rvm get master
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue