Skip to content

qmlui: bring back audio waveform preview in Show Manager #1859

qmlui: bring back audio waveform preview in Show Manager

qmlui: bring back audio waveform preview in Show Manager #1859

Workflow file for this run

name: QLCplus Github Actions CI Build
on: ["push", "pull_request"]
jobs:
build-linux:
#if: false
runs-on: ubuntu-22.04
name: QLCplus Linux ${{matrix.task}}
strategy:
#fail-fast: false
matrix:
task: [build-v4, build-v5, coverage-build-v4]
env:
CI_REPO_SLUG: ${{ github.repository }}
CI_BRANCH: ${{ github.head_ref }}
CI_PULL_REQUEST: ${{ github.event.number }}
CC: gcc
CXX: g++
PACKAGES_BASE:
gdb
libasound2-dev
libusb-1.0-0-dev
libftdi1-dev
shared-mime-info
libudev-dev
libmad0-dev
libsndfile1-dev
liblo-dev
libfftw3-dev
libgl1-mesa-dev
libxml2-utils
xvfb
chrpath
libfuse2
wget
PACKAGES_V5_BASE:
libpulse-dev
PACKAGES_COVERAGE_BASE:
lcov
defaults:
run:
shell: bash
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: false
- name: Set General ENV variables
run: |
echo "PACKAGES_V4=$(echo ${PACKAGES_BASE})" >> $GITHUB_ENV
echo "PACKAGES_V5=$(echo ${PACKAGES_BASE} ${PACKAGES_V5_BASE})" >> $GITHUB_ENV
echo "PACKAGES_COVERAGE=$(echo ${PACKAGES_BASE} ${PACKAGES_V4_BASE} ${PACKAGES_COVERAGE_BASE})" >> $GITHUB_ENV
echo "PACKAGES_ALL=$(echo ${PACKAGES_BASE} ${PACKAGES_V5_BASE} ${PACKAGES_COVERAGE_BASE})" >> $GITHUB_ENV
echo "CI_BRANCH=$(echo $GITHUB_REF | cut -d '/' -f 3)" >> $GITHUB_ENV
echo "CI_SECURE_ENV_VARS=$(if [ -z '${{ secrets.something }}' ]; then echo 'false'; else echo 'true'; fi)" >> $GITHUB_ENV
echo "CI_EVENT_TYPE=$(if [ 'schedule' == '${{ github.event_name }}' ]; then echo 'cron'; else echo '${{ github.event_name }}'; fi)" >> $GITHUB_ENV
echo "NPROC=$(nproc)" >> $GITHUB_ENV
echo "TASK=$(echo '${{matrix.task}}' | cut -d '-' -f 2)" >> $GITHUB_ENV
echo "INSTALL_ROOT=`pwd`/install_root" >> $GITHUB_ENV
echo "BUILD_DATE=`date -u '+%Y%m%d'`" >> $GITHUB_ENV
echo "GIT_REV=`git rev-parse --short HEAD`" >> $GITHUB_ENV
- name: Set Qt ENV variables (v4)
if: ${{ endsWith( matrix.task, 'v4') }}
run: |
echo "QT=${QT:-$(echo '${{matrix.task}}' | cut -d '-' -f 2)}" >> $GITHUB_ENV
echo "QT_INSTALL_DIR=/opt" >> $GITHUB_ENV
echo "QT_VERSION=6.8.1" >> $GITHUB_ENV
echo "APPVERSION=`grep '^!qmlui' variables.pri | grep APPVERSION | sed 's/^.*= *//;s/ /_/g'`" >> $GITHUB_ENV
source $GITHUB_ENV && echo "QTDIR=${QT_INSTALL_DIR}/Qt/${QT_VERSION}/gcc_64" >> $GITHUB_ENV
source $GITHUB_ENV && echo "QMAKE=${QTDIR}/bin/qmake" >> $GITHUB_ENV
- name: Set Qt ENV variables (v5)
if: ${{ endsWith( matrix.task, 'v5') }}
run: |
echo "QT=${QT:-$(echo '${{matrix.task}}' | cut -d '-' -f 2)}" >> $GITHUB_ENV
echo "QT_INSTALL_DIR=/opt" >> $GITHUB_ENV
echo "QT_VERSION=6.8.1" >> $GITHUB_ENV
echo "APPVERSION=`grep '^qmlui' variables.pri | grep APPVERSION | sed 's/^.*= *//;s/ /_/g'`" >> $GITHUB_ENV
source $GITHUB_ENV && echo "QTDIR=${QT_INSTALL_DIR}/Qt/${QT_VERSION}/gcc_64" >> $GITHUB_ENV
source $GITHUB_ENV && echo "QMAKE=${QTDIR}/bin/qmake" >> $GITHUB_ENV
- name: Print ENV vars
run: |
echo "CI_BRANCH: ${CI_BRANCH}"
echo "CI_PULL_REQUEST: ${CI_PULL_REQUEST}"
echo "CI_REPO_SLUG: ${CI_REPO_SLUG}"
echo "CI_EVENT_TYPE: ${CI_EVENT_TYPE}"
echo "CI_SECURE_ENV_VARS: ${CI_SECURE_ENV_VARS}"
echo "PACKAGES_V4: ${PACKAGES_V4}"
echo "PACKAGES_V5: ${PACKAGES_V5}"
echo "PACKAGES_COVERAGE: ${PACKAGES_COVERAGE}"
echo "TASK: ${TASK}"
echo "QT: ${QT}"
echo "NPROC: ${NPROC}"
- name: Download, cache and install packages
uses: awalsh128/[email protected]
with:
packages: ${{env.PACKAGES_ALL}}
version: ${{runner.os}}-apt
- name: Install Qt through aqt (and python)
uses: jurplel/install-qt-action@v4
with:
version: ${{ env.QT_VERSION }}
cache: true
dir: ${{ env.QT_INSTALL_DIR }}
modules: 'qt3d qtimageformats qtmultimedia qtserialport qtwebsockets'
- name: Install python-lxml for fixtures-tool # with the now-registered aqt python
run: pip install lxml
- name: Setup ccache
uses: hendrikmuhs/[email protected]
with:
key: ${{ github.job }}-${{ matrix.task }}
- name: Setup ruby cache
uses: ruby/setup-ruby@v1
with:
ruby-version: '2.7'
bundler-cache: true
- name: Install coveralls-lcov
if: ${{ startsWith( matrix.task, 'coverage') }}
run: sudo gem install coveralls-lcov
- name: Print program versions and username
run: |
echo "CXX:"
${CXX} --version
echo "QMAKE:"
${QMAKE} -v
echo "Python:"
python --version
echo "WHOAMI:"
whoami
- name: Configure for v4 build
if: ${{ matrix.task == 'build-v4' }}
run: |
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$QTDIR/lib/cmake/" -Dappimage=ON -DINSTALL_ROOT=${INSTALL_ROOT} -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
- name: Configure for v5 build
if: ${{ matrix.task == 'build-v5' }}
run: |
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$QTDIR/lib/cmake/" -Dqmlui=ON -Dappimage=ON -DINSTALL_ROOT=${INSTALL_ROOT} -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
- name: Configure for coverage build
if: ${{ matrix.task == 'coverage-build-v4' }}
run: |
cmake -DCMAKE_PREFIX_PATH="/opt/Qt/$QT_VERSION/gcc_64/lib/cmake" -Dcoverage=ON -DINSTALL_ROOT=${INSTALL_ROOT} -B build
- name: Build
run: cmake --build build --parallel `nproc`
- name: Test
if: ${{ ! startsWith( matrix.task, 'coverage') }}
run: cmake --build build --target check
- name: Test with Coverage
if: ${{ startsWith( matrix.task, 'coverage') }}
run: cmake --build build --target lcov
- name: Coveralls
if: ${{ startsWith( matrix.task, 'coverage') }}
uses: coverallsapp/github-action@v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
file: coverage/coverage.info
format: lcov
- name: Install
if: ${{ ! startsWith( matrix.task, 'coverage') }}
run: |
cmake --build build --target install
cp -v resources/icons/svg/qlcplus.svg ${INSTALL_ROOT}
cp -v platforms/linux/qlcplus.desktop ${INSTALL_ROOT}
- name: Adapt qlcplus for AppImage (qt5)
if: ${{ matrix.task == 'build-v4' }}
run: |
chrpath -r "../lib" ${INSTALL_ROOT}/usr/bin/qlcplus
- name: Adapt qlcplus for AppImage (qt5qml)
if: ${{ matrix.task == 'build-v5' }}
run: |
chrpath -r "../lib" ${INSTALL_ROOT}/usr/bin/qlcplus-qml
sed -i -e 's/Exec=qlcplus --open %f/Exec=qlcplus-qml/g' ${INSTALL_ROOT}/qlcplus.desktop
- name: Store original install artifacts before stripping and AppImage
# Activate for debugging
if: ${{ false && ! startsWith( matrix.task, 'coverage') }}
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.task }}-files
path: ${{ env.INSTALL_ROOT }}
- name: Strip Binaries (qt5)
if: ${{ matrix.task == 'build-v4' }}
run: |
strip -v ${INSTALL_ROOT}/usr/bin/qlcplus
find ${INSTALL_ROOT}/usr/lib/ -name libqlcplusengine.so.1.0.0 -exec strip -v {} \;
- name: Strip Binaries (qt5qml)
if: ${{ matrix.task == 'build-v5' }}
run: |
strip -v ${INSTALL_ROOT}/usr/bin/qlcplus-qml
find ${INSTALL_ROOT}/usr/lib/ -name libqlcplusengine.so.1.0.0 -exec strip -v {} \;
- name: Delete unused files for AppImage
if: ${{ ! startsWith( matrix.task, 'coverage') }}
run: |
find ${INSTALL_ROOT}/usr/bin/ -name plugins.qmltypes -type f -delete
find ${INSTALL_ROOT}/usr/bin -name *.qmlc -type f -delete
rm -rf ${INSTALL_ROOT}/usr/bin/QtQuick/Extras QtQuick/Particles.2 QtQuick/XmlListModel
rm -rf ${INSTALL_ROOT}/usr/bin/QtQuick/Controls.2/designer QtQuick/Controls.2/Material
rm -rf ${INSTALL_ROOT}/usr/bin/QtQuick/Controls.2/Universal QtQuick/Controls.2/Fusion
rm -rf ${INSTALL_ROOT}/usr/bin/QtQuick/Controls.2/Imagine QtQuick/Controls.2/Scene2D
- name: Build AppImage
if: ${{ ! startsWith( matrix.task, 'coverage') }}
run: |
wget -c https://github.com/AppImage/AppImageKit/releases/download/continuous/AppRun-x86_64 -O ${INSTALL_ROOT}/AppRun
chmod a+x ${INSTALL_ROOT}/AppRun
wget -c https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage -O ./appimagetool-x86_64.AppImage
chmod a+x ./appimagetool-x86_64.AppImage
./appimagetool-x86_64.AppImage -v ${INSTALL_ROOT}
mv -v Q_Light_Controller_Plus_-_QLC+-x86_64.AppImage qlcplus-${{env.TASK}}-${{env.APPVERSION}}-${{env.BUILD_DATE}}-${{env.GIT_REV}}.AppImage
- name: Test Load AppImage
if: ${{ matrix.task == 'build-v5' }}
run: |
./qlcplus-${{env.TASK}}-${{env.APPVERSION}}-${{env.BUILD_DATE}}-${{env.GIT_REV}}.AppImage --platform offscreen --version
- name: Store AppImage artifacts
if: ${{ ! startsWith( matrix.task, 'coverage') }}
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.task }}-AppImage
path: qlcplus-${{env.TASK}}-${{env.APPVERSION}}-${{env.BUILD_DATE}}-${{env.GIT_REV}}.AppImage
build-windows:
runs-on: windows-latest
name: QLCplus Windows ${{matrix.task}}
strategy:
fail-fast: false
matrix:
task: [build-v4, build-v5]
env:
CI_REPO_SLUG: ${{ github.repository }}
CI_BRANCH: ${{ github.head_ref }}
CI_PULL_REQUEST: ${{ github.event.number }}
QT_VERSION: "6.8.1"
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: false
- name: Setup ccache
uses: hendrikmuhs/[email protected]
with:
key: ${{ github.job }}-${{ matrix.task }}
- name: Set ENV variables
shell: bash
run: |
echo "CI_BRANCH=$(echo $GITHUB_REF | cut -d '/' -f 3)" >> $GITHUB_ENV
echo "CI_SECURE_ENV_VARS=$(if [ -z '${{ secrets.something }}' ]; then echo 'false'; else echo 'true'; fi)" >> $GITHUB_ENV
echo "CI_EVENT_TYPE=$(if [ 'schedule' == '${{ github.event_name }}' ]; then echo 'cron'; else echo '${{ github.event_name }}'; fi)" >> $GITHUB_ENV
echo "NPROC=$(nproc)" >> $GITHUB_ENV
echo "TASK=$(echo '${{matrix.task}}' | cut -d '-' -f 2)" >> $GITHUB_ENV
echo "QT=${QT:-$(echo '${{matrix.task}}' | cut -d '-' -f 2)}" >> $GITHUB_ENV
echo "QTDIR=/d/a/qlcplus/qlcplus/qt/Qt/${{ env.QT_VERSION }}/mingw_64" >> $GITHUB_ENV
echo "BUILD_DATE=`date -u '+%Y%m%d'`" >> $GITHUB_ENV
echo "GIT_REV=`git rev-parse --short HEAD`" >> $GITHUB_ENV
- name: Set v4 ENV variables
shell: bash
if: ${{ matrix.task == 'build-v4' }}
run: |
echo "OUTFILE=`grep 'OutFile' platforms/windows/qlcplus4Qt6.nsi | cut -d'"' -f 2`" >> $GITHUB_ENV
echo "APPVERSION=`grep '^!qmlui' variables.pri | grep APPVERSION | sed 's/^.*= *//' | cut -d ' ' -f 1`" >> $GITHUB_ENV
echo "NSIS_SCRIPT=qlcplus4Qt6.nsi" >> $GITHUB_ENV
- name: Set v5 ENV variables
shell: bash
if: ${{ matrix.task == 'build-v5' }}
run: |
echo "OUTFILE=`grep 'OutFile' platforms/windows/qlcplus5Qt6.nsi | cut -d'"' -f 2`" >> $GITHUB_ENV
echo "APPVERSION=`grep '^qmlui' variables.pri | grep APPVERSION | sed 's/^.*= *//' | cut -d ' ' -f 1`" >> $GITHUB_ENV
echo "NSIS_SCRIPT=qlcplus5Qt6.nsi" >> $GITHUB_ENV
- name: Print ENV vars
shell: bash
run: |
echo "CI_BRANCH: ${CI_BRANCH}"
echo "CI_PULL_REQUEST: ${CI_PULL_REQUEST}"
echo "CI_REPO_SLUG: ${CI_REPO_SLUG}"
echo "CI_EVENT_TYPE: ${CI_EVENT_TYPE}"
echo "CI_SECURE_ENV_VARS: ${CI_SECURE_ENV_VARS}"
echo "TASK: ${TASK}"
echo "QT: ${QT}"
echo "NPROC: ${NPROC}"
- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
version: ${{ env.QT_VERSION }}
host: 'windows'
target: 'desktop'
arch: 'win64_mingw'
dir: "${{ github.workspace }}/qt/"
modules: 'qt3d qtimageformats qtmultimedia qtserialport qtwebsockets'
- name: Update and install MSYS2 (64bit)
uses: msys2/setup-msys2@v2
with:
msystem: mingw64
release: true
update: false
path-type: inherit
install: >-
wget
unzip
mingw-w64-x86_64-gcc
mingw-w64-x86_64-gcc-libs
mingw-w64-x86_64-cmake
mingw-w64-x86_64-libmad
mingw-w64-x86_64-libsndfile
mingw-w64-x86_64-flac
mingw-w64-x86_64-fftw
mingw-w64-x86_64-libusb
mingw-w64-x86_64-python-lxml
mingw-w64-x86_64-nsis
- name: D2XX SDK (64 bit)
shell: msys2 {0}
run: |
mkdir -p /c/projects/D2XXSDK
wget https://qlcplus.org/misc/CDM-v2.12.36.20-WHQL-Certified.zip -O /c/projects/D2XXSDK/cdm.zip
cd /c/projects/D2XXSDK
unzip cdm.zip
cd amd64
gendef.exe - ftd2xx64.dll > ftd2xx.def
dlltool -k --input-def ftd2xx.def --dllname ftd2xx64.dll --output-lib libftd2xx.a
- name: Print program versions
shell: msys2 {0}
run: |
echo "pwd:"
pwd
echo "CXX:"
which ${CXX} || true
${CXX} -v || true
echo "cmake:"
which cmake || true
cmake --version || true
pkg-config --modversion libusb-1.0
echo "ccache:"
ccache --version || true
- name: Fix build
shell: msys2 {0}
run: |
# force a release build
sed -i -e 's/Debug/Release/g' CMakeLists.txt
# disable Velleman plugin
sed -i -e 's/ add_subdirectory(velleman)/# add_subdirectory(velleman)/g' plugins/CMakeLists.txt
# fix MSYS2 system path
sed -i -e 's/$ENV{SystemDrive}\/msys64/D:\/a\/_temp\/msys64/g' platforms/windows/CMakeLists.txt
# fix project path in NSIS script
sed -i -e 's/c\:\\projects/d:\\a\\qlcplus/g' platforms/windows/${{env.NSIS_SCRIPT}}
- name: Configure v4 build for Windows
shell: msys2 {0}
if: ${{ matrix.task == 'build-v4' }}
run: |
cmake -S . -B build -DCMAKE_PREFIX_PATH="${{ env.QTDIR }}/lib/cmake" -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
- name: Configure v5 build for Windows
shell: msys2 {0}
if: ${{ matrix.task == 'build-v5' }}
run: |
cmake -S . -B build -DCMAKE_PREFIX_PATH="${{ env.QTDIR }}/lib/cmake" -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -Dqmlui=ON
- name: Build for Windows
shell: msys2 {0}
run: |
cd build
ninja
- name: Install on Windows
shell: msys2 {0}
run: |
cd build
ninja install
- name: Run windeployqt for v4
shell: msys2 {0}
if: ${{ matrix.task == 'build-v4' }}
run: |-
./translate.sh release ui
cp *.qm /c/qlcplus
cd /c/qlcplus
${{ env.QTDIR }}/bin/windeployqt qlcplus.exe qlcplusengine.dll qlcplusui.dll qlcpluswebaccess.dll plugins/dmxusb.dll
- name: Run windeployqt for v5
shell: msys2 {0}
if: ${{ matrix.task == 'build-v5' }}
run: |-
SRC_DIR=$PWD
./translate.sh release qmlui
cp *.qm /c/qlcplus
cd /c/qlcplus
${{ env.QTDIR }}/bin/windeployqt --qmldir $SRC_DIR/qmlui/qml qlcplus-qml.exe qlcplusengine.dll plugins/dmxusb.dll
- name: Build installation package
shell: msys2 {0}
run: |
cd /c/qlcplus
echo 'Creating package...'
makensis -X'SetCompressor /FINAL lzma' ${{env.NSIS_SCRIPT}}
mv /c/qlcplus/${{env.OUTFILE}} /d/a/qlcplus/qlcplus/${{matrix.task}}-${{env.OUTFILE}}
- name: Store executable artifact
uses: actions/upload-artifact@v4
with:
name: QLC+-${{matrix.task}}-${{env.APPVERSION}}-${{env.BUILD_DATE}}-${{env.GIT_REV}}.exe
path: ${{matrix.task}}-${{env.OUTFILE}}
build-macos:
runs-on: macos-15
name: QLCplus macOS ${{matrix.task}}
strategy:
fail-fast: false
matrix:
task: [build-v4, build-v5]
env:
CI_REPO_SLUG: ${{ github.repository }}
CI_BRANCH: ${{ github.head_ref }}
CI_PULL_REQUEST: ${{ github.event.number }}
QT_VERSION: "6.9.3"
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: false
- name: Set ENV variables
shell: bash
run: |
echo "BUILD_DATE=`date -u '+%Y%m%d'`" >> $GITHUB_ENV
echo "GIT_REV=`git rev-parse --short HEAD`" >> $GITHUB_ENV
echo "QTDIR=${{ github.workspace }}/qt/Qt/${{ env.QT_VERSION }}/macos" >> $GITHUB_ENV
echo "NPROC=`sysctl -n hw.ncpu`" >> $GITHUB_ENV
- name: Set v4 ENV variables
shell: bash
if: ${{ matrix.task == 'build-v4' }}
run: |
echo "APPVERSION=`grep '^!qmlui' variables.pri | grep APPVERSION | sed 's/^.*= *//;s/ /_/g'`" >> $GITHUB_ENV
- name: Set v5 ENV variables
shell: bash
if: ${{ matrix.task == 'build-v5' }}
run: |
echo "APPVERSION=`grep '^qmlui' variables.pri | grep APPVERSION | sed 's/^.*= *//;s/ /_/g'`" >> $GITHUB_ENV
- name: Print ENV vars
shell: bash
run: |
echo "CI_BRANCH: ${CI_BRANCH}"
echo "CI_PULL_REQUEST: ${CI_PULL_REQUEST}"
echo "CI_REPO_SLUG: ${CI_REPO_SLUG}"
echo "CI_EVENT_TYPE: ${CI_EVENT_TYPE}"
echo "CI_SECURE_ENV_VARS: ${CI_SECURE_ENV_VARS}"
echo "TASK: ${TASK}"
echo "QTDIR: ${QTDIR}"
echo "NPROC: ${NPROC}"
- name: Dependencies
run: |
brew update
brew install fftw mad libsndfile libftdi
brew link --overwrite [email protected]
- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
version: ${{ env.QT_VERSION }}
dir: "${{ github.workspace }}/qt/"
target: 'desktop'
arch: 'clang_64'
modules: 'qt3d qtimageformats qtmultimedia qtserialport qtwebsockets'
- name: Setup ccache
uses: hendrikmuhs/[email protected]
if: false
- name: Configure v4 build
shell: bash
if: ${{ matrix.task == 'build-v4' }}
run: |-
cmake -S . -B build -DCMAKE_PREFIX_PATH="${{ env.QTDIR }}/lib/cmake" -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15
- name: Configure v5 build
shell: bash
if: ${{ matrix.task == 'build-v5' }}
run: |-
cmake -S . -B build -DCMAKE_PREFIX_PATH="${{ env.QTDIR }}/lib/cmake" -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 -Dqmlui=ON
- name: Build
shell: bash
run: |-
cd build
make -j${{ env.NPROC }}
- name: Install
shell: bash
run: |-
cd build
make install/fast
- name: Fix v4 dylib dependencies
shell: bash
if: ${{ matrix.task == 'build-v4' }}
run: |-
platforms/macos/fix_dylib_deps.sh ~/QLC+.app/Contents/Frameworks/libsndfile.1.dylib
platforms/macos/fix_dylib_deps.sh ~/QLC+.app/Contents/MacOS/qlcplus
platforms/macos/fix_dylib_deps.sh ~/QLC+.app/Contents/MacOS/qlcplus-fixtureeditor
${{ env.QTDIR }}/bin/macdeployqt ~/QLC+.app
- name: Fix v5 dylib dependencies
shell: bash
if: ${{ matrix.task == 'build-v5' }}
run: |-
platforms/macos/fix_dylib_deps.sh ~/QLC+.app/Contents/Frameworks/libsndfile.1.dylib
platforms/macos/fix_dylib_deps.sh ~/QLC+.app/Contents/MacOS/qlcplus-qml
${{ env.QTDIR }}/bin/macdeployqt ~/QLC+.app -qmldir=qmlui/qml
- name: Create DMG
# Use retry loop to work around a race condition on macOS causing
# 'Resource busy' errors with 'hdiutil'. See
# https://github.com/actions/runner-images/issues/7522
uses: nick-fields/retry@v3
with:
timeout_minutes: 30
max_attempts: 12
retry_wait_seconds: 1
command: |
OUTDIR=$PWD
cd platforms/macos/dmg
./create-dmg --volname "Q Light Controller Plus ${{env.APPVERSION}}" \
--volicon $OUTDIR/resources/icons/qlcplus.icns \
--background background.png \
--window-size 400 300 \
--window-pos 200 100 \
--icon-size 64 \
--icon "QLC+" 0 150 \
--app-drop-link 200 150 \
$OUTDIR/QLC+_${{ matrix.task }}.dmg \
~/QLC+.app
- name: Store DMG artifact
uses: actions/upload-artifact@v4
with:
name: QLC+-${{env.APPVERSION}}-${{env.BUILD_DATE}}-${{env.GIT_REV}}.dmg
path: QLC+_${{ matrix.task }}.dmg