Skip to content

Commit 092f186

Browse files
drowaudiosudara
andauthored
pluginval 1.0.0 (#72)
* Updated JUCE and fixed some warnings * Removed some old files * Started refactoring to remove the ConnectedChildProcess and fixed VST3 threading constraints * Changed ChildProcessValidator to use a thread to unblock the UI * Added implicit support for the --validate option. I.e. it's no longer required if the path is the last CLI arg * Ensured callbacks happed from the message thread * Refactored and renamed some validation classes * More internal refactoring * Fixed missing output when using child process validation * GitHub Actions update (#64) * Update to latest GA images and actions/checkout * Bypass install scripts in favor of CMake * Correct typo in CMake build * Use ccache action v1.2 and include Windows * Remove VS 2022 workaround now that JUCE is updated * Run pluginval tests on GitHub Actions * Codesign with DEVELOPER_ID_APPLICATION secret * Update install and VST2 README sections * Update installation and VST2 README for CMake * Add VERSION file, expose to app and GitHub Actions * Quote the DEVELOPER_ID_APPLICATION secret string * Run checkout before setting up the ENV * Checkout on Release to put CHANGELIST in the release body * Fixed some logic parsing command line options * Changes MacOS strings to macOS * Added a workflow_dispatch CI trigger * Added running auval as a test for Audio Units on macOS (levels 5 and up) * Added a missing include on Linux * Added running VST3's validator as a test for VST3s (levels 5 and up) * Codesign the macOS .app, not the binary (#65) Co-authored-by: Sudara <[email protected]> * Code sign fix and Notarization timeout increase (#66) * Codesign the macOS .app, not the binary * Use sudara's xcode-notarize fork to increase timeouts * matrix.binary on macOS should be the .app bundle * Expose access to the test binary as well as the app to package * Use "main" branch of sudara's xcode-notarize fork Co-authored-by: drowaudio <[email protected]> * Add VST2 sdk building back to GitHub Actions (#67) * Fix GitHub Actions badge links [skip ci] (#68) * Use notarytool for notarization (#69) * Use notarytool directly. Zip first, as notarytool requires .zip or .pkg * Create a zip to upload. Staple the .app. Use 7z for zip creation. * Updated docs and removed unused files * Fixed GUI showing incorrectly when no --validate option is specified * Added a new line after the validation started message * Fixed incorrect merging of vst3validator env var * Added some more info to auval test failures * Output the auval log if auval fails * Build and Validate JUCE example plugins (#70) * Build juce example plugins and validate VST3 * Just build the DSPModulePluginDemo for now. Correct the build dir. * Use --validate until GUI doesn't open * Run Xvfb on linux. Cache the plugin binaries. * Fix windows cache with absolute path. Validate components on macOS. * single quote the vst path to make windows happy * Fixed GUI showing incorrectly when no --validate option is specified * COPY_PLUGIN_AFTER_BUILD for plugin examples so they are signed and openable * Just build DSPModulePluginDemo_ALL and MultiOutSynthPlugin_ALL * Build plugins in Release so macOS is happier to validate * Validate vst on all platforms, codesign au before validating * Copy AU plugins to ~/Library/Audio * mkdir -p ~/Library/Audio/Plug-Ins/Components * Do we need to sleep? * continue on error for now * Added a new line after the validation started message * Fixed incorrect merging of vst3validator env var * Added some more info to auval test failures * Output the auval log if auval fails * Build Windows in Release (specified at build time, not config) * Remove auval testing stuff * Clarify comment [skip ci] * Don't validate with --verbose on macOS Co-authored-by: David Rowland <[email protected]> * Fixed exit code on Windows when validating a vst3 file that doesn't exist * Updated JUCE * Worked around some assertions for VST3 conformance below level 6 * v1.0.0 Co-authored-by: Sudara <[email protected]>
1 parent 149588a commit 092f186

31 files changed

+1239
-2060
lines changed

.github/workflows/build.yaml

Lines changed: 137 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,110 +1,188 @@
11
name: Build
2-
on: [push]
2+
on:
3+
push:
4+
workflow_dispatch:
5+
6+
env:
7+
BINARY_NAME: pluginval
8+
BUILD_TYPE: Release
9+
BUILD_DIR: Builds
10+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
11+
DISPLAY: :0 # Running pluginval GUI on linux needs this
312

413
jobs:
514
build:
15+
name: Pluginval Build
616
strategy:
717
fail-fast: false
818
matrix:
919
include:
1020
- name: Linux
11-
os: ubuntu-16.04
12-
platform: linux
21+
os: ubuntu-22.04
22+
app: pluginval
23+
test-binary: ./pluginval
1324
- name: macOS
14-
os: macos-latest
15-
platform: mac
25+
os: macos-12
26+
app: pluginval.app
27+
test-binary: pluginval.app/Contents/MacOS/pluginval
1628
- name: Windows
17-
os: windows-2016
18-
platform: windows
19-
# cfg:
20-
# - { name: Linux, os: ubuntu-16.04, platform: linux }
21-
# - { name: macOS, os: macos-latest, platform: mac }
22-
# - { name: Windows, os: windows-latest, platform: windows }
29+
os: windows-latest
30+
app: pluginval.exe
31+
test-binary: ./pluginval.exe
2332
runs-on: ${{ matrix.os }}
2433
steps:
25-
# Install dependencies
26-
- name: Install dependencies
27-
if: ${{ matrix.platform == 'linux' }}
28-
run: |
29-
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
30-
sudo apt-get update
31-
sudo apt-get install -y gcc-6 g++-6 freeglut3-dev g++ libasound2-dev libcurl4-openssl-dev libfreetype6-dev libjack-jackd2-dev libx11-dev libxcomposite-dev libxcursor-dev libxinerama-dev libxrandr-dev mesa-common-dev ladspa-sdk webkit2gtk-4.0 libgtk-3-dev xvfb
32-
33-
- uses: actions/checkout@v2
34+
- uses: actions/checkout@v3
3435
with:
3536
submodules: true
3637

37-
# Import certificates
38-
- uses: apple-actions/import-codesign-certs@v1
39-
if: ${{ matrix.platform == 'mac' }}
38+
- name: Setup Environment Variables
39+
shell: bash
40+
run: |
41+
VERSION=$(cat VERSION)
42+
echo "VERSION=$VERSION" >> $GITHUB_ENV
43+
echo "APP_DIR=${{ env.BUILD_DIR }}/${{ env.BINARY_NAME }}_artefacts/${{ env.BUILD_TYPE }}" >> $GITHUB_ENV
44+
echo "ZIP_FILE_NAME=${{ env.BINARY_NAME }}-${{ matrix.name }}.zip" >> $GITHUB_ENV
45+
echo "JUCE_SHA1=$(git rev-parse HEAD:modules/juce)" >> $GITHUB_ENV
46+
echo "PLUGIN_BUILD_DIR=modules/juce/Builds" >> $GITHUB_ENV
47+
48+
# This needs to be absolute to make action/cache happy
49+
echo "PLUGIN_CACHE_PATH=${{ github.workspace }}/modules/juce/Builds/examples/Plugins" >> $GITHUB_ENV
50+
51+
- name: Install dependencies (Linux)
52+
if: ${{ matrix.name == 'Linux' }}
53+
run: |
54+
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
55+
sudo apt-get update
56+
sudo apt-get install -y freeglut3-dev g++ libasound2-dev libcurl4-openssl-dev libfreetype6-dev libjack-jackd2-dev libx11-dev libxcomposite-dev libxcursor-dev libxinerama-dev libxrandr-dev mesa-common-dev ladspa-sdk webkit2gtk-4.0 libgtk-3-dev xvfb
57+
sudo /usr/bin/Xvfb $DISPLAY &
58+
59+
- name: Make VST2 SDK available
60+
shell: bash
61+
run: |
62+
curl -O ${{ secrets.VST2_SDK_URL }}
63+
7z x vstsdk2.4.zip
64+
echo "VST2_SDK_DIR=${{ github.workspace }}/vstsdk2.4" >> $GITHUB_ENV
65+
66+
- name: Import Certificates
67+
uses: apple-actions/import-codesign-certs@v1
68+
if: ${{ matrix.name == 'macOS' }}
4069
with:
4170
p12-file-base64: ${{ secrets.DEV_CERT_APP }}
4271
p12-password: ${{ secrets.CERT_PASSWORD }}
43-
env:
44-
CERT_PASSWORD: ${{ secrets.CERT_PASSWORD }}
45-
DEV_CERT_APP: ${{ secrets.DEV_CERT_APP }}
4672

47-
# Build products
48-
- name: "Build products"
73+
- name: ccache
74+
uses: hendrikmuhs/[email protected]
75+
with:
76+
key: v2-${{ matrix.name }}-${{ env.BUILD_TYPE }}
77+
78+
- name: Configure
79+
shell: bash
80+
run: cmake -B ${{ env.BUILD_DIR }} -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE}} -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache .
81+
82+
- name: Build
83+
shell: bash
84+
run: cmake --build ${{ env.BUILD_DIR }} --config ${{ env.BUILD_TYPE }} --parallel 4
85+
86+
- name: Run Pluginval Tests
87+
working-directory: ${{ env.APP_DIR }}
88+
shell: bash
4989
run: |
50-
export MSBUILD_EXE="C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe"
51-
export SIGN_ID=${DEV_ID_APP}
52-
./install/build
90+
pwd
91+
ls -ahl
92+
${{ matrix.test-binary }} --run-tests
93+
94+
- name: Cache JUCE example plugin binaries
95+
id: cache-plugins
96+
uses: actions/cache@v3
97+
with:
98+
path: ${{ env.PLUGIN_CACHE_PATH }}
99+
# Increment the version in the key below to manually break plugin cache
100+
key: v6-${{ runner.os }}-${{ env.JUCE_SHA1 }}
53101

