All Projects → sudara → pamplejuce

sudara / pamplejuce

Licence: MIT license
A JUCE Plugin CI template. JUCE 7 & Catch2 with macOS notarization and Windows EV code signing on Github Actions

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects
Inno Setup
370 projects

Projects that are alternatives of or similar to pamplejuce

juce-cookbook
Collection of tutorials & resources for the C++ library JUCE
Stars: ✭ 58 (-49.57%)
Mutual labels:  juce, juce-framework
Lemons
A library of utilities and building blocks for JUCE-based apps and plugins
Stars: ✭ 28 (-75.65%)
Mutual labels:  juce, juce-framework
Bad-Circuit-Modelling
Correct modelling of incorrect circuits
Stars: ✭ 27 (-76.52%)
Mutual labels:  juce
Amalgamate
A tool for creating an amalgamation from C and C++ sources. Forked from https://github.com/vinniefalco/Amalgamate.
Stars: ✭ 17 (-85.22%)
Mutual labels:  juce
DarkMark
Marking up images for use with Darknet.
Stars: ✭ 62 (-46.09%)
Mutual labels:  juce
juceSynths
Collection of JUCE synthesisers utilising the Maximilian library.
Stars: ✭ 78 (-32.17%)
Mutual labels:  juce
Juce
JUCE is an open-source cross-platform C++ application framework for desktop and mobile applications, including VST, VST3, AU, AUv3, RTAS and AAX audio plug-ins.
Stars: ✭ 3,841 (+3240%)
Mutual labels:  juce
KnobKraft-orm
The KnobKraft Orm - The free modern cross-platform MIDI Sysex Librarian
Stars: ✭ 100 (-13.04%)
Mutual labels:  juce
pMix2
pMix - a preset interpolator, plug-in chainer and Faust IDE written with JUCE
Stars: ✭ 84 (-26.96%)
Mutual labels:  juce
juce-cmake
CMake find module for the JUCE library
Stars: ✭ 33 (-71.3%)
Mutual labels:  juce
juce-plugin-ci
Cross-platform CI for JUCE audio plugins with Github Actions
Stars: ✭ 51 (-55.65%)
Mutual labels:  juce
ChowPhaser
Phaser effect based loosely on the Schulte Compact Phasing 'A'
Stars: ✭ 51 (-55.65%)
Mutual labels:  juce
osmid
osmid is a tool to bridge MIDI and OSC. It is currently in use in Sonic Pi
Stars: ✭ 63 (-45.22%)
Mutual labels:  juce
melatonin audio sparklines
Sparklines For JUCE AudioBlocks
Stars: ✭ 60 (-47.83%)
Mutual labels:  juce
Roboverb
A VST / VST3 / AU / LV2 Reverb Plugin
Stars: ✭ 48 (-58.26%)
Mutual labels:  juce
JUCE ARA
The JUCE cross-platform C++ framework, augmented with support for the Celemony ARA API
Stars: ✭ 32 (-72.17%)
Mutual labels:  juce
freesound-juce
A JUCE client for accessing the Freesound API
Stars: ✭ 17 (-85.22%)
Mutual labels:  juce
cpp-template
A template C++ repository, using CMake and Catch
Stars: ✭ 49 (-57.39%)
Mutual labels:  catch2
popsicle
Popsicle aims to bridge the JUCE c++ framework to python.
Stars: ✭ 102 (-11.3%)
Mutual labels:  juce
DSP-Testbench
A DSP Testbench for users of the JUCE framework
Stars: ✭ 40 (-65.22%)
Mutual labels:  juce

PAMPLEJUCE

Pamplejuce is a template lifestyle for creating and building JUCE plugins in 2022.

Out of the box, it supports:

  1. C++20
  2. JUCE 7.x as a submodule tracking develop
  3. CMake 3.21 for building cross-platform
  4. Catch2 v3.1.0 as the test framework and runner
  5. pluginval 1.x for plugin validation
  6. GitHub Actions config for building binaries, running Catch2 tests and pluginval,artifact building on the Windows, Linux and macOS platforms, including code signing and notarization on macOS and Windows EV/OV code signing via Azure Key Vault

It also contains:

  1. Proper .gitignore for all platforms
  2. A .clang-format file
  3. A VERSION file that will propagate through to JUCE and your app.

How does this all work at a high level?

