Workflow variables #467
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Workflow tuningTrainer | |
name: tuningTrainer | |
on: | |
pull_request: | |
branches: [ ] | |
push: | |
branches: [ ] | |
create: | |
tags: ['v*'] # Push events to matching v*, i.e. v1.0, v20.15.10 | |
workflow_dispatch: | |
publish-www: | |
description: 'Publish on WWW' | |
required: false | |
type: boolean | |
publish-github: | |
description: 'Publish on GitHub' | |
required: false | |
type: boolean | |
env: | |
pkgname: tuningTrainer | |
IDENTITY_NAME: ${{ secrets.IDENTITY_NAME }} | |
jobs: | |
build: | |
strategy: | |
matrix: | |
include: | |
- { name: "windows", os: windows-latest, flags: "", shell: 'msys2 {0}', deps-prefix: "/opt/deps", aqt-os: "windows", aqt-arch: "win64_mingw", aqt-prefix: "/opt/Qt", aqt-subdir: "mingw_64", qt-version: '6.5.0', msystem: 'UCRT64' } | |
- { name: "windows-legacy", os: windows-latest, flags: "", shell: 'msys2 {0}', deps-prefix: "/opt/deps", aqt-os: "windows", aqt-arch: "win64_mingw81", aqt-prefix: "/opt/Qt", aqt-subdir: "mingw81_64", qt-version: '5.15.2', msystem: 'MINGW64' } | |
- { name: "linux", os: ubuntu-latest, flags: "", shell: 'bash', deps-prefix: "/home/runner/deps", aqt-os: "linux", aqt-arch: "gcc_64", aqt-prefix: "/home/runner/Qt", aqt-subdir: "gcc_64", qt-version: '6.5.0'} | |
- { name: "macos-universal", os: macos-11, flags: "-DCMAKE_OSX_ARCHITECTURES=\"x86_64;arm64\"", shell: 'bash', deps-prefix: "/Users/runner/deps", aqt-os: "mac", aqt-arch: "", aqt-prefix: "/Users/runner/Qt", aqt-subdir: "macos", qt-version: '6.5.0'} | |
- { name: "macos-legacy", os: macos-11, flags: "-DCMAKE_OSX_DEPLOYMENT_TARGET=\"10.12\"", shell: 'bash', deps-prefix: "/Users/runner/deps", aqt-os: "mac", aqt-arch: "", aqt-prefix: "/Users/runner/Qt", aqt-subdir: "clang_64", qt-version: '5.12.12' } | |
runs-on: ${{matrix.os}} | |
defaults: | |
run: | |
shell: ${{matrix.shell}} | |
steps: | |
- name: Install the Apple certificate and provisioning profile | |
if: ${{runner.os == 'macOS'}} | |
env: | |
P12_CERTIFICATE_BASE64: ${{ secrets.P12_CERTIFICATE_BASE64 }} | |
P12_PASSWORD: ${{ secrets.P12_PASSWORD }} | |
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} | |
run: | | |
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 | |
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db | |
echo -n "$P12_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH | |
security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH | |
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH | |
security default-keychain -s $KEYCHAIN_PATH | |
security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH | |
security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH -T /usr/bin/codesign -T /usr/bin/productsign | |
security list-keychain -d user -s $KEYCHAIN_PATH | |
security set-key-partition-list -S apple-tool:,apple: -s -k $KEYCHAIN_PASSWORD $KEYCHAIN_PATH | |
security find-identity | |
- if: ${{runner.os == 'Windows'}} | |
name: Install MinGW | |
uses: msys2/setup-msys2@v2 | |
with: | |
msystem: ${{ matrix.msystem }} | |
update: true | |
install: | | |
base base-devel p7zip zip git | |
- if: ${{runner.os == 'Windows'}} | |
name: Prepare MinGW | |
run: | | |
pacman -S --noconfirm \ | |
${MINGW_PACKAGE_PREFIX}-toolchain \ | |
${MINGW_PACKAGE_PREFIX}-python-pip \ | |
${MINGW_PACKAGE_PREFIX}-python-distutils-extra \ | |
${MINGW_PACKAGE_PREFIX}-python-psutil \ | |
${MINGW_PACKAGE_PREFIX}-cmake \ | |
${MINGW_PACKAGE_PREFIX}-nsis | |
- name: Setup windows env | |
if: ${{runner.os == 'Windows'}} | |
run: | | |
echo "::notify:: Upgrading pip" | |
python3 -m pip install -U pip | |
echo "SETUPTOOLS_USE_DISTUTILS=stdlib" >> $GITHUB_ENV | |
- name: Install Linux Dependencies | |
if: ${{runner.os == 'Linux'}} | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y cmake-extras libasound2-dev \ | |
libegl1-mesa-dev libfuse2 libpulse-dev | |
sudo apt-get install -y libunwind-dev \ | |
libgstreamer1.0-dev \ | |
libgstreamer-plugins-base1.0-0 \ | |
libgstreamer-plugins-base1.0-dev \ | |
gstreamer1.0-libav \ | |
gstreamer1.0-plugins-good \ | |
gstreamer1.0-plugins-bad | |
sudo apt-get install -y libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 \ | |
libxcb-cursor0 libxcb-cursor-dev \ | |
libxcb-keysyms1-dev libxcb-randr0 \ | |
libxcb-render-util0 libxcb-shape0 | |
- name: Install AQT | |
run: | | |
python3 -m pip install aqtinstall | |
- name: Install Qt | |
run: | | |
AQT_INSTALL="python3 -m aqt install-qt -O ${{matrix.aqt-prefix}} ${{matrix.aqt-os}} desktop ${{matrix.qt-version}} ${{matrix.aqt-arch}}" | |
MODULES=(qtmultimedia) | |
${AQT_INSTALL} | |
if [[ ${{matrix.qt-version}} == 6.* ]]; then | |
for i in ${MODULES[@]}; do | |
${AQT_INSTALL} -m $i | |
done | |
fi | |
- name: Install RtAudio | |
run: | | |
git clone https://github.com/thestk/rtaudio ../rtaudio | |
cmake -S ../rtaudio -B ../rtaudio/build ${{matrix.flags}} -DCMAKE_BUILD_TYPE=Release | |
cmake --build ../rtaudio/build | |
cmake --install ../rtaudio/build --prefix ${{matrix.deps-prefix}} | |
- name: Install STK | |
run: | | |
git clone https://github.com/thestk/stk ../stk | |
cmake -S ../stk -B ../stk/build -DCOMPILE_PROJECTS=0 ${{matrix.flags}} -DCMAKE_BUILD_TYPE=Release | |
cmake --build ../stk/build | |
cmake --install ../stk/build --prefix ${{matrix.deps-prefix}} | |
- name: Prepare FindCoreAudio | |
if: ${{runner.os == 'macOS'}} | |
run: | | |
[[ ! -x ${{matrix.deps-prefix}}/share/cmake ]] && mkdir ${{matrix.deps-prefix}}/share/cmake | |
cp -v ../stk/cmake/FindCoreAudio.cmake $(brew --prefix cmake)/share/cmake/Modules/ | |
- name: Checkout Repo | |
uses: actions/checkout@v3 | |
- name: Prepare Packages names | |
run: | | |
PACKAGE_NAME=${{env.pkgname}}-${{matrix.name}} | |
echo "PACKAGE_NAME=$PACKAGE_NAME" >> ${GITHUB_ENV} | |
- name: Prepare workdir (UNIX) | |
if: ${{runner.os != 'Windows'}} | |
run: | | |
export WORKDIR="${{github.workspace}}" | |
export AQTPATH="${{matrix.aqt-prefix}}" | |
export DEPSPATH="${{matrix.deps-prefix}}" | |
echo "WORKDIR=${WORKDIR}" >> $GITHUB_ENV | |
echo "AQTPATH=${AQTPATH}" >> $GITHUB_ENV | |
echo "DEPSPATH=${DEPSPATH}" >> $GITHUB_ENV | |
- name: Prepare workdir (MINGW) | |
if: ${{runner.os == 'Windows'}} | |
run: | | |
export WORKDIR="$(cygpath -m "${{github.workspace}}")" | |
export AQTPATH="$(cygpath -m "${{matrix.aqt-prefix}}")" | |
export DEPSPATH="$(cygpath -m "${{matrix.deps-prefix}}")" | |
echo "WORKDIR=${WORKDIR}" >> $GITHUB_ENV | |
echo "AQTPATH=${AQTPATH}" >> $GITHUB_ENV | |
echo "DEPSPATH=${DEPSPATH}" >> $GITHUB_ENV | |
- name: Prepare macOS temp disk | |
if: ${{runner.os == 'macOS'}} | |
run: | | |
export TEMP_DMGFILE=temp.dmg | |
hdiutil create -size 700m -fs HFS+ -volname "${PACKAGE_NAME}" "${TEMP_DMGFILE}" | |
hdiutil attach "${TEMP_DMGFILE}" | |
TEMP_DMGPOINT="/Volumes/${PACKAGE_NAME}" | |
echo "TEMP_DMGNAME=\"${TEMP_DMGNAME}\"" >> $GITHUB_ENV | |
echo "TEMP_DMGFILE=\"${TEMP_DMGFILE}\"" >> $GITHUB_ENV | |
echo "TEMP_DMGPOINT=\"${TEMP_DMGPOINT}\"" >> $GITHUB_ENV | |
- name: Setup install prefix | |
run: | | |
if [ ${{ runner.os }} == "Linux" ]; then | |
export INSTALL_PREFIX=${{env.WORKDIR}}/${{env.pkgname}}-appdir/usr | |
elif [ ${{ runner.os }} == "macOS" ]; then | |
export INSTALL_PREFIX="${{env.TEMP_DMGPOINT}}" | |
else | |
export INSTALL_PREFIX=${{env.WORKDIR}}/${{env.pkgname}}-appdir | |
fi | |
echo "INSTALL_PREFIX=$INSTALL_PREFIX" >> $GITHUB_ENV | |
- name: Run Configure | |
run: | | |
cmake -S "${{env.WORKDIR}}" \ | |
-B "${{env.WORKDIR}}/build" ${{matrix.flags}} \ | |
-DCMAKE_BUILD_TYPE=Release \ | |
-DCMAKE_INSTALL_PREFIX="${{env.INSTALL_PREFIX}}" \ | |
-DCMAKE_PREFIX_PATH="${{env.AQTPATH}}/${{matrix.qt-version}}/${{matrix.aqt-subdir}};${{env.DEPSPATH}}" | |
- name: Compile Code | |
run: cmake --build ${{env.WORKDIR}}/build | |
- name: Prepare appdir | |
run: | | |
if [ ${{ runner.os }} == "Windows" ]; then export SUFFIX="${{env.pkgname}}" | |
elif [ ${{ runner.os }} == "macOS" ]; then export SUFFIX="${{env.pkgname}}.app" | |
else export SUFFIX="" | |
fi | |
export APPDIR="${{env.INSTALL_PREFIX}}/${SUFFIX}" | |
echo "APPDIR=${APPDIR}" >> $GITHUB_ENV | |
- name: Install | |
run: | | |
cmake --install ${{env.WORKDIR}}/build --prefix "${{ env.INSTALL_PREFIX }}" | |
- name: Create MacOS Package | |
if: ${{runner.os == 'macOS'}} | |
run: | | |
DESTINATION_DIR=${PACKAGE_NAME} | |
DIST_DMG=${PACKAGE_NAME}.dmg | |
mkdir ${DESTINATION_DIR} || echo "::warning:: ${DESTINATION_DIR} already exists" | |
${{matrix.aqt-prefix}}/${{matrix.qt-version}}/${{matrix.aqt-subdir}}/bin/macdeployqt \ | |
"${{env.APPDIR}}" | |
find ${{env.DEPSPATH}} -name "*.dylib" -exec cp {} "${{env.APPDIR}}"/Contents/Frameworks \; | |
codesign --verbose --strict --continue --timestamp --force --deep -s ${IDENTITY_NAME} "${{env.APPDIR}}" | |
ln -s /Applications/ "${{ env.TEMP_DMGPOINT }}"/Applications | |
hdiutil detach "${{ env.TEMP_DMGPOINT }}" | |
hdiutil convert "${{ env.TEMP_DMGFILE }}" -format UDBZ \ | |
-o ${DESTINATION_DIR}/${DIST_DMG} | |
shasum -a 256 ${DESTINATION_DIR}/${DIST_DMG} | |
- name: Create Windows Package | |
if: ${{runner.os == 'Windows'}} | |
run: | | |
export ARTIFACT_DIR=${{env.WORKDIR}}/${PACKAGE_NAME} | |
cp -v ${{env.DEPSPATH}}/bin/*.dll ${{env.APPDIR}}/ | |
${{matrix.aqt-prefix}}/${{matrix.qt-version}}/${{matrix.aqt-subdir}}/bin/windeployqt.exe ${{env.APPDIR}}/ | |
mkdir $ARTIFACT_DIR || echo "::warning::${ARTIFACT_DIR} already exists" | |
cd $ARTIFACT_DIR | |
cpack --config ${{env.WORKDIR}}/build/CPackConfig.cmake -G NSIS -V | |
mv ${{env.pkgname}}*.exe ${PACKAGE_NAME}-Installer.exe | |
cpack --config ${{env.WORKDIR}}/build/CPackConfig.cmake -G 7Z | |
mv ${{env.pkgname}}*.7z ${PACKAGE_NAME}-Portable.7z | |
rm -Rf _CPack_Packages/ | |
- name: Create AppImage | |
if: ${{runner.os == 'Linux'}} | |
run: | | |
sudo bash -c "echo ${{matrix.aqt-prefix}}/${{matrix.qt-version}}/${{matrix.aqt-subdir}}/lib > /etc/ld.so.conf.d/aqt.conf" | |
sudo bash -c "echo ${{matrix.deps-prefix}}/lib > /etc/ld.so.conf.d/deps.conf" | |
sudo rm /etc/ld.so.cache | |
sudo ldconfig | |
echo "::group:: Downloading linux deploy" | |
wget -q https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage | |
wget -q https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage | |
wget -q https://github.com/linuxdeploy/linuxdeploy-plugin-appimage/releases/download/continuous/linuxdeploy-plugin-appimage-x86_64.AppImage | |
echo "::endgroup::" | |
LINUXDEPLOY=linuxdeploy-x86_64.AppImage | |
chmod +x *.AppImage | |
APPDIR=${{env.pkgname}}.AppDir | |
ICONFILE=$(find ${{ env.APPDIR }} -name *.png) | |
DESKTOPFILE=$(find ${{env.APPDIR}} -name *.desktop) | |
EXECFILE=$(find ${{env.APPDIR}} -name ${{env.pkgname}} -type f -executable) | |
export QTDIR=${{matrix.aqt-prefix}}/${{matrix.qt-version}}/${{matrix.aqt-subdir}} | |
export QMAKE=${QTDIR}/bin/qmake | |
export QT_INSTALL_PLUGINS=${QTDIR}/plugins/ | |
export EXTRA_QT_PLUGINS="multimediagsttools" | |
echo "::group:: Linux deploy QT" | |
./${LINUXDEPLOY} \ | |
--appdir=${APPDIR} \ | |
--executable=${EXECFILE} \ | |
--icon-file=${ICONFILE} \ | |
--desktop-file=${DESKTOPFILE} \ | |
--plugin qt | |
cp -Rv $QT_INSTALL_PLUGINS/multimedia ${APPDIR}/usr/plugins/ | |
cp -Rv $QT_INSTALL_PLUGINS/generic ${APPDIR}/usr/plugins/ | |
echo "::endgroup::" | |
echo "::group:: Creating AppImage" | |
./${LINUXDEPLOY} --appdir=${APPDIR} --output=appimage | |
mv ${{env.pkgname}}*.AppImage ${PACKAGE_NAME}.AppImage | |
export APPIMAGEDIR=${{github.workspace}}/${PACKAGE_NAME} | |
mkdir $APPIMAGEDIR || echo "::warning::${APPIMAGEDIR} already exists" | |
cp ${PACKAGE_NAME}.AppImage ${PACKAGE_NAME} | |
echo "::endgroup::" | |
- name: Upload All Binaries | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{env.pkgname}}-${{matrix.name}} | |
path: ${{github.workspace}}/${{env.pkgname}}-${{matrix.name}} | |
publish: | |
needs: build | |
if: github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')) | |
runs-on: ubuntu-latest | |
steps: | |
- name: Get Build Tag | |
id: get_tag | |
run: | | |
DATE=$(date +'%Y%m%d-%H%M') | |
BUILD_TAG="${{env.pkgname}}-snapshot-${DATE}" | |
echo "BUILD_TAG=${BUILD_TAG}" >> $GITHUB_OUTPUT | |
echo DATE=$DATE >> $GITHUB_ENV | |
- name: Get macOS universal binary | |
uses: actions/download-artifact@v3 | |
with: | |
name: ${{env.pkgname}}-macos-universal | |
path: ${{github.workspace}}/${{env.pkgname}}-macos-universal | |
- name: Get macOS legacy binary | |
uses: actions/download-artifact@v3 | |
with: | |
name: ${{env.pkgname}}-macos-legacy | |
path: ${{github.workspace}}/${{env.pkgname}}-macos-legacy | |
- name: Get Linux binary | |
uses: actions/download-artifact@v3 | |
with: | |
name: ${{env.pkgname}}-linux | |
path: ${{github.workspace}}/${{env.pkgname}}-linux | |
- name: Get Windows binary | |
uses: actions/download-artifact@v3 | |
with: | |
name: ${{env.pkgname}}-windows | |
path: ${{github.workspace}}/${{env.pkgname}}-windows | |
- name: Get Windows legacy binary | |
uses: actions/download-artifact@v3 | |
with: | |
name: ${{env.pkgname}}-windows-legacy | |
path: ${{github.workspace}}/${{env.pkgname}}-windows-legacy | |
- if: github.event_name == 'push' # this is a snapshot build. create a release and upload binaries | |
name: Create Snapshot Release | |
uses: softprops/action-gh-release@v1 | |
with: | |
name: ${{ steps.get_tag.outputs.BUILD_TAG }} | |
tag_name: ${{ steps.get_tag.outputs.BUILD_TAG }} | |
generate_release_notes: true | |
prerelease: true | |
files: | | |
${{github.workspace}}/${{env.pkgname}}-macos-universal/* | |
${{github.workspace}}/${{env.pkgname}}-macos-legacy/* | |
${{github.workspace}}/${{env.pkgname}}-linux/* | |
${{github.workspace}}/${{env.pkgname}}-windows/* | |
${{github.workspace}}/${{env.pkgname}}-windows-legacy/* | |
- if: github.event_name == 'create' && startsWith(github.ref, 'refs/tags/v') # this is a versioned build. check if release already exists | |
name: Find Existing Release | |
id: find_release | |
uses: cardinalby/git-get-release-action@v1 | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
with: | |
doNotFailIfNotFound: true | |
tag: ${{ github.ref_name }} | |
- if: github.event_name == 'create' && startsWith(github.ref, 'refs/tags/v') && steps.find_release.outputs.id != 0 # release exists - upload macOS binary | |
name: Update Tagged Release (macOS universal) | |
uses: actions/[email protected] | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
with: | |
upload_url: ${{ steps.find_release.outputs.upload_url }} | |
asset_path: ${{github.workspace}}/${{env.pkgname}}-macos-universal | |
asset_name: ${{env.pkgname}}-macos-universal | |
asset_content_type: application/octet-stream | |
- if: github.event_name == 'create' && startsWith(github.ref, 'refs/tags/v') && steps.find_release.outputs.id != 0 # release exists - upload macOS binary | |
name: Update Tagged Release (macOS legacy) | |
uses: actions/[email protected] | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
with: | |
upload_url: ${{ steps.find_release.outputs.upload_url }} | |
asset_path: ${{github.workspace}}/${{env.pkgname}}-macos-legacy | |
asset_name: ${{env.pkgname}}-macos-legacy | |
asset_content_type: application/octet-stream | |
- if: github.event_name == 'create' && startsWith(github.ref, 'refs/tags/v') && steps.find_release.outputs.id != 0 # release exists - upload Linux binary | |
name: Update Tagged Release (Linux) | |
uses: actions/[email protected] | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
with: | |
upload_url: ${{ steps.find_release.outputs.upload_url }} | |
asset_path: ${{github.workspace}}/${{env.pkgname}}-linux | |
asset_name: ${{env.pkgname}}-linux-x86_64 | |
asset_content_type: application/octet-stream | |
- if: github.event_name == 'create' && startsWith(github.ref, 'refs/tags/v') && steps.find_release.outputs.id != 0 # release exists - upload Windows binary | |
name: Update Tagged Release (Windows) | |
uses: actions/[email protected] | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
with: | |
upload_url: ${{ steps.find_release.outputs.upload_url }} | |
asset_path: ${{github.workspace}}/${{env.pkgname}}-windows | |
asset_name: ${{env.pkgname}}-win-x86_64 | |
asset_content_type: application/octet-stream | |
- if: github.event_name == 'create' && startsWith(github.ref, 'refs/tags/v') && steps.find_release.outputs.id != 0 # release exists - upload Windows binary | |
name: Update Tagged Release (Windows legacy) | |
uses: actions/[email protected] | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
with: | |
upload_url: ${{ steps.find_release.outputs.upload_url }} | |
asset_path: ${{github.workspace}}/${{env.pkgname}}-windows-legacy | |
asset_name: ${{env.pkgname}}-win7-x86_64 | |
asset_content_type: application/octet-stream | |
- if: github.event_name == 'create' && startsWith(github.ref, 'refs/tags/v') && steps.find_release.outputs.id == 0 # otherwise release does not exist, create one and upload binaries | |
name: Create Tagged Release | |
uses: softprops/action-gh-release@v1 | |
with: | |
name: ${{ github.ref_name }} | |
tag_name: ${{ github.ref_name }} | |
generate_release_notes: true | |
prerelease: false | |
files: | | |
${{github.workspace}}/${{env.pkgname}}-macos-universal* | |
${{github.workspace}}/${{env.pkgname}}-macos-legacy* | |
${{github.workspace}}/${{env.pkgname}}-windows* | |
${{github.workspace}}/${{env.pkgname}}-windows-legacy* | |
${{github.workspace}}/${{env.pkgname}}-linux* |