Skip to content
Merged
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
40 changes: 32 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ jobs:
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y ninja-build pkg-config \
sudo apt-get install -y ninja-build pkg-config xvfb \
libasound2-dev libx11-dev libxext-dev libxinerama-dev libxrandr-dev \
libxcursor-dev libgl1-mesa-dev libfreetype6-dev libfontconfig1-dev

Expand All @@ -84,16 +84,40 @@ jobs:
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
fi

- name: Build VST3 and CLAP
run: cmake --build build --config Release --target Suppressor_VST3 Suppressor_CLAP
- name: Build VST3, CLAP, and UI tests
run: cmake --build build --config Release --target Suppressor_VST3 Suppressor_CLAP SuppressorUITests

- name: Run UI tests and capture declared scales
shell: bash
run: |
mkdir -p ui-captures
if [ "${{ runner.os }}" = "Windows" ]; then
export SUPPRESSOR_UI_CAPTURE_DIR="$(pwd -W)/ui-captures"
else
export SUPPRESSOR_UI_CAPTURE_DIR="$PWD/ui-captures"
fi
if [ "${{ runner.os }}" = "Linux" ]; then
xvfb-run -a ctest --test-dir build --output-on-failure -C Release -R suppressor-ui-unit
else
ctest --test-dir build --output-on-failure -C Release -R suppressor-ui-unit
fi
find ui-captures -type f -name "*.png" -print

- uses: actions/upload-artifact@v4
with:
name: ui-evidence-${{ matrix.os }}
path: ui-captures/*.png
retention-days: 14

- name: Stage artifacts
shell: bash
run: |
set -e
mkdir -p staging
find build -type d -name "*.vst3" -exec cp -R {} staging/ \;
find build -type f -name "*.clap" -exec cp {} staging/ \;
find build -name "*.clap" -exec cp -R {} staging/ \;
find staging -maxdepth 1 -name "*.vst3" -print -quit | grep -q .
find staging -maxdepth 1 -name "*.clap" -print -quit | grep -q .
ls -la staging/

- uses: actions/upload-artifact@v4
Expand Down Expand Up @@ -121,7 +145,7 @@ jobs:
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y xvfb libasound2 libx11-6 libxext6 libxinerama1 \
sudo apt-get install -y xvfb libasound2t64 libx11-6 libxext6 libxinerama1 \
libxrandr2 libxcursor1 libgl1 libfreetype6 libfontconfig1

- name: Download pluginval v1.0.4
Expand Down Expand Up @@ -166,9 +190,9 @@ jobs:
echo "vst3: ${VST3}"
chmod +x "${PLUGINVAL}" || true
if [ "${{ runner.os }}" = "Linux" ]; then
xvfb-run -a "${PLUGINVAL}" --strictness-level 5 --timeout-ms 300000 --validate "${VST3}"
xvfb-run -a "${PLUGINVAL}" --strictness-level 10 --timeout-ms 300000 --validate "${VST3}"
else
"${PLUGINVAL}" --strictness-level 5 --timeout-ms 300000 --validate "${VST3}"
"${PLUGINVAL}" --strictness-level 10 --timeout-ms 300000 --validate "${VST3}"
fi

- name: Validate CLAP with clap-validator
Expand Down Expand Up @@ -207,7 +231,7 @@ jobs:
short=${osname#suppressor-}
(cd "$osdir" && \
for d in *.vst3; do [ -e "$d" ] && zip -qr "../suppressor-${short}-vst3.zip" "$d"; done && \
for f in *.clap; do [ -e "$f" ] && zip -q "../suppressor-${short}-clap.zip" "$f"; done)
for f in *.clap; do [ -e "$f" ] && zip -qr "../suppressor-${short}-clap.zip" "$f"; done)
done
ls -la *.zip

Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ body alone. Formats: **VST3** and **CLAP** (Windows, macOS, Linux).

[![CI](https://github.com/user1303836/suppressor/actions/workflows/ci.yml/badge.svg)](https://github.com/user1303836/suppressor/actions/workflows/ci.yml)

<p align="center">
<img src="docs/images/suppressor-ui.png" alt="Suppressor plugin interface" width="900">
</p>

## What it does

The core is a causal, sample-domain **dynamic low-pass**:
Expand Down
36 changes: 34 additions & 2 deletions Source/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
juce_add_binary_data(SuppressorAssets
NAMESPACE SuppressorAssets
HEADER_NAME SuppressorAssets.h
SOURCES
../assets/fonts/BarlowCondensed-Regular.ttf
../assets/fonts/BarlowCondensed-SemiBold.ttf)

juce_add_plugin(Suppressor
VERSION 0.1.0
COMPANY_NAME "Suppressor Audio"
Expand All @@ -12,13 +19,14 @@ juce_add_plugin(Suppressor
NEEDS_MIDI_INPUT FALSE
NEEDS_MIDI_OUTPUT FALSE
IS_MIDI_EFFECT FALSE
EDITOR_WANTS_KEYBOARD_FOCUS FALSE
EDITOR_WANTS_KEYBOARD_FOCUS TRUE
COPY_PLUGIN_AFTER_BUILD FALSE
VST3_CATEGORIES Fx Dynamics)

target_sources(Suppressor PRIVATE
PluginProcessor.cpp
PluginEditor.cpp)
PluginEditor.cpp
PluginLookAndFeel.cpp)

target_compile_definitions(Suppressor PUBLIC
JUCE_WEB_BROWSER=0
Expand All @@ -28,6 +36,7 @@ target_compile_definitions(Suppressor PUBLIC
JUCE_STRICT_REFCOUNTEDPOINTER=1)

target_link_libraries(Suppressor PRIVATE
SuppressorAssets
suppressor-dsp
juce::juce_audio_utils
juce::juce_recommended_config_flags
Expand All @@ -42,3 +51,26 @@ if (SUPPRESSOR_ENABLE_CLAP)
CLAP_PROCESS_EVENTS_RESOLUTION_SAMPLES 16
CLAP_ALWAYS_JUCE_BRIDGE TRUE)
endif()

if (SUPPRESSOR_BUILD_TESTS)
add_executable(SuppressorUITests)

target_sources(SuppressorUITests PRIVATE
../Tests/test_ui.cpp)

target_include_directories(SuppressorUITests PRIVATE
${CMAKE_CURRENT_SOURCE_DIR})

target_link_libraries(SuppressorUITests PRIVATE
Suppressor
doctest::doctest_with_main
juce::juce_audio_utils
juce::juce_recommended_config_flags
juce::juce_recommended_warning_flags)

target_compile_definitions(SuppressorUITests PRIVATE
JUCE_WEB_BROWSER=0
JUCE_USE_CURL=0)

add_test(NAME suppressor-ui-unit COMMAND SuppressorUITests)
endif()
Loading
Loading