Read up about JUCE and CMmake on my blog!.

Setting up for YOUR project

This is a template repo!

That means the easiest thing to do is click "Use this template" here or at the top of the page to get your own repo with all the code here.

For an example of a plugin that uses this repo, check out Load Monster!.

After you've created a new repo:

  1. git clone your new repo (if you make it private, see the warning below about GitHub Actions minutes)

  2. Download CMAKE if you aren't already using it (Clion and VS2022 both have it bundled, so you can skip this step in those cases).

  3. Populate the latest JUCE by running git submodule update --init in your repository directory. By default, this will track JUCE's develop branch, which IMO is what you want until you are at the point of releasing a plugin.

  4. Replace Pamplejuce with the name of your project in CMakeLists.txt line 5, where the PROJECT_NAME variable is set. Make this all one word, no spaces.

  5. Pick which formats you want built on line 8.

  6. Set the correct flags for your plugin under juce_add_plugin. Check out the API https://github.com/juce-framework/JUCE/blob/master/docs/CMake%20API.md and be sure to change things like PLUGIN_CODE and PLUGIN_MANUFACTURER_CODE.

  7. Rename AudioPluginAudioProcessor to your plugin name in the code.

  8. If you are packaging and code signing, you'll want to take a look at the packaging/ directory and add assets and config that match your product. Otherwise you can delete the steps which do this.

Conventions

  1. Your tests will be in "Tests" and you can just add new .cpp files there.
  2. Your binary data target is called "Assets"

Releases

You can cut a release with downloadable assets by creating a tag starting with v and pushing it to GitHub. Note that you currently must push the tag along with an actual commit.

I recommend the workflow of bumping the VERSION file and then pushing that as a release, like so:

# edit VERSION
git commit -m "Releasing v0.0.2"
git tag v0.0.2
git push --tags

I'll work on making this less awkward...

Releases are set to prerelease, which means that uploaded release assets are visible to other users, but it's not explicitly listed as the latest release until changed in the GitHub UI.

Code signing and Notarization

This repo codesigns Windows via Azure Key Vault, read more about how to do that on my blog.

It also code signs and notarizes macOS, blog article coming soon, but there are many more examples of this in the wild.

Tips n' Tricks

  1. ⚠️ GitHub gives you 2000 or 3000 free GitHub Actions "minutes" for private projects, but they actually bill 2x the number of minutes you use on Windows and 10x on MacOS.

  2. There's a VERSION file in the root that you can treat as the main place to bump the version.

  3. You might feel disincentivized to push to a private repo due to burning minutes. You can push a commit with [ci skip] in the message if you are doing things like updating the README. You have a few other big picture options, like doing testing/pluginval only on linux and moving everything else to release. The tradeoff is you won't be sure everything is happy on all platforms until the time you are releasing, which is the last place you really want friction. By default, multiple commits in quick succession will cancel the earlier builds.

How do variables work in GitHub Actions?

It can be confusing, as the documentation is a big fragmented.

  1. Things in double curly braces like ${{ matrix.name }} are called "contexts or expressions" and can be used to get, set, or perform simple operations.
  2. In "if" conditions you can omit the double curly braces, as the whole condition is evaluated as an expression: if: contains(github.ref, 'tags/v')
  3. You can set variables for the whole workflow to use in "env"
  4. Reading those variables is done with the env context when you are inside a with, name, or if: ${{ env.SOME_VARIABLE }}
  5. Inside of run, you have access to bash ENV variables in addition to contexts/expressions. That means $SOME_VARIABLE or ${SOME_VARIABLE} will work but only when using bash and not while using powershell on windows. The version with curly braces (variable expansion) is often used when the variable is forming part of a larger string to avoid ambiguity. Be sure that the ENV variable was set properly in the workflow/job/step before you use it. And if you need the variable to be os-agnostic, use the env context.

How to update a repo based on Pamplejuce

  1. Update with the latest CMake version listed here, or the latest version supported by your toolchain like VS or Clion.
  2. Update JUCE with git submodule update --remote --merge
  3. (unfortunately) to get updates to the CMakesList.txt you'll have to manually compare, as I assume you made a bunch of changes. In the future, I may move most of the cmake magic into helpers to keep the main CMakesList.txt cleaner.

References & Inspiration

CMake

GitHub Actions

Catch2 & CTest

Packaging, Code Signing and Notarization

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].