Files
libopenshot/.github/workflows/ci.yml
Jonathan Thomas 186a4ca5c1 Refactoring Audio Device detection (don't crash on Windows, find actual sample rate and device details) (#883)
* Close down ZMQ context to stop the zmq threads (related to sentry bug: OPENSHOT-3X)

* Add Support for Windows 7/8.1 (#881)

Adding protection around getting current sample rate for win 7, if audio device not found. Also added mutex for Singleton method. Also, making whitespace consistent on AudioPlaybackThread.cpp

* Big refactor of audio device opening - with multiple sample rates attempted, for better recovery from a missing or unsupported sample rate. Debug logs added for testing.

* Additional failure logging for windows audio device init

* Refactor of Audio Device Initialization (#882)

* Huge refactor of audio device initialization:
- Attempt requested audio device first, and then iterate through all known audio types and devices, and common sample rates. The idea is to ignore an invalid default or invalid requested device, and keep looking until we find a valid one
- New public method to return active, open audio device
- Added methods for AudioDeviceInfo struct, to make it callable from Python
- Some code clean-up and whitespace fixes
- New unit tests for AudioDeviceManagerSingleton

* Ignore audio device unit tests on systems with "No Driver" returned in the audio error message

* Ignore audio device unit tests if any error is found during initialization (i.e. build servers don't have audio cards)

* Trying to update GitHub libomp errors during build checks

* Remove zmq context shutdown call, due to the method missing on newer versions of zmq.hpp

* Downgrading GitHub Ubuntu latest image to Ubuntu 20.04, for compatibility with Catchv2

* Initialize all audio device manager variables correctly, and ignore unit test on low or missing sample rate systems (i.e. GitHub build servers)
2022-12-19 13:15:43 -06:00

215 lines
7.7 KiB
YAML

# © OpenShot Studios, LLC
#
# SPDX-License-Identifier: LGPL-3.0-or-later
name: libopenshot CI Build
on: [push, pull_request]
jobs:
build:
runs-on: ${{ matrix.sys.os }}
strategy:
matrix:
sys:
- { os: ubuntu-18.04, shell: bash }
- { os: ubuntu-20.04, shell: bash }
- { os: windows-2022, shell: 'msys2 {0}' }
compiler:
- { cc: gcc, cxx: g++ }
- { cc: clang, cxx: clang++ }
exclude:
# Windows clang isn't being our friend,
# JUCE seems to think it can use _get_tzname there
# (it can't)
- sys: { os: windows-2022, shell: 'msys2 {0}' }
compiler: { cc: clang, cxx: clang++ }
defaults:
run:
shell: "${{ matrix.sys.shell }}"
env:
CC: ${{ matrix.compiler.cc }}
CXX: ${{ matrix.compiler.cxx }}
CODECOV_TOKEN: 'dc94d508-39d3-4369-b1c6-321749f96f7c'
steps:
- uses: actions/checkout@v3
with:
# Work around a codecov issue detecting commit SHAs
# see: https://community.codecov.io/t/issue-detecting-commit-sha-please-run-actions-checkout-with-fetch-depth-1-or-set-to-0/2571
fetch-depth: 0
- name: Checkout OpenShotAudio
uses: actions/checkout@v3
with:
repository: OpenShot/libopenshot-audio
path: audio
- name: Checkout Resvg
if: ${{ matrix.compiler.cc == 'clang' && runner.os == 'linux' }}
uses: actions/checkout@v3
with:
repository: RazrFalcon/resvg
path: resvg
ref: v0.19.0
- uses: haya14busa/action-cond@v1
id: generator
with:
cond: ${{ runner.os == 'Windows' }}
if_true: "MinGW Makefiles"
if_false: "Unix Makefiles"
- uses: haya14busa/action-cond@v1
id: coverage
with:
cond: ${{ (matrix.compiler.cc == 'gcc' && runner.os == 'linux') || (matrix.compiler.cc == 'clang' && runner.os == 'macos') }}
if_true: "-DENABLE_COVERAGE:BOOL=1"
- uses: haya14busa/action-cond@v1
id: use-resvg
with:
cond: ${{ matrix.compiler.cc == 'clang' && runner.os == 'linux' }}
if_true: "-DResvg_ROOT:PATH=./resvg"
- name: Install Linux dependencies
if: ${{ runner.os == 'linux' }}
run: |
sudo apt update
sudo apt remove libzmq5 # See actions/virtual-environments#3317
sudo apt install \
cmake swig doxygen graphviz curl lcov \
libasound2-dev \
qtbase5-dev qtbase5-dev-tools libqt5svg5-dev \
libfdk-aac-dev libavcodec-dev libavformat-dev \
libavutil-dev libswscale-dev libswresample-dev \
libzmq3-dev libmagick++-dev libbabl-dev \
libopencv-dev libprotobuf-dev protobuf-compiler \
cargo libomp5 libomp-dev
# Install catch2 package from Ubuntu 20.10, since for some reason
# even 20.04 only has Catch 1.12.1 available.
wget https://launchpad.net/ubuntu/+archive/primary/+files/catch2_2.13.0-1_all.deb
sudo dpkg -i catch2_2.13.0-1_all.deb
- name: Install macOS dependencies
if: ${{ runner.os == 'macos' }}
run: |
brew install \
qt5 ffmpeg zeromq cppzmq libomp opencv protobuf babl \
python3 swig catch2 doxygen graphviz lcov
- name: Set up MSYS and install Windows dependencies
if: ${{ runner.os == 'Windows' }}
uses: msys2/setup-msys2@v2
with:
release: true
update: true
install: >-
mingw-w64-x86_64-gcc
mingw-w64-x86_64-lld
mingw-w64-x86_64-make
mingw-w64-x86_64-cmake
mingw-w64-x86_64-pkgconf
mingw-w64-x86_64-qt5-base
mingw-w64-x86_64-qt5-svg
mingw-w64-x86_64-qt5-winextras
mingw-w64-x86_64-qt5-tools
mingw-w64-x86_64-libvpx
mingw-w64-x86_64-ffmpeg
mingw-w64-x86_64-zeromq
mingw-w64-x86_64-opencv
mingw-w64-x86_64-protobuf
mingw-w64-x86_64-babl
mingw-w64-x86_64-catch
mingw-w64-x86_64-python3
mingw-w64-x86_64-swig
- uses: actions/cache@v3.0.1
name: Import OpenShotAudio cache
id: cache-audio
with:
path: audio/build
key: audio-${{ matrix.sys.os }}-${{ matrix.compiler.cxx }}-${{ hashFiles('audio/CMakeLists.txt') }}
- uses: actions/cache@v3.0.1
name: Import Resvg cache
if: ${{ steps.use-resvg.outputs.value }}
id: cache-resvg
with:
path: resvg/target
key: resvg-${{ matrix.sys.os }}-${{ matrix.compiler.cxx }}-${{ hashFiles('resvg/Cargo.toml') }}
- name: Build OpenShotAudio (if not cached)
if: steps.cache-audio.outputs.cache-hit != 'true'
run: |
pushd audio
if [ ! -d build ]; then
mkdir build
if [ "_${{ runner.os }}" == "_macOS" ]; then
export CMAKE_EXTRA="${CMAKE_EXTRA} -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9"
fi
if [ "_${{ runner.os }}_${{ matrix.compiler.cc }}" == "_macOS_clang" ]; then
export CMAKE_EXTRA="${CMAKE_EXTRA} \
-DCMAKE_EXE_LINKER_FLAGS=-stdlib=libc++ \
-DCMAKE_MODULE_LINKER_FLAGS=-stdlib=libc++ \
-DCMAKE_SHARED_LINKER_FLAGS=-stdlib=libc++";
fi
cmake -B build -S . -G "${{ steps.generator.outputs.value }}" \
-DCMAKE_BUILD_TYPE="Debug" \
-DCMAKE_INSTALL_PREFIX="${{ github.workspace }}/install" \
${CMAKE_EXTRA}
fi
cmake --build build
popd
- name: Build Resvg (if enabled and not cached)
if: steps.cache-resvg && (steps.cache-resvg.outputs.cache-hit != 'true')
run: |
if [ -d "resvg/c-api" ]; then
pushd resvg/c-api
cargo build --release
popd
fi
- name: Build libopenshot
run: |
if [ "_${{ runner.os }}" == "_macOS" ]; then
export CMAKE_EXTRA="${CMAKE_EXTRA} -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 \
-DQt5_DIR=/usr/local/opt/qt@5/lib/cmake/Qt5 \
-DENABLE_RUBY=0";
export PATH="/usr/local/opt/qt@5/bin:$PATH";
fi
if [ "_${{ runner.os }}_${{ matrix.compiler.cc }}" == "_macOS_clang" ]; then
export CMAKE_EXTRA="${CMAKE_EXTRA} \
-DCMAKE_EXE_LINKER_FLAGS=-stdlib=libc++ \
-DCMAKE_MODULE_LINKER_FLAGS=-stdlib=libc++ \
-DCMAKE_SHARED_LINKER_FLAGS=-stdlib=libc++";
fi
if [ "_${{ runner.os }}" == "_Windows" ]; then
export CMAKE_EXTRA="${CMAKE_EXTRA} \
-DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld \
-DCMAKE_MODULE_LINKER_FLAGS=-fuse-ld=lld \
-DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld"
fi
mkdir build
cmake -B build -S . -G "${{ steps.generator.outputs.value }}" \
-DCMAKE_BUILD_TYPE="Debug" \
-DCMAKE_INSTALL_PREFIX="${{ github.workspace }}/install" \
-DOpenShotAudio_ROOT="./audio/build" \
${CMAKE_EXTRA} \
"${{ steps.coverage.outputs.value }}" \
"${{ steps.use-resvg.outputs.value }}"
cmake --build build -- VERBOSE=1
- name: Test libopenshot
run: |
cmake --build build --target coverage -- VERBOSE=1
- name: Install libopenshot
run: |
cmake --build build --target install -- VERBOSE=1
- uses: codecov/codecov-action@v3.1.0
if: ${{ steps.coverage.outputs.value }}
with:
file: build/coverage.info