Skip to content
Open

2.0.0 #186

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions .github/workflows/acceptance.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: Acceptance tests

# Builds the in-repo dogfood plugins and runs the acceptance (golden-file)
# self-tests via CTest. This is independent of Tracktion's main private build
# pipeline; it exists so the `pluginval test` feature has a public, reproducible
# regression check across the three desktop platforms.

on:
push:
branches: [ master, develop, v2 ]
pull_request:
workflow_dispatch:

concurrency:
group: acceptance-${{ github.ref }}
cancel-in-progress: true

jobs:
acceptance:
name: ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ ubuntu-latest, macos-latest, windows-latest ]

env:
# Cache CPM's downloads (JUCE etc.) so reruns don't re-fetch them.
CPM_SOURCE_CACHE: ${{ github.workspace }}/.cpm-cache

steps:
- uses: actions/checkout@v4

- name: Cache CPM sources
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/.cpm-cache
key: cpm-${{ matrix.os }}-${{ hashFiles('CMakeLists.txt', 'cmake/CPM.cmake') }}
restore-keys: cpm-${{ matrix.os }}-

- name: Install Linux dependencies
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y \
libasound2-dev libx11-dev libxext-dev libxi-dev libxinerama-dev libxrandr-dev \
libxcursor-dev libxcomposite-dev libfreetype6-dev libfontconfig1-dev \
libgl1-mesa-dev libcurl4-openssl-dev ladspa-sdk ninja-build xvfb

# The acceptance tests host the dogfood plugins via JUCE's own VST3 hosting,
# so the embedded VST3 validator (and its heavy SDK build) isn't needed here.
- name: Configure
run: >
cmake -B build
-DCMAKE_BUILD_TYPE=Release
-DPLUGINVAL_BUILD_TEST_PLUGINS=ON
-DPLUGINVAL_VST3_VALIDATOR=OFF

- name: Build
run: cmake --build build --config Release

- name: Run acceptance tests (Linux)
if: runner.os == 'Linux'
working-directory: build
run: xvfb-run --auto-servernum ctest -C Release --output-on-failure -R pluginval.acceptance

- name: Run acceptance tests (macOS / Windows)
if: runner.os != 'Linux'
working-directory: build
run: ctest -C Release --output-on-failure -R pluginval.acceptance
16 changes: 9 additions & 7 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ jobs:
run: |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
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 libwebkit2gtk-4.1-dev xvfb gdb
sudo apt-get install -y freeglut3-dev g++ libasound2-dev libcurl4-openssl-dev libfreetype6-dev libjack-jackd2-dev libx11-dev libxi-dev libxcomposite-dev libxcursor-dev libxinerama-dev libxrandr-dev mesa-common-dev ladspa-sdk libwebkit2gtk-4.1-dev xvfb gdb
sudo /usr/bin/Xvfb $DISPLAY &

- name: Make VST2 SDK available
Expand Down Expand Up @@ -104,7 +104,7 @@ jobs:
run: |
pwd
ls -ahl
${{ matrix.test-binary }} --run-tests
${{ matrix.test-binary }} run-tests

- name: Cache JUCE example plugin binaries
id: cache-plugins
Expand All @@ -127,9 +127,9 @@ jobs:
- name: Validate JUCE Plugin examples (VST3)
shell: bash
run: |
# Paths must be single quoted for bash not to escape the Windows backslash character \ used in absolute paths
${{ env.APP_DIR }}/${{ matrix.test-binary }} --strictness-level 10 --validate '${{ env.PLUGIN_CACHE_PATH }}/DSPModulePluginDemo_artefacts/Release/VST3/DSPModulePluginDemo.vst3'
${{ env.APP_DIR }}/${{ matrix.test-binary }} --strictness-level 10 --validate '${{ env.PLUGIN_CACHE_PATH }}/MultiOutSynthPlugin_artefacts/Release/VST3/MultiOutSynthPlugin.vst3'
# Paths must be single quoted for bash not to escape the Windows backslash character \ used in absolute paths
${{ env.APP_DIR }}/${{ matrix.test-binary }} validate --strictness-level 10 '${{ env.PLUGIN_CACHE_PATH }}/DSPModulePluginDemo_artefacts/Release/VST3/DSPModulePluginDemo.vst3'
${{ env.APP_DIR }}/${{ matrix.test-binary }} validate --strictness-level 10 '${{ env.PLUGIN_CACHE_PATH }}/MultiOutSynthPlugin_artefacts/Release/VST3/MultiOutSynthPlugin.vst3'