54-
if [[ "$OSTYPE" == "darwin"* ]]; then
55-
./install/notarise ${{ github.workspace }}/bin/mac/pluginval_macOS.zip com.tracktion.pluginval ${AC_USERNAME} ${AC_PASSWORD}
56-
fi
102+
- name: Build JUCE example plugins
103+
if: steps.cache-plugins.outputs.cache-hit != 'true'
104+
working-directory: modules/juce
57105
shell: bash
58-
env:
59-
VST2_SDK_URL: ${{ secrets.VST2_SDK_URL }}
60-
CERT_PASSWORD: ${{ secrets.CERT_PASSWORD }}
61-
DEV_CERT_APP: ${{ secrets.DEV_CERT_APP }}
62-
DEV_ID_APP: ${{ secrets.DEV_ID_APP }}
63-
AC_USERNAME: ${{ secrets.AC_USERNAME }}
64-
AC_PASSWORD: ${{ secrets.AC_PASSWORD }}
106+
run: |
107+
cmake -B Builds -DJUCE_BUILD_EXAMPLES=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache .
108+
# Full list of targets https://gist.github.com/sudara/05be084efa371f4e43e21eb19ce04c50
109+
# Be sure to manually break the cache in the previous step if you want to add/remove plugins
110+
cmake --build Builds --config Release --target DSPModulePluginDemo_All --target MultiOutSynthPlugin_All
111+
112+
- name: Validate JUCE Plugin examples (VST3)
113+
shell: bash
114+
run: |
115+
# Paths must be single quoted for bash not to escape the Windows backslash character \ used in absolute paths
116+
${{ env.APP_DIR }}/${{ matrix.test-binary }} --strictness-level 10 --validate '${{ env.PLUGIN_CACHE_PATH }}/DSPModulePluginDemo_artefacts/Release/VST3/DSPModulePluginDemo.vst3'
117+
${{ env.APP_DIR }}/${{ matrix.test-binary }} --strictness-level 10 --validate '${{ env.PLUGIN_CACHE_PATH }}/MultiOutSynthPlugin_artefacts/Release/VST3/MultiOutSynthPlugin.vst3'
65118
66-
# Upload artefacts
67-
- uses: actions/upload-artifact@v2
68-
with:
69-
name: pluginval_${{ matrix.name }}.zip
70-
path: ./bin/${{ matrix.platform }}/pluginval_${{ matrix.name }}.zip
71-
- uses: actions/upload-artifact@v2
72-
if: ${{ matrix.platform == 'linux' }}
119+
- name: Validate JUCE Plugin examples (AU)
120+
shell: bash
121+
continue-on-error: true
122+
if: ${{ matrix.name == 'macOS' }}
123+
run: |
124+
# Move to ~/Library/Audio to be picked up as valid by macOS
125+
# We can't depend on COPY_PLUGIN_AFTER_BUILD, as most of the time we read binaries from the plugin cache
126+
mkdir -p ~/Library/Audio/Plug-Ins/Components/
127+
cp -R ${{ env.PLUGIN_CACHE_PATH }}/DSPModulePluginDemo_artefacts/Release/AU/DSPModulePluginDemo.component ~/Library/Audio/Plug-Ins/Components/
128+
killall -9 AudioComponentRegistrar # kick the AU registrar
129+
${{ env.APP_DIR }}/${{ matrix.test-binary }} --strictness-level 10 --validate ~/Library/Audio/Plug-Ins/Components/DSPModulePluginDemo.component
130+
131+
- name: Codesign (macOS)
132+
if: ${{ matrix.name == 'macOS' }}
133+
run: codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v ${{ env.APP_DIR }}/${{ matrix.app }} --deep --strict --options=runtime --timestamp
134+
135+
- name: "Notarize and staple (macOS)"
136+
if: ${{ matrix.name == 'macOS' }}
137+
working-directory: ${{ env.APP_DIR }}
138+
run: |
139+
7z a -tzip ${{ env.ZIP_FILE_NAME }} ${{ matrix.app }}
140+
xcrun notarytool submit ${{ env.ZIP_FILE_NAME }} --apple-id ${{ secrets.NOTARIZATION_USERNAME }} --password ${{ secrets.NOTARIZATION_PASSWORD }} --team-id ${{ secrets.TEAM_ID }} --wait
141+
xcrun stapler staple ${{ matrix.app }}
142+
rm ${{ env.ZIP_FILE_NAME }}
143+
144+
- name: Create zip files
145+
working-directory: ${{ env.APP_DIR }}
146+
run: 7z a -aoa -tzip ${{ env.ZIP_FILE_NAME }} ${{ matrix.app }}
147+
148+
- name: Upload zip files
149+
uses: actions/upload-artifact@v3
73150
with:
74-
name: CHANGELIST.md
75-
path: ./CHANGELIST.md
76-
151+
name: ${{ env.ZIP_FILE_NAME }}
152+
path: ${{ env.APP_DIR }}/${{ env.ZIP_FILE_NAME }}
153+
77154
# Create release for tagged refs
78155
deploy:
79156
if: startsWith(github.ref, 'refs/tags/')
80157
needs: build
81158
runs-on: ubuntu-latest
82159
steps:
160+
161+
- uses: actions/checkout@v3
162+
83163
- name: Get Artifacts
84-
uses: actions/download-artifact@v2
164+
uses: actions/download-artifact@v3
85165
with:
86166
path: ./
87167

