Skip to content

gui: forgot what I did #52

gui: forgot what I did

gui: forgot what I did #52

name: Build Development
on:
push:
branches:
- development
paths:
- "src/**"
- "pkg/**"
- "externals/**"
- "CMakeLists.txt"
- "CMakePresets.json"
- "VERSION.md"
workflow_dispatch:
inputs:
preset:
description: "Build preset"
required: true
default: "Debug"
type: choice
options:
- Debug
- Release
- RelWithDebInfo
defaults:
run:
shell: bash
#===========================================================================================
# Environment Variables
env:
PROJECT_NAME: Disflux
BUNDLE_NAME: disflux
BUNDLE_ID: com.dimethoxy.disflux
BUILD_DIR: build
DISPLAY: :0 # Linux pluginval needs this
HOMEBREW_NO_INSTALL_CLEANUP: 1
IPP_DIR: C:\Program Files (x86)\Intel\oneAPI\ipp\latest\lib\cmake\ipp
PRESET: ${{ inputs.preset || 'RelWithDebInfo' }}
#===========================================================================================
# Build Jobs
#===========================================================================================
jobs:
#=========================================================================================
# Windows Build
#=========================================================================================
build-windows:
runs-on: windows-latest
steps:
- name: Export Variables
run: |
echo "BUILD_ARTIFACTS_DIR=$BUILD_DIR/src/${{env.PROJECT_NAME}}Plugin_artefacts/${{env.PRESET}}" >> $GITHUB_ENV
echo "WINDOWS-PACKAGE=${{env.BUNDLE_NAME}}-windows.exe" >> $GITHUB_ENV
- name: Checkout Code
uses: actions/checkout@v4
- name: Read Version
run: |
echo "VERSION=$(tr -d '[:space:]' < VERSION.md)" >> $GITHUB_ENV
- name: Setup MSVC
uses: TheMrMilchmann/setup-msvc-dev@v3
with:
arch: x64
spectre: true
- name: Set Up Windows
run: |
choco install ninja
- name: Cache IPP (Windows)
id: cache-ipp
uses: actions/cache@v4
with:
key: ipp-2026-0-0-193
path: C:\Program Files (x86)\Intel
- name: Install IPP (Windows)
if: steps.cache-ipp.outputs.cache-hit != 'true'
run: |
curl --output intel-oneapi-toolkit-2026.0.0.193_offline.exe https://registrationcenter-download.intel.com/akdlm/IRC_NAS/bae85ab1-cfcd-4251-8d42-a0c27949ea33/intel-oneapi-toolkit-2026.0.0.193_offline.exe
./intel-oneapi-toolkit-2026.0.0.193_offline.exe -s -a --silent --eula accept -p=NEED_VS2022_INTEGRATION=1
- name: Save IPP cache
if: steps.cache-ipp.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: C:\Program Files (x86)\Intel
key: ipp-2026-0-0-193
- name: Select CMake Preset
run: |
cmake --preset "Windows ${{env.PRESET}}"
- name: Build
run: cmake --build build --config "${{env.PRESET}}"
- name: Copy Build Artifacts
run: |
mkdir -p artifacts
mkdir -p artifacts/vst3
ls -la ${{env.BUILD_ARTIFACTS_DIR}}/VST3
cp -r ${{env.BUILD_ARTIFACTS_DIR}}/VST3/${{env.PROJECT_NAME}}.vst3 \
artifacts/vst3/
cp -r ${{env.BUILD_ARTIFACTS_DIR}}/VST3/${{env.PROJECT_NAME}}.pdb \
artifacts/vst3/
mkdir -p artifacts/clap
ls -la ${{env.BUILD_ARTIFACTS_DIR}}/CLAP
cp -r ${{env.BUILD_ARTIFACTS_DIR}}/CLAP/${{env.PROJECT_NAME}}.clap \
artifacts/clap/
cp -r ${{env.BUILD_ARTIFACTS_DIR}}/CLAP/${{env.PROJECT_NAME}}.pdb \
artifacts/clap/
shell: bash
- name: Create Installer
run: |
# Create the packaging directory
mkdir -p packaging
# Create the Inno Setup
envsubst < pkg/windows/Setup.iss > packaging/Setup.iss
iscc packaging/Setup.iss
# Move the installer to the artifacts directory
mv packaging/Output/"${{env.PROJECT_NAME}}_Setup.exe" artifacts/${{env.WINDOWS-PACKAGE}}
shell: bash
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: artifacts-windows
path: artifacts
#=========================================================================================
# macOS Build
#=========================================================================================
build-macos:
runs-on: macos-latest
steps:
- name: Export Variables
run: |
echo "BUILD_ARTIFACTS_DIR=$BUILD_DIR/src/${{env.PROJECT_NAME}}Plugin_artefacts/${{env.PRESET}}" >> $GITHUB_ENV
echo "MAC_PACKAGE=${{env.BUNDLE_NAME}}-macos.pkg" >> $GITHUB_ENV
- name: Checkout Code
uses: actions/checkout@v4
- name: Read Version
run: |
echo "VERSION=$(tr -d '[:space:]' < VERSION.md)" >> $GITHUB_ENV
- name: Set Up Mac
run: brew install ninja osxutils
- name: Select CMake Preset
run: |
cmake --preset "Mac ${{env.PRESET}}" \
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64"
- name: Build
run: cmake --build build --config "${{env.PRESET}}"
- name: Copy Build Artifacts
run: |
mkdir -p artifacts
cp -r ${{env.BUILD_ARTIFACTS_DIR}}/VST3/${{env.PROJECT_NAME}}.vst3 \
artifacts/
cp -r ${{env.BUILD_ARTIFACTS_DIR}}/CLAP/${{env.PROJECT_NAME}}.clap \
artifacts/
cp -r ${{env.BUILD_ARTIFACTS_DIR}}/AU/${{env.PROJECT_NAME}}.component \
artifacts/
shell: bash
- name: Import Certificates
uses: sudara/basic-macos-keychain-action@v1
id: keychain
with:
dev-id-app-cert: ${{ secrets.DEV_ID_APP_CERT }}
dev-id-app-password: ${{ secrets.DEV_ID_PASSWORD }}
dev-id-installer-cert: ${{ secrets.DEV_ID_INSTALL_CERT }}
dev-id-installer-password: ${{ secrets.DEV_ID_PASSWORD }}
- name: Codesign (macOS)
run: |
# Set variables
VST3_BIN="artifacts/${{env.PROJECT_NAME}}.vst3/Contents/MacOS/${{env.PROJECT_NAME}}"
CLAP_BIN="artifacts/${{env.PROJECT_NAME}}.clap/Contents/MacOS/${{env.PROJECT_NAME}}"
AU_BIN="artifacts/${{env.PROJECT_NAME}}.component/Contents/MacOS/${{env.PROJECT_NAME}}"
# Codesign the binaries
codesign \
--force -s "${{secrets.DEVELOPER_ID_APPLICATION}}" \
-v "$VST3_BIN" \
--deep --strict --options=runtime --timestamp
codesign \
--force -s "${{secrets.DEVELOPER_ID_APPLICATION}}" \
-v "$CLAP_BIN" \
--deep --strict --options=runtime --timestamp
codesign \
--force -s "${{secrets.DEVELOPER_ID_APPLICATION}}" \
-v "$AU_BIN" \
--deep --strict --options=runtime --timestamp
shell: bash
- name: Create Installer
run: |
# Set variables
VST3_PATH="artifacts/${{env.PROJECT_NAME}}.vst3"
CLAP_PATH="artifacts/${{env.PROJECT_NAME}}.clap"
AU_PATH="artifacts/${{env.PROJECT_NAME}}.component"
PACKAGE_NAME="${{env.PROJECT_NAME}}-macos.pkg"
# Create the packaging directory
mkdir -p packaging
# Create the distribution file
envsubst < pkg/mac/distribution.xml > packaging/distribution.xml
# Create the VST subpackage
pkgbuild \
--identifier "${{env.BUNDLE_ID}}.vst3.pkg" \
--version "$VERSION" \
--component "$VST3_PATH" \
--install-location "/Library/Audio/Plug-Ins/VST3" \
"packaging/${{env.PROJECT_NAME}}.vst3.pkg"
# Create the CLAP subpackage
pkgbuild \
--identifier "${{env.BUNDLE_ID}}.clap.pkg" \
--version "$VERSION" \
--component "$CLAP_PATH" \
--install-location "/Library/Audio/Plug-Ins/CLAP" \
"packaging/${{env.PROJECT_NAME}}.clap.pkg"
# Create the AU subpackage
pkgbuild \
--identifier "${{env.BUNDLE_ID}}.au.pkg" \
--version "$VERSION" \
--component "$AU_PATH" \
--install-location "/Library/Audio/Plug-Ins/Components" \
"packaging/${{env.PROJECT_NAME}}.au.pkg"
# Create the main package
cd packaging
productbuild \
--resources ./resources \
--distribution distribution.xml \
--sign "${{secrets.DEVELOPER_ID_INSTALLER}}" \
--timestamp "${{env.PROJECT_NAME}}.pkg"
# Notarize the package
xcrun notarytool submit "${{env.PROJECT_NAME}}.pkg" \
--apple-id ${{secrets.NOTARIZATION_USERNAME}} \
--password ${{secrets.NOTARIZATION_PASSWORD}} \
--team-id ${{secrets.TEAM_ID}} \
--wait
# Staple the package
xcrun stapler staple "${{env.PROJECT_NAME}}.pkg"
# Move the package to the artifacts directory
mv ${{env.PROJECT_NAME}}.pkg ../artifacts/${{env.MAC_PACKAGE}}
shell: bash
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: artifacts-macos
path: artifacts
#=========================================================================================
# Ubuntu Linux Build
#=========================================================================================
build-ubuntu:
runs-on: ubuntu-latest
steps:
- name: Export Variables
run: |
echo "BUILD_ARTIFACTS_DIR=$BUILD_DIR/src/${{env.PROJECT_NAME}}Plugin_artefacts/${{env.PRESET}}" >> $GITHUB_ENV
echo "UBUNTU_PACKAGE=${{env.BUNDLE_NAME}}-linux-ubuntu.deb" >> $GITHUB_ENV
echo "LINUX_PACKAGE=${{env.BUNDLE_NAME}}-linux-vanilla.zip" >> $GITHUB_ENV
- name: Checkout Code
uses: actions/checkout@v4
- name: Read Version
run: |
echo "VERSION=$(tr -d '[:space:]' < VERSION.md)" >> $GITHUB_ENV
- name: Set Up Linux
run: |
sudo apt-get update
sudo apt-get install ninja-build
sudo apt install libasound2-dev \
libjack-jackd2-dev \
ladspa-sdk \
libcurl4-openssl-dev \
libfreetype-dev \
libfontconfig1-dev \
libx11-dev \
libxcomposite-dev \
libxcursor-dev \
libxext-dev \
libxinerama-dev \
libxrandr-dev \
libxrender-dev \
libwebkit2gtk-4.1-dev \
libglu1-mesa-dev mesa-common-dev
sudo apt install curl
sudo apt-get install -y dpkg-dev devscripts
sudo /usr/bin/Xvfb $DISPLAY &
shell: bash
- name: Select CMake Preset
run: |
cmake --preset "Linux ${{env.PRESET}}"
- name: Build
run: cmake --build build --config "${{env.PRESET}}"
- name: Copy Artifacts
run: |
mkdir -p artifacts
cp -r ${{env.BUILD_ARTIFACTS_DIR}}/VST3/${{env.PROJECT_NAME}}.vst3 \
artifacts/
cp -r ${{env.BUILD_ARTIFACTS_DIR}}/CLAP/${{env.PROJECT_NAME}}.clap \
artifacts/
cp -r ${{env.BUILD_ARTIFACTS_DIR}}/LV2/${{env.PROJECT_NAME}}.lv2 \
artifacts/
shell: bash
- name: Package Linux Artifacts
run: |
# Set variables
UBUNTU_PACKAGE_DIR="${{env.BUNDLE_NAME}}-linux-ubuntu"
UBUNTU_CONTROL_FILE="pkg/ubuntu/control"
VST3_INSTALL_DIR="/usr/lib/vst3/${{env.PROJECT_NAME}}"
CLAP_INSTALL_DIR="/usr/lib/clap/${{env.PROJECT_NAME}}"
LV2_INSTALL_DIR="/usr/lib/lv2/${{env.PROJECT_NAME}}"
# Create Vanilla package directory
mkdir -p vanilla
cp -r artifacts/${{env.PROJECT_NAME}}.vst3 vanilla/
cp -r artifacts/${{env.PROJECT_NAME}}.clap vanilla/
cp -r artifacts/${{env.PROJECT_NAME}}.lv2 vanilla/
# Zip and move the package to the artifacts directory
zip -r ${{env.LINUX_PACKAGE}} vanilla/*
mv ${{env.LINUX_PACKAGE}} artifacts/$LINUX_PACKAGE
# Create Debian package directory
mkdir -p $UBUNTU_PACKAGE_DIR/DEBIAN
mkdir -p $UBUNTU_PACKAGE_DIR/$VST3_INSTALL_DIR
mkdir -p $UBUNTU_PACKAGE_DIR/$CLAP_INSTALL_DIR
mkdir -p $UBUNTU_PACKAGE_DIR/$LV2_INSTALL_DIR
# Copy files to Debian package directory
cp -r artifacts/${{env.PROJECT_NAME}}.vst3 \
$UBUNTU_PACKAGE_DIR/$VST3_INSTALL_DIR/
cp -r artifacts/${{env.PROJECT_NAME}}.clap \
$UBUNTU_PACKAGE_DIR/$CLAP_INSTALL_DIR/
cp -r artifacts/${{env.PROJECT_NAME}}.lv2 \
$UBUNTU_PACKAGE_DIR/$LV2_INSTALL_DIR/
# Set PACKAGE_NAME for envsubst
export PACKAGE_NAME=${{env.BUNDLE_NAME}}
export PACKAGE_VERSION=$VERSION
# Replace PACKAGE_NAME in control file and copy to Debian package directory
envsubst < $UBUNTU_CONTROL_FILE > $UBUNTU_PACKAGE_DIR/DEBIAN/control
# Build Debian package
dpkg-deb --build $UBUNTU_PACKAGE_DIR
# Move the package to the artifacts directory
cp -r *.deb artifacts/${{env.UBUNTU_PACKAGE}}
shell: bash
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: artifacts-ubuntu
path: artifacts