- name: Validate JUCE Plugin examples (AU)
shell: bash
Expand All @@ -141,6 +141,8 @@ jobs:
mkdir -p ~/Library/Audio/Plug-Ins/Components/
cp -R ${{ env.PLUGIN_CACHE_PATH }}/DSPModulePluginDemo_artefacts/Release/AU/DSPModulePluginDemo.component ~/Library/Audio/Plug-Ins/Components/
killall -9 AudioComponentRegistrar # kick the AU registrar
# Intentionally uses the deprecated "--validate" flat flag to keep the
# backwards-compatible alias covered (this step is continue-on-error).
${{ env.APP_DIR }}/${{ matrix.test-binary }} --strictness-level 10 --validate ~/Library/Audio/Plug-Ins/Components/DSPModulePluginDemo.component

- name: Codesign (macOS)
Expand Down Expand Up @@ -175,7 +177,7 @@ jobs:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-15, windows-latest]
juce: ["8.0.13"]
juce: ["8.0.13", "9.0.3"]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
Expand All @@ -184,7 +186,7 @@ jobs:
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y libasound2-dev libfreetype6-dev libx11-dev libxcomposite-dev libxcursor-dev libxinerama-dev libxrandr-dev mesa-common-dev libwebkit2gtk-4.1-dev ladspa-sdk
sudo apt-get install -y libasound2-dev libfreetype6-dev libx11-dev libxi-dev libxcomposite-dev libxcursor-dev libxinerama-dev libxrandr-dev mesa-common-dev libwebkit2gtk-4.1-dev ladspa-sdk

- name: Configure
run: cmake -B build -S tests/pluginval_as_dependency -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE}} -DJUCE_VERSION="${{ matrix.juce }}"
Expand Down
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,6 @@ pluginval.build/
pluginval.xcodeproj/
pluginval_artefacts/

.claude/*local*
.claude/*local*
# Acceptance-test failure diffs (written next to the reference)
*-diff.wav
15 changes: 15 additions & 0 deletions CHANGELIST.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
# pluginval Change List

### 2.0.0
- Updated JUCE to 9.0.3
- Added acceptance testing: `pluginval test <config.json>` renders a plugin with a known state, input (audio/MIDI) and optional playhead, then compares the output against a checked-in reference WAV, exiting `0` on a match and `1` on a mismatch (with a diff WAV). Use `--record-missing` to record new references. See `docs/Acceptance testing.md`
- Restructured the command line into subcommands: `pluginval validate [options] <plugin>` (the default), `pluginval run-tests` and `pluginval strictness-help [level]`. The plugin path is now a positional argument of `validate`
- **Deprecated:** the flat flags `--validate <plugin>`, `--run-tests` and `--strictness-help [level]` still work as aliases (with a one-line notice) but will be removed in a future version. `pluginval <plugin>` remains a silent shorthand for `validate`
- Replaced the hand-rolled command-line parser with CLI11 and a single JSON-based settings pipeline
- Added `--config <file.json>` to load settings from JSON (repeatable; later files win per key)
- Settings precedence is now (lowest to highest): defaults, environment variables, `--config`, command-line options
- Environment variable support is now automatic for every option (including `DISABLED_TESTS`)
- **Breaking:** unrecognised options now produce an error instead of being ignored
- **Breaking:** invalid option values now error instead of silently falling back (e.g. `--rtcheck banana`, `--strictness-level abc`)
- **Breaking:** falsey flag environment variables now mean off (e.g. `SKIP_GUI_TESTS=0` no longer enables skipping)
- `--help` output is now generated by CLI11
- Enabled the editor stress and extreme (real-time allocation / oversized block) tests that were present in the source tree but had not been compiled into the build

### 1.0.5
- Added drag-and-drop of plug-in files onto the main window, with two drop zones to either validate the plug-in or add it to the plugin list [#170]
- Added static linking to the Windows runtime so it should run on more Windows systems (particularly non-dev machines)
Expand Down
Loading
Loading