Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
fee8fcb
Fix shell command injection, stream PG output live
danoli3 Aug 20, 2026
c906815
Enable contextIsolation, drop nodeIntegration
danoli3 Aug 20, 2026
249bd50
Upgrade Electron to 43.4.1, drop unsupported linux targets
danoli3 Aug 20, 2026
74df8ef
Linux CI: native arm64 build for Raspberry Pi, add Ubuntu 22.04
danoli3 Aug 20, 2026
21b1853
Add OF path status bar, addon-from-git quick add
danoli3 Aug 20, 2026
04a231f
Add Emscripten build & local preview window
danoli3 Aug 20, 2026
ab9a2d5
Remove AGL framework link, no longer in newer macOS SDKs
danoli3 Aug 20, 2026
09390d4
Fix Windows Node 18/ESM crash and duplicate-arch Linux tarball
danoli3 Aug 20, 2026
c8b143f
Work around held libunwind-dev on Ubuntu 22.04 runners
danoli3 Aug 20, 2026
08252e0
Remove unused modclean dependency
danoli3 Aug 20, 2026
3159157
Fix addon-clone modal buttons, folder-open, and feedback
danoli3 Aug 20, 2026
f77925d
Fix console panel visibility bug, make it resizable
danoli3 Aug 20, 2026
03c43b0
Emscripten: skip IDE button, style dropdown, add build feedback, emma…
danoli3 Aug 20, 2026
02b625d
Fix stale Emscripten button leaking into unrelated update-multiple su…
danoli3 Aug 20, 2026
9f03278
Fix Windows PATH casing when resolving Emscripten SDK env
danoli3 Aug 21, 2026
9acfa8c
Always show rescan-addons icon instead of only on missing addons
danoli3 Aug 21, 2026
b687a6b
Add progress feedback to Update multiple
danoli3 Aug 21, 2026
9f1332f
Fix settings.json save race that could drop the OF path on quit
danoli3 Aug 21, 2026
564791d
Compile as C fix for VS. Fix for macOS gitignore
danoli3 Aug 31, 2026
d47fab2
template dir
danoli3 Sep 1, 2026
1565d4f
Detect Emscripten SDK via EMSDK, PATH, or Homebrew and use it for Bui…
danoli3 Sep 1, 2026
4eca76b
Prefer shared Homebrew bin dir for Emscripten detection so python3 al…
danoli3 Sep 1, 2026
776ce96
Show Emscripten SDK path field only in Advanced options, above Run cmd
danoli3 Sep 1, 2026
ecec619
Console dock works without Advanced options; remove Run cmd (security)
danoli3 Sep 1, 2026
f481f28
cmdLine oF Menu
danoli3 Sep 1, 2026
a95b146
Add single-instance lock and detachable console window
danoli3 Sep 1, 2026
8c71a72
Fix packaged builds missing the detached-console files, auto-open con…
danoli3 Sep 1, 2026
9d5fa04
Don't force the docked console open when detached; keep template pick…
danoli3 Sep 1, 2026
2a6b9e7
Simplify console dock CSS (drop the enableConsole gate); find real em…
danoli3 Sep 1, 2026
cccfc70
npm
danoli3 Sep 1, 2026
725892a
Remove legacy switchGenerateMode console.hide() that overrode the doc…
danoli3 Sep 1, 2026
fa8b2de
Merge branch 'electron-security-fixes' of https://github.com/danoli3/…
danoli3 Sep 1, 2026
cf3f39b
Add oF Menu page (status, download/update libraries); sync detach-con…
danoli3 Sep 1, 2026
c94ee42
Merge remote-tracking branch 'danoli3/electron-security-fixes' into e…
danoli3 Sep 1, 2026
af9ba0b
Fix detach-console checkbox not visually unchecking on window close (…
danoli3 Sep 2, 2026
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
206 changes: 154 additions & 52 deletions .github/workflows/build-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,14 @@ jobs:
steps:
# - name: Install libunwind
# run: sudo apt-get install libunwind-dev wget2

- uses: actions/checkout@v4

- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.14
with:
key: ${{ matrix.cfg.target }}

- name: Determine Release
id: vars
shell: bash
Expand All @@ -56,56 +56,34 @@ jobs:
fi
TAG_NAME=${GITHUB_REF#refs/tags/}
echo "TAG_NAME=${TAG_NAME}" >> $GITHUB_ENV

- name: Install
run: ./scripts/linux/ci_install_core.sh

- name: List directory
run: ls -lah ./

- name: Build
run: ./../openFrameworks/apps/projectGenerator/scripts/linux/build_cmdline.sh

- name: Test cmdline
- name: Test cmdline
run: ./../openFrameworks/apps/projectGenerator/scripts/linux/test_cmdline.sh

- name: List output directory
run: ls -lah ./../openFrameworks/apps/projectGenerator/commandLine/bin

- name: Copy commandLine to frontend
run: |
cp ./../openFrameworks/apps/projectGenerator/commandLine/bin/projectGenerator ./../openFrameworks/apps/projectGenerator/frontend/app/projectGenerator
chmod 755 ./../openFrameworks/apps/projectGenerator/commandLine/bin/projectGenerator

- name: Build and Package projectGenerator Linux GUI
shell: bash
run: |
cd ../openFrameworks/apps/projectGenerator/frontend
npm install
npm update
npm run dist:linux64
cd dist
pwd
ls

- name: Build and Package projectGenerator Linux GUI
shell: bash
run: |
cd ../openFrameworks/apps/projectGenerator/frontend
npm install
npm update
npm run dist:linux:arm64
cd dist
pwd
ls

- name: Build and Package projectGenerator Linux GUI
shell: bash
run: |
cd ../openFrameworks/apps/projectGenerator/frontend
npm install
npm update
npm run dist:linux:armv7l
npm run dist:linux64
cd dist
pwd
ls
Expand All @@ -116,18 +94,8 @@ jobs:
- name: Copy GUI tarball to root directory
run: |
cd ./../openFrameworks/apps/projectGenerator/frontend/dist
mv projectGenerator-0.95.0.tar.gz $GITHUB_WORKSPACE/projectGenerator-linux-gui.gz

- name: Copy GUI tarball to root directory
run: |
cd ./../openFrameworks/apps/projectGenerator/frontend/dist
mv projectGenerator-0.95.0-arm64.tar.gz $GITHUB_WORKSPACE/projectGenerator-linux-arm64-gui.gz
mv projectGenerator-*.tar.gz $GITHUB_WORKSPACE/projectGenerator-linux-gui.gz

- name: Copy GUI tarball to root directory
run: |
cd ./../openFrameworks/apps/projectGenerator/frontend/dist
mv projectGenerator-0.95.0-armv7l.tar.gz $GITHUB_WORKSPACE/projectGenerator-linux-armv7l-gui.gz

- name: Test Artefact zip
run: |
cd ./../openFrameworks/apps/projectGenerator/commandLine/bin/
Expand All @@ -154,26 +122,160 @@ jobs:
tag_name: ${{ env.RELEASE }}
files: projectGenerator-linux-gui.gz

- name: Update Release Linux gui - arm64
- name: Update Latest Tag - DateTime
uses: EndBug/latest-tag@latest
if: github.repository == 'openframeworks/projectGenerator' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/bleeding')
with:
ref: nightly
description: Latest Always Nightly Builds
force-branch: true

# Ubuntu 22.04 build - older glibc baseline, covers users/distros that can't
# run binaries linked against 24.04's newer glibc.
build-linux-ubuntu22:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4

- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.14
with:
key: ubuntu22-linux

- name: Determine Release
shell: bash
run: |
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
echo "RELEASE=${{ github.ref_name }}" >> $GITHUB_ENV
elif [[ "${{ github.ref }}" == "refs/heads/master" ]]; then
echo "RELEASE=nightly" >> $GITHUB_ENV
elif [[ "${{ github.ref }}" == "refs/heads/bleeding" ]]; then
echo "RELEASE=bleeding" >> $GITHUB_ENV
else
echo "RELEASE=bleeding" >> $GITHUB_ENV
fi

- name: Install
run: ./scripts/linux/ci_install_core.sh

- name: Build
run: ./../openFrameworks/apps/projectGenerator/scripts/linux/build_cmdline.sh

- name: Test cmdline
run: ./../openFrameworks/apps/projectGenerator/scripts/linux/test_cmdline.sh

- name: Copy commandLine to frontend
run: |
cp ./../openFrameworks/apps/projectGenerator/commandLine/bin/projectGenerator ./../openFrameworks/apps/projectGenerator/frontend/app/projectGenerator
chmod 755 ./../openFrameworks/apps/projectGenerator/commandLine/bin/projectGenerator

- name: Build and Package projectGenerator Linux GUI
shell: bash
run: |
cd ../openFrameworks/apps/projectGenerator/frontend
npm install
npm update
npm run dist:linux64

- name: Copy GUI tarball to root directory
run: |
cd ./../openFrameworks/apps/projectGenerator/frontend/dist
mv projectGenerator-*.tar.gz $GITHUB_WORKSPACE/projectGenerator-linux-ubuntu22-gui.gz

- name: Test Artefact zip
run: |
cd ./../openFrameworks/apps/projectGenerator/commandLine/bin/
tar -cjf projectGenerator-linux-ubuntu22.tar.bz2 projectGenerator
mv projectGenerator-linux-ubuntu22.tar.bz2 $GITHUB_WORKSPACE/projectGenerator-linux-ubuntu22.tar.bz2

- name: Update Release Linux ubuntu22
if: github.repository == 'openframeworks/projectGenerator' && github.event_name == 'push' && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/bleeding')
uses: softprops/action-gh-release@v2.0.8
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag_name: ${{ env.RELEASE }}
files: projectGenerator-linux-arm64-gui.gz
files: projectGenerator-linux-ubuntu22.tar.bz2

- name: Update Release Linux gui - armv7l
- name: Update Release Linux gui ubuntu22
if: github.repository == 'openframeworks/projectGenerator' && github.event_name == 'push' && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/bleeding')
uses: softprops/action-gh-release@v2.0.8
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag_name: ${{ env.RELEASE }}
files: projectGenerator-linux-armv7l-gui.gz
files: projectGenerator-linux-ubuntu22-gui.gz

- name: Update Latest Tag - DateTime
uses: EndBug/latest-tag@latest
if: github.repository == 'openframeworks/projectGenerator' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/bleeding')
# Native arm64 build for Raspberry Pi (64-bit Raspberry Pi OS / Ubuntu on Pi 3+).
# Runs on a real arm64 runner so the commandLine binary is actually arm64 -
# the previous armv7l/arm64 GUI packages just repackaged the x64 binary built
# above, which can't run on arm hardware at all.
build-linux-arm64:
runs-on: ubuntu-22.04-arm
steps:
- uses: actions/checkout@v4

- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.14
with:
ref: nightly
description: Latest Always Nightly Builds
force-branch: true
key: arm64-linux

- name: Determine Release
shell: bash
run: |
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
echo "RELEASE=${{ github.ref_name }}" >> $GITHUB_ENV
elif [[ "${{ github.ref }}" == "refs/heads/master" ]]; then
echo "RELEASE=nightly" >> $GITHUB_ENV
elif [[ "${{ github.ref }}" == "refs/heads/bleeding" ]]; then
echo "RELEASE=bleeding" >> $GITHUB_ENV
else
echo "RELEASE=bleeding" >> $GITHUB_ENV
fi

- name: Install
run: ./scripts/linux/ci_install_core.sh

- name: Build
run: ./../openFrameworks/apps/projectGenerator/scripts/linux/build_cmdline.sh

- name: Test cmdline
run: ./../openFrameworks/apps/projectGenerator/scripts/linux/test_cmdline.sh

- name: Copy commandLine to frontend
run: |
cp ./../openFrameworks/apps/projectGenerator/commandLine/bin/projectGenerator ./../openFrameworks/apps/projectGenerator/frontend/app/projectGenerator
chmod 755 ./../openFrameworks/apps/projectGenerator/commandLine/bin/projectGenerator

- name: Build and Package projectGenerator Linux GUI
shell: bash
run: |
cd ../openFrameworks/apps/projectGenerator/frontend
npm install
npm update
npm run dist:linux:arm64

- name: Copy GUI tarball to root directory
run: |
cd ./../openFrameworks/apps/projectGenerator/frontend/dist
mv projectGenerator-*-arm64.tar.gz $GITHUB_WORKSPACE/projectGenerator-linux-arm64-gui.gz

- name: Test Artefact zip
run: |
cd ./../openFrameworks/apps/projectGenerator/commandLine/bin/
tar -cjf projectGenerator-linux-arm64.tar.bz2 projectGenerator
mv projectGenerator-linux-arm64.tar.bz2 $GITHUB_WORKSPACE/projectGenerator-linux-arm64.tar.bz2

- name: Update Release Linux arm64
if: github.repository == 'openframeworks/projectGenerator' && github.event_name == 'push' && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/bleeding')
uses: softprops/action-gh-release@v2.0.8
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag_name: ${{ env.RELEASE }}
files: projectGenerator-linux-arm64.tar.bz2

- name: Update Release Linux gui arm64
if: github.repository == 'openframeworks/projectGenerator' && github.event_name == 'push' && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/bleeding')
uses: softprops/action-gh-release@v2.0.8
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag_name: ${{ env.RELEASE }}
files: projectGenerator-linux-arm64-gui.gz
2 changes: 1 addition & 1 deletion .github/workflows/build-vs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
node-version: 22
- uses: msys2/setup-msys2@v2
with:
update: true
Expand Down
2 changes: 1 addition & 1 deletion commandLine/App.xcconfig
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ OF_NO_FMOD = 1

OF_CORE_LIBS = $(LIB_GLEW) $(LIB_PUGIXML)
OF_CORE_HEADERS = $(HEADER_OF) $(HEADER_FREETYPE) $(HEADER_FREETYPE2) $(HEADER_FMOD) $(HEADER_GLEW) $(HEADER_FREEIMAGE) $(HEADER_TESS2) $(HEADER_CAIRO) $(HEADER_RTAUDIO) $(HEADER_GLFW) $(HEADER_UTF8) $(HEADER_JSON) $(HEADER_GLM) $(HEADER_CURL) ${HEADER_SSL} $(HEADER_URIPARSER) $(HEADER_PUGIXML) ${HEADER_BROTLI}
OF_CORE_FRAMEWORKS = -framework Accelerate -framework AGL -framework AppKit -framework ApplicationServices -framework AudioToolbox -framework AVFoundation -framework Cocoa -framework CoreAudio -framework CoreFoundation -framework CoreMedia -framework CoreServices -framework CoreVideo -framework Foundation -framework IOKit -framework OpenGL -framework QuartzCore -framework Security -framework SystemConfiguration -framework Metal
OF_CORE_FRAMEWORKS = -framework Accelerate -framework AppKit -framework ApplicationServices -framework AudioToolbox -framework AVFoundation -framework Cocoa -framework CoreAudio -framework CoreFoundation -framework CoreMedia -framework CoreServices -framework CoreVideo -framework Foundation -framework IOKit -framework OpenGL -framework QuartzCore -framework Security -framework SystemConfiguration -framework Metal
15 changes: 14 additions & 1 deletion commandLine/src/addons/ofAddon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -842,7 +842,20 @@ void ofAddon::parseLibsPath(const fs::path & libsPath, const fs::path & parentFo
s = fixPath(s);
// alert("fixpath after " + ofPathToString(s));
addToFolder(s, parentFolder);
srcFiles.emplace_back(s);

// classify by extension instead of dumping everything into srcFiles (#8546)
string ext = ofPathToString(s.extension());
if (ext == ".c") {
csrcFiles.emplace_back(s);
} else if (ext == ".cpp" || ext == ".cc" || ext == ".cxx") {
cppsrcFiles.emplace_back(s);
} else if (ext == ".m" || ext == ".mm") {
objcsrcFiles.emplace_back(s);
} else if (ext == ".h" || ext == ".hpp") {
headersrcFiles.emplace_back(s);
} else {
srcFiles.emplace_back(s);
}
}

// so addons will never be system.
Expand Down
2 changes: 1 addition & 1 deletion commandLine/src/defines.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#define OFPROJECTGENERATOR_MAJOR_VERSION "0"
#define OFPROJECTGENERATOR_MINOR_VERSION "104"
#define OFPROJECTGENERATOR_MINOR_VERSION "105"
#define OFPROJECTGENERATOR_PATCH_VERSION "0"

#define PG_VERSION (OFPROJECTGENERATOR_MAJOR_VERSION "." OFPROJECTGENERATOR_MINOR_VERSION "." OFPROJECTGENERATOR_PATCH_VERSION)
Expand Down
15 changes: 15 additions & 0 deletions commandLine/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ enum optionIndex { UNKNOWN,
VERSION,
GET_OFPATH,
GET_HOST_PLATFORM,
GET_EMSDK,
OFMENU,
COMMAND,
BACKUP_PROJECT_FILES,
FRAMEWORKS,
Expand All @@ -47,6 +49,8 @@ constexpr option::Descriptor usage[] = {
{ VERSION, 0, "w", "version", option::Arg::None, " --version, -w \treturn the current version" },
{ GET_OFPATH, 0, "g", "getofpath", option::Arg::None, " --getofpath, -g \treturn the current ofPath" },
{ GET_HOST_PLATFORM, 0, "i", "platform", option::Arg::None, " --getplatform, -i \treturn the current host platform" },
{ GET_EMSDK, 0, "e", "getemsdk", option::Arg::None, " --getemsdk, -e \tdetect the Emscripten SDK (EMSDK env var, PATH, or a Homebrew install) and return its location" },
{ OFMENU, 0, "m", "ofmenu", option::Arg::Optional, " --ofmenu, -m \trun an oF Menu (scripts/of.sh) command: status | update-libs" },
{ COMMAND, 0, "c", "command", option::Arg::None, " --command, -c \truns command" },
{ BACKUP_PROJECT_FILES, 0, "b", "backup", option::Arg::None, " --backup, -b \tbackup project files when replacing with template" },

Expand Down Expand Up @@ -509,6 +513,17 @@ int main(int argc, char ** argv) {
return EXIT_OK;
}

if (options[GET_EMSDK].count() > 0) {
auto sdk = resolveEmscriptenSDK();
ofLogNotice() << "{ \"emsdk\": " << sdk.emsdk << ", \"emccDir\": " << sdk.binDir << ", \"found\": " << (sdk.found ? "true" : "false") << " }";
return EXIT_OK;
}

if (options[OFMENU].count() > 0) {
string subcommand = options[OFMENU].arg ? options[OFMENU].arg : "status";
return runOfMenu(subcommand);
}

if (options[TEMPLATE].count() > 0) {
if (options[TEMPLATE].arg != NULL) {
string templateString(options[TEMPLATE].arg);
Expand Down
10 changes: 4 additions & 6 deletions commandLine/src/projects/baseProject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ baseProject::baseProject(const string & _target) : target(_target) {
bLoaded = false;
}

fs::path baseProject::getPlatformTemplateDir(std::string templateDir) {
fs::path baseProject::getPlatformTemplateDir() {
// always the platform's own base template - extra templates are overlaid later via recursiveTemplateCopy (#8479)
string folder { target };
if ( target == "msys2"
|| target == "linux"
Expand All @@ -33,9 +34,6 @@ fs::path baseProject::getPlatformTemplateDir(std::string templateDir) {
) {
folder = "vscode";
}
if (templateDir != "") {
folder = templateDir;
}
return fs::weakly_canonical(getOFRoot() / templatesFolder / folder);
}

Expand Down Expand Up @@ -137,7 +135,7 @@ bool baseProject::create(const fs::path & _path, string templateName){

addons.clear();
extSrcPaths.clear();
auto pathTemplate = getPlatformTemplateDir(templateName);
auto pathTemplate = getPlatformTemplateDir();
if (fs::exists(pathTemplate)) {
templatePath = normalizePath(pathTemplate);
} else {
Expand Down Expand Up @@ -659,7 +657,7 @@ void baseProject::addSrcFiles(ofAddon& addon, const vector<fs::path> &filepaths,
}
fs::path normalizedDir = makeRelative(getOFRoot(), s);
ofLogVerbose("baseProject::addSrcFiles") << "Adding addon " << toString(type) << " source file: [" << s.string() << "] folder:[" << addon.filesToFolders[s].string() << "]";
addSrc(normalizedDir, addon.filesToFolders[s]);
addSrc(normalizedDir, addon.filesToFolders[s], type);
}
}

Expand Down
2 changes: 1 addition & 1 deletion commandLine/src/projects/baseProject.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ class baseProject {

std::vector<Template> listAvailableTemplates(std::string target);
std::unique_ptr<baseProject::Template> parseTemplate(const fs::path & templateDir);
virtual fs::path getPlatformTemplateDir(std::string templateDir);
virtual fs::path getPlatformTemplateDir();

pugi::xml_document doc;
bool bLoaded;
Expand Down
Loading
Loading