Merge branch 'GHA'

Add CI GitHub Actions workflow.

See #2062.
This commit is contained in:
Vadim Zeitlin 2021-08-09 13:21:13 +02:00
commit 6e471512b8
4 changed files with 240 additions and 118 deletions

105
.github/workflows/ci.yml vendored Normal file
View file

@ -0,0 +1,105 @@
name: CI
on:
push:
branches: master
pull_request:
branches: master
jobs:
build:
runs-on: ${{ matrix.os }}
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
CPP11: 1
SWIGLANG: ""
- os: ubuntu-latest
CPP11: 1
SWIGLANG: python
- os: ubuntu-latest
CPP11: 1
SWIGLANG: python
PY3: 3
- os: ubuntu-latest
CPP11: 1
SWIGLANG: tcl
# let's run all of them, as opposed to aborting when one fails
fail-fast: false
steps:
- uses: actions/checkout@v2
with:
submodules: recursive
- name: 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 }}
run: |
set -ex
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
source Tools/GHA-linux-install.sh
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
if test -n "$SWIGLANG"; then CONFIGOPTS+=(--without-alllang --with-$WITHLANG); fi
echo "${CONFIGOPTS[@]}"
./autogen.sh && mkdir -p build/build && cd build/build && ../../configure "${CONFIGOPTS[@]}"
- name: build
shell: bash
env:
SWIGLANG: ${{ matrix.SWIGLANG }}
SWIGJOBS: ${{ matrix.SWIGJOBS }}
run: |
set -ex
cd ${GITHUB_WORKSPACE}/build/build;
make -s $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
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 }}
run: |
set -ex
cd ${GITHUB_WORKSPACE}/build/build;
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-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

121
Tools/CI-linux-install.sh Normal file
View file

@ -0,0 +1,121 @@
#!/bin/bash
# expected to be called from elsewhere with certain variables set
# e.g. RETRY=travis-retry SWIGLANG=python GCC=7
set -e # exit on failure (same as -o errexit)
if [[ -n "$GCC" ]]; then
$RETRY sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
$RETRY sudo apt-get -qq update
$RETRY sudo apt-get install -qq g++-$GCC
fi
$RETRY sudo apt-get -qq install libboost-dev libpcre3-dev
# testflags.py needs python
$RETRY sudo apt-get install -qq python
WITHLANG=$SWIGLANG
case "$SWIGLANG" in
"") ;;
"csharp")
$RETRY sudo apt-get -qq install mono-devel
;;
"d")
$RETRY wget http://downloads.dlang.org/releases/2.x/${VER}/dmd_${VER}-0_amd64.deb
$RETRY sudo dpkg -i dmd_${VER}-0_amd64.deb
;;
"go")
if [[ "$VER" ]]; then
eval "$(gimme ${VER}.x)"
fi
;;
"javascript")
case "$ENGINE" in
"node")
$RETRY wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.10/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
$RETRY nvm install ${VER}
nvm use ${VER}
if [ "$VER" == "0.10" ] || [ "$VER" == "0.12" ] || [ "$VER" == "4" ] || [ "$VER" == "6" ] ; then
# $RETRY sudo apt-get install -qq nodejs node-gyp
$RETRY npm install -g node-gyp@$VER
elif [ "$VER" == "8" ] ; then
$RETRY npm install -g node-gyp@6
elif [ "$VER" == "10" ] || [ "$VER" == "12" ] || [ "$VER" == "14" ] || [ "$VER" == "16" ]; then
$RETRY npm install -g node-gyp@7
else
$RETRY npm install -g node-gyp
fi
;;
"jsc")
$RETRY sudo apt-get install -qq libwebkitgtk-dev
;;
"v8")
$RETRY sudo apt-get install -qq libv8-dev
;;
esac
;;
"guile")
$RETRY sudo apt-get -qq install guile-2.0-dev
;;
"lua")
if [[ -z "$VER" ]]; then
$RETRY sudo apt-get -qq install lua5.2 liblua5.2-dev
else
$RETRY sudo apt-get -qq install lua${VER} liblua${VER}-dev
fi
;;
"mzscheme")
$RETRY sudo apt-get -qq install racket
;;
"ocaml")
$RETRY sudo apt-get -qq install ocaml camlp4
;;
"octave")
$RETRY sudo apt-get -qq install liboctave-dev
;;
"php")
$RETRY sudo add-apt-repository -y ppa:ondrej/php
$RETRY sudo apt-get -qq update
$RETRY sudo apt-get -qq install php$VER-cli php$VER-dev
;;
"python")
pip install --user pycodestyle
if [[ "$VER" ]]; then
$RETRY sudo add-apt-repository -y ppa:deadsnakes/ppa
$RETRY sudo apt-get -qq update
$RETRY sudo apt-get -qq install python${VER}-dev
WITHLANG=$SWIGLANG$PY3=$SWIGLANG$VER
else
$RETRY sudo apt-get install -qq python${PY3}-dev
WITHLANG=$SWIGLANG$PY3
fi
;;
"r")
$RETRY sudo apt-get -qq install r-base
;;
"ruby")
if [[ "$VER" == "2.7" || "$VER" == "3.0" ]]; then
# Ruby 2.7+ support is currently only rvm master (30 Dec 2019)
$RETRY rvm get master
rvm reload
rvm list known
fi
if [[ "$VER" ]]; then
$RETRY rvm install $VER
fi
;;
"scilab")
# Travis has the wrong version of Java pre-installed resulting in error using scilab:
# /usr/bin/scilab-bin: error while loading shared libraries: libjava.so: cannot open shared object file: No such file or directory
echo "JAVA_HOME was set to $JAVA_HOME"
unset JAVA_HOME
$RETRY sudo apt-get -qq install scilab
;;
"tcl")
$RETRY sudo apt-get -qq install tcl-dev
;;
esac
set +e # turn off exit on failure (same as +o errexit)

