Skip to content

ci reduce build load #511

ci reduce build load

ci reduce build load #511

Workflow file for this run

name: CI
on: [push, pull_request]
jobs:
linux-ci:
name: Linux
strategy:
fail-fast: false
matrix:
build_type: [Release, Debug]
config:
- cc: gcc-9
cxx: g -9
os: ubuntu-20.04
python2_ver: '2.7'
python3_ver: '3.8'
- cc: gcc-10
cxx: g -10
os: ubuntu-20.04
python2_ver: '2.7'
python3_ver: '3.8'
- cc: gcc-11
cxx: g -11
os: ubuntu-22.04
python3_ver: '3.10'
- cc: gcc-12
cxx: g -12
os: ubuntu-22.04
python3_ver: '3.10'
- cc: clang-10
cxx: clang -10
os: ubuntu-20.04
python2_ver: '2.7'
python3_ver: '3.8'
- cc: clang-11
cxx: clang -11
os: ubuntu-20.04
python2_ver: '2.7'
python3_ver: '3.8'
- cc: clang-12
cxx: clang -12
os: ubuntu-20.04
python2_ver: '2.7'
python3_ver: '3.8'
- cc: clang-13
cxx: clang -13
os: ubuntu-22.04
python3_ver: '3.10'
- cc: clang-14
cxx: clang -14
os: ubuntu-22.04
python3_ver: '3.10'
runs-on: ${{matrix.config.os}}
env:
CC: ${{matrix.config.cc}}
CXX: ${{matrix.config.cxx}}
INSTALL_PREFIX: /usr/local
steps:
- uses: actions/checkout@v2
- name: Install dependencies
run: |
sudo apt update --fix-missing
sudo apt install -y libpython2-dev libpython3-dev python3-numpy doxygen luajit lua-ldoc
# Note: we need the grep because apt-cache will return 0 even when no packages are found
if sudo apt-cache search python-numpy | grep 'numpy -'; then sudo apt install -y python-numpy; fi
if sudo apt-cache search python2-numpy | grep 'numpy -'; then sudo apt install -y python2-numpy; fi
# LuaRocks stopped installing properly through apt, so just copy the file from its repo
git clone https://github.com/bluebird75/luaunit -b LUAUNIT_V3_4
sudo mkdir -p /usr/local/share/lua/5.1
sudo cp luaunit/luaunit.lua /usr/local/share/lua/5.1
- name: Build SoapySDR
run: |
mkdir -p ${{github.workspace}}/build
cd ${{github.workspace}}/build
cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=${{matrix.build_type}} ${{github.workspace}}
make
- name: Install
run: |
cd ${{github.workspace}}/build
sudo make install
sudo ldconfig
- name: Run unit tests
run: |
cd ${{github.workspace}}/build
ctest --output-on-failure
- name: Test SoapySDRUtil
run: |
SoapySDRUtil --info
SoapySDRUtil --check=null
SoapySDRUtil --make="driver=null"
- name: Test Python2 bindings
if: ${{matrix.config.python2_ver}}
run: |
export PYTHONPATH=${INSTALL_PREFIX}/$(python${{matrix.config.python2_ver}} ${{github.workspace}}/swig/python/get_python_lib.py ${INSTALL_PREFIX})
python${{matrix.config.python2_ver}} -c "import SoapySDR; print(SoapySDR.getAPIVersion())"
python${{matrix.config.python2_ver}} -c "from SoapySDR import *; print(SOAPY_SDR_ABI_VERSION)"
python${{matrix.config.python2_ver}} -c "from SoapySDR import *; print(SOAPY_SDR_TIMEOUT)"
python${{matrix.config.python2_ver}} -c "import SoapySDR; print(SoapySDR.errToStr(SoapySDR.SOAPY_SDR_TIMEOUT))"
python${{matrix.config.python2_ver}} -c "import SoapySDR; print(SoapySDR.Device.make('driver=null'))"
- name: Test Python3 bindings
run: |
export PYTHONPATH=${INSTALL_PREFIX}/$(python${{matrix.config.python3_ver}} ${{github.workspace}}/swig/python/get_python_lib.py ${INSTALL_PREFIX})
python${{matrix.config.python3_ver}} -c "import SoapySDR; print(SoapySDR.getAPIVersion())"
python${{matrix.config.python3_ver}} -c "from SoapySDR import *; print(SOAPY_SDR_ABI_VERSION)"
python${{matrix.config.python3_ver}} -c "from SoapySDR import *; print(SOAPY_SDR_TIMEOUT)"
python${{matrix.config.python3_ver}} -c "import SoapySDR; print(SoapySDR.errToStr(SoapySDR.SOAPY_SDR_TIMEOUT))"
python${{matrix.config.python3_ver}} -c "import SoapySDR; print(SoapySDR.Device.make('driver=null'))"
- name: Test LuaJIT bindings
run: |
luajit -e 'SoapySDR = require("SoapySDR"); print(SoapySDR.API_VERSION)'
luajit -e 'SoapySDR = require("SoapySDR"); print(SoapySDR.ABI_VERSION)'
luajit -e 'SoapySDR = require("SoapySDR"); print(SoapySDR.Error.TIMEOUT)'
luajit -e 'SoapySDR = require("SoapySDR"); print(SoapySDR.Error.ToString(SoapySDR.Error.TIMEOUT))'
luajit -e 'SoapySDR = require("SoapySDR"); print(SoapySDR.Device.new("driver=null"))'
- name: Test module registration
run: |
mkdir -p ${{github.workspace}}/build-example
cd ${{github.workspace}}/build-example
cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=${{matrix.build_type}} ${{github.workspace}}/ExampleDriver
sudo make install
SoapySDRUtil --check=my_device
osx-ci:
name: OS X
strategy:
fail-fast: false
matrix:
build_type: [Release, Debug]
config:
- cc: gcc-11
cxx: g -11
test_luajit: false
os: macos-11
python3_ver: '3.8'
- cc: clang
cxx: clang
test_luajit: true
os: macos-11
python3_ver: '3.8'
- cc: clang
cxx: clang
os: macos-12
python3_ver: '3.9'
runs-on: ${{matrix.config.os}}
env:
CC: ${{matrix.config.cc}}
CXX: ${{matrix.config.cxx}}
INSTALL_PREFIX: /usr/local
steps:
- uses: actions/checkout@v2
- name: Install dependencies
run: |
brew install doxygen luajit
which luajit
pip install numpy
pip3 install numpy
# Installing Lua 5.1 dependencies via package is ugly
cd ${{runner.workspace}}
git clone https://github.com/bluebird75/luaunit.git -b LUAUNIT_V3_4
sudo mkdir -p /usr/local/share/lua/5.1
sudo cp luaunit/luaunit.lua /usr/local/share/lua/5.1
- name: Build SoapySDR
run: |
mkdir -p ${{github.workspace}}/build
cd ${{github.workspace}}/build
cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=${{matrix.build_type}} ${{github.workspace}}
make
- name: Install
run: |
cd ${{github.workspace}}/build
sudo make install
- name: Run unit tests
run: |
cd ${{github.workspace}}/build
ctest --output-on-failure
- name: Test SoapySDRUtil
run: |
SoapySDRUtil --info
SoapySDRUtil --check=null
SoapySDRUtil --make="driver=null"
- name: Set up Python3
uses: actions/setup-python@v4
with:
python-version: ${{matrix.config.python3_ver}}
- name: Test Python3 bindings
run: |
export DYLD_LIBRARY_PATH=/usr/local/lib
export PYTHONPATH=${INSTALL_PREFIX}/$(python${{matrix.config.python3_ver}} ${{github.workspace}}/swig/python/get_python_lib.py ${INSTALL_PREFIX})
python${{matrix.config.python3_ver}} -c "import SoapySDR; print(SoapySDR.getAPIVersion())"
python${{matrix.config.python3_ver}} -c "from SoapySDR import *; print(SOAPY_SDR_ABI_VERSION)"
python${{matrix.config.python3_ver}} -c "from SoapySDR import *; print(SOAPY_SDR_TIMEOUT)"
python${{matrix.config.python3_ver}} -c "import SoapySDR; print(SoapySDR.errToStr(SoapySDR.SOAPY_SDR_TIMEOUT))"
python${{matrix.config.python3_ver}} -c "import SoapySDR; print(SoapySDR.Device.make('driver=null'))"
- name: Test LuaJIT bindings
if: ${{ matrix.config.test_luajit }}
run: |
luajit -e 'SoapySDR = require("SoapySDR"); print(SoapySDR.API_VERSION)'
luajit -e 'SoapySDR = require("SoapySDR"); print(SoapySDR.ABI_VERSION)'
luajit -e 'SoapySDR = require("SoapySDR"); print(SoapySDR.Error.TIMEOUT)'
luajit -e 'SoapySDR = require("SoapySDR"); print(SoapySDR.Error.ToString(SoapySDR.Error.TIMEOUT))'
luajit -e 'SoapySDR = require("SoapySDR"); print(SoapySDR.Device.new("driver=null"))'
- name: Test module registration
run: |
mkdir -p ${{github.workspace}}/build-example
cd ${{github.workspace}}/build-example
cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=${{matrix.build_type}} ${{github.workspace}}/ExampleDriver
sudo make install
SoapySDRUtil --check=my_device
windows-ci:
name: Windows
strategy:
fail-fast: false
matrix:
platform:
- cmake_gen: '"Visual Studio 16 2019" -A "Win32"'
msvc: true
arch: win32
python_arch: x86
os: windows-2019
- cmake_gen: '"Visual Studio 16 2019" -A "x64"'
msvc: true
arch: x64
python_arch: x64
os: windows-2019
- cmake_gen: '"Visual Studio 17 2022" -A "Win32"'
msvc: true
arch: win32
python_arch: x86
os: windows-2022
- cmake_gen: '"Visual Studio 17 2022" -A "x64"'
msvc: true
arch: x64
python_arch: x64
os: windows-2022
build:
- type: Release
python_version: '3.9.13'
python_name: 'python3'
cmake_flags: '-DENABLE_PYTHON2=OFF -DENABLE_PYTHON3=ON'
- type: Debug
cmake_flags: '-DENABLE_PYTHON2=OFF -DENABLE_PYTHON3=OFF'
exclude:
- platform: {os: windows-2022}
build: {python_version: '2.7.18'}
runs-on: ${{matrix.platform.os}}
env:
INSTALL_PREFIX: 'C:\Program Files\SoapySDR'
LUAJIT_INSTALL_PREFIX: 'C:\Program Files\LuaJIT'
LUAJIT_LUA_DIR: 'C:\Program Files\LuaJIT\lua'
LUA_PATH: '.\?.lua;C:\Program Files\LuaJIT\lua\?.lua;C:\Program Files\LuaJIT\lua\?\init.lua;C:\Program Files\SoapySDR\share\lua\5.1\?.lua;C:\Program Files\SoapySDR\share\lua\5.1\?\?.lua;C:\Program Files\SoapySDR\share\lua\5.1\?\init.lua'
steps:
- uses: actions/checkout@v2
- uses: ilammy/msvc-dev-cmd@v1
if: ${{matrix.platform.msvc}}
with:
arch: ${{matrix.platform.arch}}
- name: Install common dependencies
run: |
mkdir -p "$Env:LUAJIT_LUA_DIR"
cd ${{runner.workspace}}
git clone https://github.com/LuaJIT/LuaJIT.git -b v2.1
git clone https://github.com/bluebird75/luaunit.git -b LUAUNIT_V3_4
cp -v luaunit\luaunit.lua "$Env:LUAJIT_LUA_DIR"
# TODO: re-enable after issue fixed: http://disq.us/p/2pvugqv
#choco install doxygen.install
- name: Install MSVC dependencies
if:
${{matrix.platform.msvc}}
run: |
cd ${{runner.workspace}}\LuaJIT\src
.\msvcbuild.bat
cp -v luajit.exe "$Env:LUAJIT_INSTALL_PREFIX"
cp -v lua51.dll "$Env:LUAJIT_INSTALL_PREFIX"
cp -v -r jit "$Env:LUAJIT_INSTALL_PREFIX"
- name: Install MinGW dependencies
if:
${{matrix.platform.msvc == false}}
run: |
cd ${{runner.workspace}}\LuaJIT\src
mingw32-make
cp -v luajit.exe "$Env:LUAJIT_INSTALL_PREFIX"
cp -v lua51.dll "$Env:LUAJIT_INSTALL_PREFIX"
cp -v -r jit "$Env:LUAJIT_INSTALL_PREFIX"
- name: Build SoapySDR
run: |
$Env:PATH = ";$Env:LUAJIT_INSTALL_PREFIX"
mkdir ${{github.workspace}}\build
cd ${{github.workspace}}\build
cmake -G ${{matrix.platform.cmake_gen}} -DCMAKE_INSTALL_PREFIX="$Env:INSTALL_PREFIX" -DCMAKE_BUILD_TYPE=${{matrix.build.type}} ${{matrix.build.cmake_flags}} ${{github.workspace}}
cmake --build . --config ${{matrix.build.type}}
- name: Install
run: |
cd ${{github.workspace}}\build
cmake --install . --config ${{matrix.build.type}}
- name: Run unit tests
run: |
$Env:PATH = ";$Env:INSTALL_PREFIX\bin;$Env:LUAJIT_INSTALL_PREFIX"
cd ${{github.workspace}}\build
ctest --output-on-failure -C ${{matrix.build.type}}
- name: Test SoapySDRUtil
run: |
$Env:PATH = ";$Env:INSTALL_PREFIX\bin"
SoapySDRUtil --info
SoapySDRUtil --check=null
SoapySDRUtil --make="driver=null"
- name: Test Python bindings
if: ${{matrix.build.python_name}}
env:
PYTHON_EXE: 'C:\hostedtoolcache\windows\Python\${{matrix.build.python_version}}\${{matrix.platform.python_arch}}\${{matrix.build.python_name}}.exe'
run: |
$Env:PATH = ";$Env:INSTALL_PREFIX\bin"
$Env:PYTHONPATH = ";$Env:INSTALL_PREFIX\Lib\site-packages"
echo $Env:PYTHONPATH
& "$Env:PYTHON_EXE" -c "import SoapySDR; print(SoapySDR.getAPIVersion())"
& "$Env:PYTHON_EXE" -c "from SoapySDR import *; print(SOAPY_SDR_ABI_VERSION)"
& "$Env:PYTHON_EXE" -c "from SoapySDR import *; print(SOAPY_SDR_TIMEOUT)"
& "$Env:PYTHON_EXE" -c "import SoapySDR; print(SoapySDR.errToStr(SoapySDR.SOAPY_SDR_TIMEOUT))"
& "$Env:PYTHON_EXE" -c "import SoapySDR; print(SoapySDR.Device.make('driver=null'))"
- name: Test LuaJIT bindings
run: |
$Env:PATH = ";$Env:INSTALL_PREFIX\bin;$Env:LUAJIT_INSTALL_PREFIX"
luajit -e "SoapySDR = require('SoapySDR'); print(SoapySDR.API_VERSION)"
luajit -e "SoapySDR = require('SoapySDR'); print(SoapySDR.ABI_VERSION)"
luajit -e "SoapySDR = require('SoapySDR'); print(SoapySDR.Error.TIMEOUT)"
luajit -e "SoapySDR = require('SoapySDR'); print(SoapySDR.Error.ToString(SoapySDR.Error.TIMEOUT))"
luajit -e "SoapySDR = require('SoapySDR'); print(SoapySDR.Device.new('driver=null'))"
- name: Test module registration
run: |
$Env:PATH = ";$Env:INSTALL_PREFIX\bin"
mkdir -p ${{github.workspace}}\build-example
cd ${{github.workspace}}\build-example
cmake -G ${{matrix.platform.cmake_gen}} -DCMAKE_INSTALL_PREFIX="$Env:INSTALL_PREFIX" -DCMAKE_BUILD_TYPE=${{matrix.build.type}} ${{github.workspace}}\ExampleDriver
cmake --build . --config ${{matrix.build.type}}
cmake --install . --config ${{matrix.build.type}}
SoapySDRUtil --check=my_device