196 lines
6.7 KiB
YAML
196 lines
6.7 KiB
YAML
|
name: CI
|
||
|
|
||
|
env:
|
||
|
PYTHONUNBUFFERED: 1
|
||
|
|
||
|
on:
|
||
|
push:
|
||
|
branches: [ master ]
|
||
|
tags: [ "v*" ]
|
||
|
pull_request:
|
||
|
branches: [ master ]
|
||
|
|
||
|
jobs:
|
||
|
ci:
|
||
|
runs-on: ${{ matrix.os }}
|
||
|
strategy:
|
||
|
matrix:
|
||
|
os: [ubuntu-latest, windows-2019, macos-10.15]
|
||
|
python-version: ['3.7', '3.8', '3.9', '3.10']
|
||
|
architecture: [x64]
|
||
|
include:
|
||
|
- os: windows-2019
|
||
|
python-version: '3.7'
|
||
|
architecture: x86
|
||
|
exclude:
|
||
|
- os: windows-2019
|
||
|
python-version: '3.8'
|
||
|
- os: windows-2019
|
||
|
python-version: '3.9'
|
||
|
- os: windows-2019
|
||
|
python-version: '3.10'
|
||
|
- os: macOS-10.15
|
||
|
python-version: '3.7'
|
||
|
- os: macOS-10.15
|
||
|
python-version: '3.8'
|
||
|
- os: macOS-10.15
|
||
|
python-version: '3.10'
|
||
|
|
||
|
fail-fast: false
|
||
|
|
||
|
steps:
|
||
|
- uses: actions/checkout@v2
|
||
|
|
||
|
- name: Set up Python
|
||
|
uses: actions/setup-python@v2
|
||
|
with:
|
||
|
python-version: ${{ matrix.python-version }}
|
||
|
architecture: ${{ matrix.architecture }}
|
||
|
|
||
|
- name: Setup SDR Drivers (Windows)
|
||
|
if: startsWith(matrix.os, 'windows')
|
||
|
run: |
|
||
|
choco install wget --no-progress
|
||
|
wget -nv -O windrivers.zip https://github.com/jopohl/sdrbuild/releases/download/v1.1/win-$ARCH.zip
|
||
|
7z x windrivers.zip -osrc/urh/dev/native/lib/shared
|
||
|
ls src/urh/dev/native/lib/shared
|
||
|
shell: bash
|
||
|
env:
|
||
|
ARCH: ${{ matrix.architecture }}
|
||
|
|
||
|
- name: Install Dependencies
|
||
|
run: |
|
||
|
pip install wheel
|
||
|
pip install -r data/requirements.txt
|
||
|
if [[ $OS == ubuntu* ]]
|
||
|
then
|
||
|
sudo apt-get update
|
||
|
sudo apt-get install libhackrf-dev librtlsdr-dev xvfb libxkbcommon-x11-0 x11-utils libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xinerama0
|
||
|
pip install PyVirtualDisplay==0.2.5
|
||
|
elif [[ $OS == windows* ]]
|
||
|
then
|
||
|
pip install pywin32 pipwin
|
||
|
pipwin install pyaudio
|
||
|
elif [[ $OS == mac* ]]
|
||
|
then
|
||
|
brew tap pothosware/homebrew-pothos
|
||
|
brew install airspy hackrf librtlsdr libbladerf limesuite portaudio uhd
|
||
|
|
||
|
wget -nv https://github.com/analogdevicesinc/libiio/releases/download/v0.23/macOS-10.15.pkg
|
||
|
sudo installer -pkg macOS-10.15.pkg -target /
|
||
|
sudo cp /Library/Frameworks/iio.framework/iio /usr/local/lib/libiio.dylib
|
||
|
sudo install_name_tool -id "/usr/local/lib/libiio.dylib" /usr/local/lib/libiio.dylib
|
||
|
file /usr/local/lib/libiio.dylib
|
||
|
otool -L /usr/local/lib/libiio.dylib
|
||
|
sudo cp /Library/Frameworks/iio.framework/Versions/0.23/Headers/iio.h /usr/local/include
|
||
|
|
||
|
wget -nv https://www.sdrplay.com/software/SDRplay_RSP_API-MacOSX-2.13.2.pkg
|
||
|
sudo installer -pkg SDRplay_RSP_API-MacOSX-2.13.2.pkg -target /
|
||
|
|
||
|
pip install pyaudio
|
||
|
pip install pillow
|
||
|
fi
|
||
|
pip install twine setuptools pytest pytest-xvfb pytest-cov pytest-faulthandler six appdirs packaging pyinstaller
|
||
|
python -c "import tempfile, os; open(os.path.join(tempfile.gettempdir(), 'urh_releasing'), 'w').close()"
|
||
|
shell: bash
|
||
|
env:
|
||
|
OS: ${{ matrix.os }}
|
||
|
|
||
|
- name: Build Cython Extensions
|
||
|
run: python src/urh/cythonext/build.py
|
||
|
|
||
|
- name: Create sdist
|
||
|
if: ${{ matrix.python-version == '3.9' && startsWith(matrix.os, 'ubuntu') }}
|
||
|
run: python setup.py sdist
|
||
|
|
||
|
- run: python setup.py bdist_wheel
|
||
|
if: ${{ !startsWith(matrix.os, 'ubuntu') }}
|
||
|
|
||
|
- name: Build manylinux2014
|
||
|
if: startsWith(matrix.os, 'ubuntu')
|
||
|
run: |
|
||
|
docker run --rm \
|
||
|
-e PYVER=$(python -c "import sys; print('%s%s' % (sys.version_info.major, sys.version_info.minor))") \
|
||
|
-v `pwd`:/io jopohl/urh_manylinux2014 /io/data/make_manylinux2014_wheels.sh
|
||
|
|
||
|
- name: Check wheel
|
||
|
if: startsWith(matrix.os, 'ubuntu')
|
||
|
run: |
|
||
|
pip install dist/*.whl
|
||
|
urh --version
|
||
|
xvfb-run urh autoclose
|
||
|
python data/check_native_backends.py
|
||
|
|
||
|
- name: Build .exe Installer
|
||
|
if: startsWith(matrix.os, 'windows')
|
||
|
run: |
|
||
|
python data/pyinstaller_helper.py
|
||
|
for /f %%i in ('python src/urh/version.py') do set URHVERSION=%%i
|
||
|
iscc /dMyAppVersion=%URHVERSION% /dArch=%PYARCH% data/inno.iss
|
||
|
shell: cmd
|
||
|
env:
|
||
|
PYARCH: ${{ matrix.architecture }}
|
||
|
|
||
|
- name: Check urh_debug.exe
|
||
|
if: startsWith(matrix.os, 'windows')
|
||
|
run: |
|
||
|
cd pyinstaller\urh
|
||
|
urh_debug.exe autoclose
|
||
|
shell: cmd
|
||
|
|
||
|
- name: Build DMG
|
||
|
if: startsWith(matrix.os, 'macos')
|
||
|
run: |
|
||
|
cp data/pyinstaller_macos.spec urh.spec
|
||
|
pyinstaller --clean --distpath ./pyinstaller --workpath ./urh_build urh.spec
|
||
|
mkdir -p dist
|
||
|
cat pyinstaller/main.app/Contents/Info.plist
|
||
|
hdiutil create -volname Universal.Radio.Hacker \
|
||
|
-srcfolder pyinstaller/main.app \
|
||
|
-ov -format UDZO \
|
||
|
dist/Universal.Radio.Hacker-"$(python src/urh/version.py)".dmg
|
||
|
|
||
|
- name: Upload artifacts
|
||
|
uses: actions/upload-artifact@v2
|
||
|
with:
|
||
|
name: dist-${{ matrix.os }}
|
||
|
path: dist
|
||
|
|
||
|
- name: Run pytest with coverage
|
||
|
if: ${{ startsWith(matrix.os, 'ubuntu') && matrix.python-version == '3.9' }}
|
||
|
run: |
|
||
|
touch tests/show_gui
|
||
|
cp tests/.coveragerc .
|
||
|
pytest -s -v --junitxml=junit/test-results.xml --cov=src --cov-config=.coveragerc tests
|
||
|
coverage xml
|
||
|
coverage html
|
||
|
|
||
|
- name: Run pytest without coverage
|
||
|
if: ${{ !startsWith(matrix.os, 'ubuntu') || matrix.python-version != '3.9' }}
|
||
|
run: pytest -s -v --junitxml=junit/test-results.xml tests
|
||
|
|
||
|
- uses: ncipollo/release-action@v1
|
||
|
if: startsWith(github.ref, 'refs/tags/')
|
||
|
with:
|
||
|
artifacts: "dist/*.exe,dist/*.dmg"
|
||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||
|
allowUpdates: true
|
||
|
generateReleaseNotes: true
|
||
|
omitBodyDuringUpdate: true
|
||
|
omitNameDuringUpdate: true
|
||
|
|
||
|
- name: Upload to PyPi
|
||
|
if: startsWith(github.ref, 'refs/tags/')
|
||
|
run: |
|
||
|
if [[ $OS == ubuntu* ]]
|
||
|
then
|
||
|
twine upload --skip-existing dist/*
|
||
|
else
|
||
|
twine upload --skip-existing dist/*.whl
|
||
|
fi
|
||
|
shell: bash
|
||
|
env:
|
||
|
TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }}
|
||
|
TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }}
|
||
|
TWINE_REPOSITORY_URL: "https://upload.pypi.org/legacy/"
|