This directory contains build, release, and utility scripts for the Flues Project.
NEW: Flues now supports multi-platform builds - LV2 plugins on desktop, flues-synth on Raspberry Pi.
Purpose: Build LV2 plugins on Ubuntu desktop
Usage:
./scripts/build-plugins.sh [VERSION]Platform: Ubuntu desktop (x86_64)
What it does:
- Builds all 7 LV2 plugins in release mode (-O3 -march=native)
- Creates .lv2 bundles
- Packages into tarball for transfer to Pi
Output:
build-output/plugins-v{VERSION}/- Plugin bundlesbuild-output/flues-plugins-v{VERSION}-linux-x86_64.tar.gz
Purpose: Build flues-synth on Raspberry Pi
Usage:
./scripts/build-synth-pi.sh [VERSION]Platform: Raspberry Pi 4 (aarch64/armv7l)
What it does:
- Builds flues-synth with Pi-specific optimization (-mcpu=cortex-a72)
- Runs all tests on Pi hardware
- Strips debug symbols
- Packages into tarball for transfer back to desktop
Output:
build-output/synth-v{VERSION}/- Binary + docsbuild-output/flues-synth-v{VERSION}-linux-aarch64.tar.gz
Purpose: Combine desktop and Pi builds into final release
Usage:
./scripts/assemble-release.sh [VERSION]Platform: Ubuntu desktop (after receiving Pi build)
What it does:
- Combines plugin build (desktop) + synth build (Pi)
- Creates unified release directory
- Generates 3 tarballs: full, plugins-only, synth-only
- Creates install/uninstall scripts
- Generates checksums
Output:
releases/v{VERSION}/- Complete release directoryreleases/flues-v{VERSION}-multi-arch.tar.gz- Full releasereleases/flues-plugins-v{VERSION}-x86_64.tar.gz- Plugins onlyreleases/flues-synth-v{VERSION}-aarch64.tar.gz- Synth only- Checksums for all tarballs
See: MULTI_PLATFORM_BUILD.md for complete workflow.
Purpose: Build everything on one machine (desktop or Pi)
Usage:
./scripts/build-release.sh [VERSION]Note: This builds both plugins and synth on the same machine. Not recommended for production releases since it doesn't optimize for each platform.
What it does:
- Builds all 7 LV2 plugins
- Builds flues-synth
- Runs all tests
- Creates single tarball
Output:
releases/v{VERSION}/- Release directoryreleases/flues-v{VERSION}-{OS}-{ARCH}.tar.gz- Distribution tarball- Checksums
Purpose: Create GitHub release and upload artifacts
Usage:
./scripts/create-github-release.sh VERSIONExample:
./scripts/create-github-release.sh 0.1.0Prerequisites:
- GitHub CLI installed:
sudo apt install gh - Authenticated:
gh auth login - Release built:
./scripts/build-release.sh 0.1.0 - Git tag created:
git tag v0.1.0 && git push origin v0.1.0
What it does:
- Verifies prerequisites (gh, authentication, tarball exists)
- Generates release notes from template
- Opens editor for customization
- Creates GitHub release
- Uploads tarball + checksums
- Opens release in browser
Complete step-by-step guide for creating releases. Covers:
- Pre-release preparation (version updates, docs)
- Building releases
- Testing releases
- Publishing to GitHub
- Post-release tasks
- Troubleshooting
Read this first before creating a release.
Comprehensive testing checklist for releases. Includes:
- Build process verification
- Installation tests (system + user)
- All 7 LV2 plugin tests
- flues-synth tests
- New algorithm tests (param3)
- Documentation verification
- Platform-specific tests
- Integration tests (Ardour, Reaper, Carla)
Use this to verify release before publishing.
Template for GitHub release notes. Automatically filled by create-github-release.sh.
Includes:
- Overview
- What's new
- Component descriptions
- Installation instructions
- Usage examples
- Documentation links
- Known issues
- Changelog
Edit this template to customize release notes format.
User-facing quick start guide for new users. Will be included in release packages.
Covers:
- Prerequisites and installation
- Verification steps
- Usage examples for each plugin
- Recommended DAW workflows
- Troubleshooting
- Next steps
Can be used standalone or linked in release notes.
-
Prepare release
# Update version in files vim CHANGELOG.md vim flues-synth/meson.build # Commit changes git add -A git commit -m "Prepare release v0.1.0" git push origin main
-
Build release
./scripts/build-release.sh 0.1.0
-
Test release
# Follow RELEASE_TESTING_CHECKLIST.md cd releases/v0.1.0 sudo ./install.sh # ... test plugins and flues-synth ... sudo ./uninstall.sh
-
Create Git tag
git tag -a v0.1.0 -m "Release v0.1.0" git push origin v0.1.0 -
Publish to GitHub
./scripts/create-github-release.sh 0.1.0 # Edit release notes in editor # Release created automatically
-
Verify
# Check GitHub release page gh release view v0.1.0 --web # Download and test wget https://github.com/danja/flues/releases/download/v0.1.0/flues-v0.1.0-linux-x86_64.tar.gz tar xzf flues-v0.1.0-linux-x86_64.tar.gz cd flues-v0.1.0 sudo ./install.sh
Always test on a clean system before publishing:
# Option 1: Fresh VM
# Create Ubuntu/Debian VM, install minimal deps, test
# Option 2: Clean user account
sudo useradd -m testuser
sudo su - testuser
# Install and test as testuser
# Option 3: Docker
docker run -it ubuntu:24.04
apt update && apt install ...
# Test installationBefore each release, review:
- README.md (project overview, quick start)
- CHANGELOG.md (new version section)
- All plugin README files
- flues-synth/docs/ (algorithm, MIDI, program docs)
Follow Semantic Versioning:
- 0.1.0 → 0.1.1 : Bug fixes (PATCH)
- 0.1.0 → 0.2.0 : New features (MINOR)
- 0.1.0 → 1.0.0 : Breaking changes (MAJOR)
For beta/RC releases:
./scripts/build-release.sh 0.2.0-beta.1
git tag v0.2.0-beta.1
./scripts/create-github-release.sh 0.2.0-beta.1
# Mark as pre-release on GitHubchmod +x scripts/build-release.sh
chmod +x scripts/create-github-release.sh# Check dependencies
sudo apt install build-essential cmake meson ninja-build \
libasound2-dev libx11-dev libcairo2-dev
# Clean old builds
rm -rf lv2/*/build flues-synth/builddir
# Try building manually
cd lv2/disyn
cmake -S . -B build
cmake --build build# Check installation
gh --version
# Install
sudo apt install gh
# Authenticate
gh auth login- Documentation: https://danja.github.io/flues/
- Issues: https://github.com/danja/flues/issues
- Discussions: https://github.com/danja/flues/discussions