View file

@ -0,0 +1,9 @@
#!/bin/bash
#lsb_release -a
# find location of current script (only works in bash)
script_dir="$( dirname "${BASH_SOURCE[0]}")"
# run generic script
RETRY=
source "$script_dir"/CI-linux-install.sh

View file

@ -2,123 +2,10 @@
# Install Linux packages where the version has been overidden in .travis.yml
set -e # exit on failure (same as -o errexit)
lsb_release -a
travis_retry sudo apt-get -qq update
# find location of current script (only works in bash)
script_dir="$( dirname "${BASH_SOURCE[0]}")"
if [[ -n "$GCC" ]]; then
travis_retry sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
travis_retry sudo apt-get -qq update
travis_retry sudo apt-get install -qq g++-$GCC
fi
travis_retry sudo apt-get -qq install libboost-dev libpcre3-dev
WITHLANG=$SWIGLANG
case "$SWIGLANG" in
"") ;;
"csharp")
travis_retry sudo apt-get -qq install mono-devel
;;
"d")
travis_retry wget http://downloads.dlang.org/releases/2.x/${VER}/dmd_${VER}-0_amd64.deb
travis_retry sudo dpkg -i dmd_${VER}-0_amd64.deb
;;
"go")
if [[ "$VER" ]]; then
eval "$(gimme ${VER}.x)"
fi
;;
"javascript")
case "$ENGINE" in
"node")
travis_retry wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.10/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
travis_retry nvm install ${VER}
nvm use ${VER}
if [ "$VER" == "0.10" ] || [ "$VER" == "0.12" ] || [ "$VER" == "4" ] || [ "$VER" == "6" ] ; then
# travis_retry sudo apt-get install -qq nodejs node-gyp
travis_retry npm install -g node-gyp@$VER
elif [ "$VER" == "8" ] ; then
travis_retry npm install -g node-gyp@6
elif [ "$VER" == "10" ] || [ "$VER" == "12" ] || [ "$VER" == "14" ] || [ "$VER" == "16" ]; then
travis_retry npm install -g node-gyp@7
else
travis_retry npm install -g node-gyp
fi
;;
"jsc")
travis_retry sudo apt-get install -qq libwebkitgtk-dev
;;
"v8")
travis_retry sudo apt-get install -qq libv8-dev
;;
esac
;;
"guile")
travis_retry sudo apt-get -qq install guile-2.0-dev
;;
"lua")
if [[ -z "$VER" ]]; then
travis_retry sudo apt-get -qq install lua5.2 liblua5.2-dev
else
travis_retry sudo apt-get -qq install lua${VER} liblua${VER}-dev
fi
;;
"mzscheme")
travis_retry sudo apt-get -qq install racket
;;
"ocaml")
travis_retry sudo apt-get -qq install ocaml camlp4
;;
"octave")
travis_retry sudo apt-get -qq install liboctave-dev
;;
"php")
travis_retry sudo add-apt-repository -y ppa:ondrej/php
travis_retry sudo apt-get -qq update
travis_retry sudo apt-get -qq install php$VER-cli php$VER-dev
;;
"python")
pip install --user pycodestyle
if [[ "$PY3" ]]; then
travis_retry sudo apt-get install -qq python3-dev
fi
WITHLANG=$SWIGLANG$PY3
if [[ "$VER" ]]; then
travis_retry sudo add-apt-repository -y ppa:deadsnakes/ppa
travis_retry sudo apt-get -qq update
travis_retry sudo apt-get -qq install python${VER}-dev
WITHLANG=$SWIGLANG$PY3=$SWIGLANG$VER
fi
;;
"r")
travis_retry sudo apt-get -qq install r-base
;;
"ruby")
if [[ "$VER" == "2.7" || "$VER" == "3.0" ]]; then
# Ruby 2.7+ support is currently only rvm master (30 Dec 2019)
travis_retry rvm get master
rvm reload
rvm list known
fi
if [[ "$VER" ]]; then
travis_retry rvm install $VER
fi
;;
"scilab")
# Travis has the wrong version of Java pre-installed resulting in error using scilab:
# /usr/bin/scilab-bin: error while loading shared libraries: libjava.so: cannot open shared object file: No such file or directory
echo "JAVA_HOME was set to $JAVA_HOME"
unset JAVA_HOME
travis_retry sudo apt-get -qq install scilab
;;
"tcl")
travis_retry sudo apt-get -qq install tcl-dev
;;
esac
set +e # turn off exit on failure (same as +o errexit)
# run generic script
RETRY=travis-retry
source "$script_dir"/CI-linux-install.sh