88168
- name: Display structure of downloaded files
89169
run: ls -la
90170

91171
- name: Set tag name variable
172+
shell: bash
92173
run: |
93174
REF=${GITHUB_REF}
94175
echo "TAG_NAME=${REF##*/}" >> $GITHUB_ENV
95-
shell: bash
96176
97177
- name: Create Release
98178
uses: softprops/action-gh-release@v1
99179
with:
100180
tag_name: ${{ env.TAG_NAME }}
101181
name: ${{ env.TAG_NAME }}
102-
body_path: CHANGELIST.md/CHANGELIST.md
182+
body_path: CHANGELIST.md
103183
draft: true
104184
files: |
105185
CHANGELIST.md/*
106-
pluginval_Linux.zip/*
107-
pluginval_macOS.zip/*
108-
pluginval_Windows.zip/*
109-
env:
110-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
186+
pluginval-Linux.zip/*
187+
pluginval-macOS.zip/*
188+
pluginval-Windows.zip/*

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ obj/
2727
# Build products
2828
build/
2929
*.o
30+
build_**/
3031

3132
# Other source repository archive directories (protects when importing)
3233
.hg

.travis.yml

Lines changed: 0 additions & 47 deletions
This file was deleted.

CHANGELIST.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# pluginval Change List
22

