-
Notifications
You must be signed in to change notification settings - Fork 7
Drafting a github action to build Ctrlr for multiple platforms #103
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Drafting a github action to build Ctrlr for multiple platforms #103
Conversation
Initial draft of a build pipeline, currently only for Linux. Other OSes to come later
|
wow that sounds awesome, I'll take a look at how it works. I can provide an xcode project file and a visual studio one for sure. We keep posted, I'll push an xcode file to the master this weekend |
|
Thanks! I got the windows build as far as the linker, which now fails, after a long time, saying If you have any hints on that, that would be great. I read online suggestions of switching to the 64 bit toolchain or of enabling/disabling link-time optimization. Might give that a go also, but if you have a more recent visual Studio project file that might address it, also welcome :) take care to define relative paths to include directories etc if possible Cheers, H |
|
I often get this problem on my mac bootcamp with VS. Have a nice weekend ;) Thanks for your help! Damien |
|
I had that problem, but when was it? And why was it? Was it on VS 2019 perhaps or when compiling a 32 bit version. I just can't recall, because on VS 2022 the process for [compiling CtrlrX is relatively easy these days](https://github.com/RomanKubiak/ctrlr/discussions/717s. Does this screenshot help? It wasn't clear to me how to export project files according to this page but attached are various project files from the builds folder. |
|
Thanks John, I wonder if you have anything to change manually in VS to get this project file right? We will need to find a way to create a working makefile from the projucer with the right flags and preprocessor declarations so that github desktop would push them to the CI/CD pipeline and get the server do its compiling job automatically. Same with Xcode (but it's ok without mods) and same with VS. I'll remove those IDE files from the gitignore list so that the repo will have them from now on. |
|
BTW boost needs to be unzipped for all compilers. |
|
There's already a project that fully implemented Github CI with actions for JUCE plugins called PampleJuce, it has everything required if you need to get some inspiration : https://github.com/sudara/pamplejuce |
|
Hi Hedde, I just approved the workflow and merged your PR. |
|
Awesome! Let me know if you need anything further. My username is my Gmail address. I noticed that the macOS build broke after removing the Builds/ directory, but couldn't really understand the link. It could also be that the GitHub 'runner' for macOS changed and that it is missing some dependency now that you need to install in the GitHub workflow file... Good luck with it! |
|
Excellent, I guess it's because the process failed to complete the code signing step. |
|
Ok I here is the solution offered by Gemini : Based on the provided crash log, the GitHub Actions CI/CD workflow is failing because the Rez tool cannot find the AudioUnit/AudioUnit.r resource header file. This error occurs during the compilation of your AU (Audio Unit) plugin component, which is a key part of the build process for macOS audio software. The log shows a Fatal Error! and states, failed to find AudioUnit/AudioUnit.r. This suggests a missing or improperly configured dependency on the CI runner.
Add the new include path to the Rez commandset(JUCE_AU_REZ_FLAGS ${JUCE_AU_REZ_FLAGS} -I "${CMAKE_SOURCE_DIR}/Resources/LegacyHeaders") This will ensure the Rez tool always finds the necessary files, regardless of the CI runner's environment. |
|
Sounds like chatgpt 😜 it's odd, because the build of a few days ago was all green. I guess something changed in the runner image. I saw a new release withchangelog at https://github.com/actions/runner-images/releases I'll play a bit with the workflow on my fork, maybe it's something from your list or there's an easy solution like fixing the search path or installing some depen from a package management system... But if you find a fix in the meantime let me know ! |
|
Yes it's my buddy Gemini who was providing the support :) |
|
We also need to check if other setups for macOS can fix the issue. Now we use the latest-stable macOS setup with Maxim lobanov settings but maybe an older version or different setup could cover this audiounit problem. |
|
I posted on the pamplejuce issue board : Maybe we should remove the Rez command pointed by the user as described and test. |
|
Hey Damien, I've analyzed the github action logs between a working and later non-working run, and notice the main difference:
For the not-working runs after:
Couldn't find obvious hints in the release notes of that image tho: https://github.com/actions/runner-images/releases/tag/macos-14-arm64%2F20250915.1804 Further, It is something with the Rez command, but not specifically the on that this user points to, but the one in a JUCE CMake file: I compared with a later JUCE but couldn't find this at all... What I did find are some hints that this has to do with "AudioUnit v1", and that later JUCE (and other plugins) have dropped support for this. I saw for example a PR that plainly removed the related code in an (old) fork of JUCE: Celemony/JUCE_ARA@10bef69 On the other hand, if I add enough "include directives" to the Rez command linked in the above file, we may get it working again as-is, because the required files are still somewhere on the macos image, for example I found the 'missing' I'll first chase down the latter. If that works, then good. If it doesn't we might need to consider dropping AudioUnit v1 support similar to the PR I linked above... |
|
Oh excellent ! That's definitely the main difference between the working and non-working setup. ? |
|
https://github.com/sgorpi/CtrlrX/actions/runs/17116456343/job/48548448436 The working action has : The later on Parking setup : ##[debug]Evaluating condition for step: 'Use latest Xcode on system (macOS)' They both use Xcode 16.2.0 (16C5032a) . Strange! |
|
We could then use the working setup like this : GitHub will probably deprecate the older system but it should be working short term. What do you think about that Hedde? Edit: this sucks , the syntax for the macos version is definitely not valid. 😭 |
|
I'm not even sure GitHub has macOS 13 available. That could be a short term solution until they deprecate it. |
|
The guy from pamplejuce tried with the latest macos 14 runner and it was successful apparently. He has a lead about our issue : sudara/pamplejuce#166 (comment) https://forum.juce.com/t/cmake-macos-commandlinetools-support/44676/6 |
|
A small update:
Now maybe we have a couple of things to consider:
|
|
Hi Hedde, thanks for looking into all the details. I already brought some JUCE 6.1+ code into our JUCE 6.0.8 lib. If you think we can bring the rez related changes from 6.1 to our 6.0.8 juce folder that would be a solution unless it uses c++ 17 instead of C++11 I don't know if as Gemini suggested we could include in the repository the missing files from the sdk that were available in Image: macos-14-arm64 Version: 20250901.1774 . But bringing JUCE 6.1 changes for the cmake module to our 6.0.8 would be the best way IMHO. You can definitely open a new PR to the same branch that would make things clearer. Hope we will be able to find an easy solution. Thanks, take care Damien |
|
Here are the zip folders of CoreServices and AudioUnits frameworks : |
|
I'm working on it right now. |
|
I'm almost done with it! I'll post the solution later |
|
I'm patching the missing file 1 by 1 which is time consuming, I'm progressing but need to add some framework folders from the old sdk containing tthe follwing dependencies : To resolve the resource compiler errors on macOS, the following files need to be present in the JUCE directory structure. These files are all located in older macOS SDKs and need to be placed in the specified directory to be found by the Rez compiler. |
|
I think I have the solution... All these files do exist on the github runners. Specifically in After going down the same rabit hole as you (finding the locations of all these files), after a while i noticed the Rez argument What base-branch can I base a new PR on? Then it's easier to show the diff 😄 |
|
https://github.com/sgorpi/CtrlrX/actions/runs/18028322401/job/51299684813 macOS build is green again 🎉 |
|
Hi Hedde, that's really awesome 👍 Thank you so much 🙏 |
|
Hi Hedde, I had to patch JUCEUtils.cmake for the plugin category because the way JUCE cmake is setup for vst3 category automatically place "Tools" as an "Effect" such as "Fx|Tools" but the VST3 SDK allows "Instrument|Tools", it's not possible from CMakeLists.txt It was a pain but it's working as it should be and exactly as if I was compiling on Xcode. https://github.com/damiensellier/CtrlrX/actions/runs/18072964512/job/51425448166 The working branch is : https://github.com/damiensellier/CtrlrX/tree/5.6.34-Maintenance-Build-Workflow The commit is : 21faae5 You can update your local install from there if needed. Thanks a lot Hedde for your help, I really appreciate it. Damien |
|
Awesome! Seems like you've gotten the hang of the github actions and cmake 👍 Do these additional spaces also solve the issue #176 that John was detailing? I might play with some other github actions stuff like showing compile warnings in a PR as comments on code, if that proves interesting/useful I'll make another PR 😉 |
|
I removed the only source of warning on mac about ninja already being installed. I'm surprised how well and fast it's working. Less than 10 minutes for doing the process on each platform, the GH servers must be crazy powerful! The ending spaces trail will only help if a search and replace process is added to the Linux export function. |
Drafting a github action to build Ctrlr for multiple platforms
Drafting a github action to build Ctrlr for multiple platforms


Hi,
I started drafting a github action to build CtrlrX upon commits to master, based on the "post-commit" script. Although we can debate if it is better to use this script vs using explicit command-line statements in the .yml file, using the post-commit script allows you to test some stuff locally.
So far I've gotten the Linux build to work. If you go to the "Actions" tab, then select "Build Release", you can select a specific commit for which it executed. When you've selected a commit, at the bottom of the page is an "Artifacts" list. When the build is successful it'll post a zipfile there with the build/package result.
I could use some help with the Windows and MacOS X builds (github has Intel and ARM runners available), as I don't have experience with those...
Grtz,
H