3+
### 1.0.0
4+
- Added running auval as a test for Audio Units on macOS (levels 5 and up)
5+
- Added running VST3's validator as a test for VST3s (levels 5 and up)
6+
- Added better conformance to the VST3 standard when running at levels 5 and below
7+
- Refactored internals for better stability
8+
39
### 0.2.9
410
- Fixed support for macOS from 10.11 and Windows without the runtime DLLs
511

CMakeLists.txt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
cmake_minimum_required(VERSION 3.15)
22

3-
project(pluginval VERSION 0.3.0)
3+
file(READ VERSION CURRENT_VERSION)
4+
project(pluginval VERSION ${CURRENT_VERSION})
45

5-
# If we are using MSVC we want static runtime linkage
6-
if (MSVC)
7-
set (CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
8-
endif()
9-
10-
# If we are compiling for macOS we want to target OS versions down to 10.11
116
if (APPLE)
7+
# Target OS versions down to 10.11
128
set (CMAKE_OSX_DEPLOYMENT_TARGET "10.11" CACHE INTERNAL "")
9+
10+
# Universal Binary
11+
set(CMAKE_OSX_ARCHITECTURES arm64 x86_64)
1312
endif()
1413

1514
# Adds all the module sources so they appear correctly in the IDE
@@ -34,7 +33,7 @@ juce_add_gui_app(pluginval
3433

3534
juce_generate_juce_header(pluginval)
3635

37-
target_compile_features(pluginval PRIVATE cxx_std_14)
36+
target_compile_features(pluginval PRIVATE cxx_std_17)
3837

3938
set_target_properties(pluginval PROPERTIES
4039
C_VISIBILITY_PRESET hidden
@@ -75,7 +74,8 @@ target_compile_definitions(pluginval PRIVATE
7574
JUCER_ENABLE_GPL_MODE=1
7675
JUCE_DISPLAY_SPLASH_SCREEN=0
7776
JUCE_MODAL_LOOPS_PERMITTED=1
78-
JUCE_REPORT_APP_USAGE=0)
77+
JUCE_REPORT_APP_USAGE=0
78+
VERSION="${CURRENT_VERSION}")
7979

8080
target_link_libraries(pluginval PRIVATE
8181
juce::juce_audio_devices

0 commit comments

Comments
 (0)