From 67655fe93826368267d80a0e07435c1f76e65b51 Mon Sep 17 00:00:00 2001
From: root
Date: Tue, 31 Mar 2026 01:44:16 +0000
Subject: [PATCH 1/9] perf: speed up builds via parallelism and caching
- Run editor + build dir npm ci in parallel in build-core
- Parallelize extension npm installs with xargs -P8 (was sequential loop)
- Enable Docker BuildKit (remove DOCKER_BUILDKIT=0)
- Add npm cache to all CI setup-node steps (apps/editor/package-lock.json)
Co-Authored-By: Claude Sonnet 4.6
---
.github/workflows/build-macos.yml | 6 ++++++
Makefile | 18 +++++++-----------
2 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml
index 06ca91dd..2725b847 100644
--- a/.github/workflows/build-macos.yml
+++ b/.github/workflows/build-macos.yml
@@ -62,6 +62,8 @@ jobs:
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
with:
node-version: '20.18.2'
+ cache: 'npm'
+ cache-dependency-path: apps/editor/package-lock.json
- name: Stamp release version in product.json
if: startsWith(github.ref, 'refs/tags/')
@@ -188,6 +190,8 @@ jobs:
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
with:
node-version: '20.18.2'
+ cache: 'npm'
+ cache-dependency-path: apps/editor/package-lock.json
- name: Stamp release version in product.json
if: startsWith(github.ref, 'refs/tags/')
@@ -288,6 +292,8 @@ jobs:
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
with:
node-version: '20.18.2'
+ cache: 'npm'
+ cache-dependency-path: apps/editor/package-lock.json
- name: Stamp release version in product.json
if: startsWith(github.ref, 'refs/tags/')
diff --git a/Makefile b/Makefile
index 45e8c0f9..c76eed03 100644
--- a/Makefile
+++ b/Makefile
@@ -75,7 +75,7 @@ docker-test-node-setup:
## build-linux-container: Build the Linux build container image
build-linux-container:
@echo "Building $(BUILD_LINUX_IMAGE) container..."
- DOCKER_BUILDKIT=0 docker build -f Dockerfile.build-linux -t $(BUILD_LINUX_IMAGE) .
+ docker build -f Dockerfile.build-linux -t $(BUILD_LINUX_IMAGE) .
## build-core: Shared build (rebuild + npm ci + tsc + extensions + React + bundle + minify + Electron)
build-core:
@@ -83,12 +83,10 @@ build-core:
set -e && \
cd $(PROJECT_ROOT)/apps/editor && \
export NODE_OPTIONS="--max-old-space-size=7168" && \
- echo "==> Install editor dependencies" && \
- npm ci --ignore-scripts && \
+ echo "==> Install editor + build dependencies (parallel)" && \
+ ( npm ci --ignore-scripts & (cd build && npm ci --ignore-scripts) & wait ) && \
echo "==> Rebuild native modules for Electron ($(ELECTRON_ARCH))" && \
npx --yes @electron/rebuild -v 34.3.2 -a $(ELECTRON_ARCH) && \
- echo "==> Install build dependencies" && \
- cd build && npm ci --ignore-scripts && cd .. && \
echo "==> Patch compilation.js" && \
node -e " \
const fs = require('fs'); \
@@ -102,12 +100,10 @@ build-core:
console.log('Patched compilation.js: emitError -> false');" && \
echo "==> Compile to out-build" && \
node_modules/.bin/gulp compile-build-without-mangling && \
- echo "==> Install extension dependencies" && \
- find extensions -name "package.json" -not -path "*/node_modules/*" | while read pkg; do \
- dir=$$(dirname "$$pkg"); \
- echo " Installing deps in $$dir"; \
- (cd "$$dir" && npm install --ignore-scripts 2>/dev/null || true); \
- done && \
+ echo "==> Install extension dependencies (parallel)" && \
+ find extensions -name "package.json" -not -path "*/node_modules/*" | \
+ xargs -I{} dirname {} | \
+ xargs -P8 -I{} sh -c 'cd "{}" && npm install --ignore-scripts 2>/dev/null || true' && \
echo "==> Compile OpenClaw extension" && \
cd $(PROJECT_ROOT)/apps/editor/extensions/openclaw && npm install dotenv --save-dev 2>/dev/null; node_modules/.bin/tsc -p tsconfig.json || true && \
cd $(PROJECT_ROOT)/apps/editor && \
From bd9198163f497dd4fdc17a2aaa85c2743b51bd20 Mon Sep 17 00:00:00 2001
From: root
Date: Tue, 31 Mar 2026 02:27:48 +0000
Subject: [PATCH 2/9] fix(ci): give each matrix leg a unique artifact name to
prevent overwrites
Adds artifact_name (e.g. darwin-arm64-macos15) per matrix entry.
output_dir still points to gulp's fixed output path; artifact_name
is used for all zip filenames, upload artifacts, and release assets.
Co-Authored-By: Claude Sonnet 4.6
---
.github/workflows/build-macos.yml | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml
index 2725b847..b9b575f5 100644
--- a/.github/workflows/build-macos.yml
+++ b/.github/workflows/build-macos.yml
@@ -25,27 +25,32 @@ jobs:
make_target: build-macos-x64
vscode_arch: x64
output_dir: VSCode-darwin-x64
+ artifact_name: darwin-x64-macos15
- runner: macos-26-intel
arch: x64
make_target: build-macos-x64
vscode_arch: x64
output_dir: VSCode-darwin-x64
+ artifact_name: darwin-x64-macos26
# arm64 (Apple Silicon) builds
- runner: macos-14
arch: arm64
make_target: build-macos-arm64
vscode_arch: arm64
output_dir: VSCode-darwin-arm64
+ artifact_name: darwin-arm64-macos14
- runner: macos-15
arch: arm64
make_target: build-macos-arm64
vscode_arch: arm64
output_dir: VSCode-darwin-arm64
+ artifact_name: darwin-arm64-macos15
- runner: macos-26
arch: arm64
make_target: build-macos-arm64
vscode_arch: arm64
output_dir: VSCode-darwin-arm64
+ artifact_name: darwin-arm64-macos26
runs-on: ${{ matrix.runner }}
timeout-minutes: 120
@@ -118,7 +123,7 @@ jobs:
- name: Zip signed app
run: |
cd "$GITHUB_WORKSPACE/apps/${{ matrix.output_dir }}"
- zip -Xry "$RUNNER_TEMP/OCcode-${{ matrix.output_dir }}-${GITHUB_REF_NAME}.zip" "OCcode.app"
+ zip -Xry "$RUNNER_TEMP/OCcode-${{ matrix.artifact_name }}-${GITHUB_REF_NAME}.zip" "OCcode.app"
- name: Notarize
env:
@@ -131,7 +136,7 @@ jobs:
mkdir -p ~/.appstoreconnect/private_keys
echo "$APPLE_API_KEY_P8" > ~/.appstoreconnect/private_keys/AuthKey_${APPLE_API_KEY_ID}.p8
- xcrun notarytool submit "$RUNNER_TEMP/OCcode-${{ matrix.output_dir }}-${GITHUB_REF_NAME}.zip" \
+ xcrun notarytool submit "$RUNNER_TEMP/OCcode-${{ matrix.artifact_name }}-${GITHUB_REF_NAME}.zip" \
--key ~/.appstoreconnect/private_keys/AuthKey_${APPLE_API_KEY_ID}.p8 \
--key-id "$APPLE_API_KEY_ID" \
--issuer "$APPLE_API_KEY_ISSUER" \
@@ -145,7 +150,7 @@ jobs:
- name: Re-zip stapled app
run: |
cd "$GITHUB_WORKSPACE/apps/${{ matrix.output_dir }}"
- zip -Xry "$RUNNER_TEMP/OCcode-${{ matrix.output_dir }}-${GITHUB_REF_NAME}-signed.zip" "OCcode.app"
+ zip -Xry "$RUNNER_TEMP/OCcode-${{ matrix.artifact_name }}-${GITHUB_REF_NAME}-signed.zip" "OCcode.app"
- name: Verify signature
run: |
@@ -156,15 +161,15 @@ jobs:
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
continue-on-error: true
with:
- name: OCcode-${{ matrix.output_dir }}-${{ matrix.runner }}-${{ github.ref_name }}-signed
- path: ${{ runner.temp }}/OCcode-${{ matrix.output_dir }}-${{ github.ref_name }}-signed.zip
+ name: OCcode-${{ matrix.artifact_name }}-${{ github.ref_name }}-signed
+ path: ${{ runner.temp }}/OCcode-${{ matrix.artifact_name }}-${{ github.ref_name }}-signed.zip
retention-days: 30
- name: Create GitHub Release (on tag)
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b
with:
- files: ${{ runner.temp }}/OCcode-${{ matrix.output_dir }}-${{ github.ref_name }}-signed.zip
+ files: ${{ runner.temp }}/OCcode-${{ matrix.artifact_name }}-${{ github.ref_name }}-signed.zip
name: OCcode ${{ github.ref_name }}
draft: false
prerelease: false
From 34b4ea80efae1a5329eb4120158288b93af6b193 Mon Sep 17 00:00:00 2001
From: root
Date: Tue, 31 Mar 2026 02:29:11 +0000
Subject: [PATCH 3/9] ci: publish CHANGELOG.md as GitHub Release body on all
platforms
Co-Authored-By: Claude Sonnet 4.6
---
.github/workflows/build-macos.yml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml
index b9b575f5..1fd90c71 100644
--- a/.github/workflows/build-macos.yml
+++ b/.github/workflows/build-macos.yml
@@ -171,6 +171,7 @@ jobs:
with:
files: ${{ runner.temp }}/OCcode-${{ matrix.artifact_name }}-${{ github.ref_name }}-signed.zip
name: OCcode ${{ github.ref_name }}
+ body_path: CHANGELOG.md
draft: false
prerelease: false
@@ -278,6 +279,7 @@ jobs:
${{ runner.temp }}/OCcode-win32-x64-${{ github.ref_name }}-user-setup.exe
${{ runner.temp }}/OCcode-win32-x64-${{ github.ref_name }}.zip
name: OCcode ${{ github.ref_name }}
+ body_path: CHANGELOG.md
draft: false
prerelease: false
@@ -350,5 +352,6 @@ jobs:
${{ runner.temp }}/OCcode-linux-x64-${{ github.ref_name }}.deb
${{ runner.temp }}/OCcode-linux-x64-${{ github.ref_name }}.tar.gz
name: OCcode ${{ github.ref_name }}
+ body_path: CHANGELOG.md
draft: false
prerelease: false
From 755c9791a71a3dcb266f35f09f7c963d4aea94d3 Mon Sep 17 00:00:00 2001
From: root
Date: Tue, 31 Mar 2026 02:30:28 +0000
Subject: [PATCH 4/9] chore: persist build-time patches to tracked files
- dependencies-generator.js: set FAIL_BUILD_FOR_NEW_DEPENDENCIES=false
- openclaw/package.json: add dotenv as devDependency
Co-Authored-By: Claude Sonnet 4.6
---
apps/editor/build/linux/dependencies-generator.js | 2 +-
apps/editor/extensions/openclaw/package.json | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/apps/editor/build/linux/dependencies-generator.js b/apps/editor/build/linux/dependencies-generator.js
index 448ab38c..981d9c47 100644
--- a/apps/editor/build/linux/dependencies-generator.js
+++ b/apps/editor/build/linux/dependencies-generator.js
@@ -25,7 +25,7 @@ const product = require("../../product.json");
// If true, we fail the build if there are new dependencies found during that task.
// The reference dependencies, which one has to update when the new dependencies
// are valid, are in dep-lists.ts
-const FAIL_BUILD_FOR_NEW_DEPENDENCIES = true;
+const FAIL_BUILD_FOR_NEW_DEPENDENCIES = false;
// Based on https://source.chromium.org/chromium/chromium/src/+/refs/tags/132.0.6834.210:chrome/installer/linux/BUILD.gn;l=64-80
// and the Linux Archive build
// Shared library dependencies that we already bundle.
diff --git a/apps/editor/extensions/openclaw/package.json b/apps/editor/extensions/openclaw/package.json
index f6d1b102..89316d6c 100644
--- a/apps/editor/extensions/openclaw/package.json
+++ b/apps/editor/extensions/openclaw/package.json
@@ -130,6 +130,7 @@
"devDependencies": {
"@types/node": "^20.19.35",
"@types/vscode": "^1.85.0",
+ "dotenv": "^17.3.1",
"typescript": "^5.9.3"
},
"icon": "media/icon.png",
From 08dbcbecdb416ecf44f384082a9adee7ef3e04e2 Mon Sep 17 00:00:00 2001
From: root
Date: Tue, 31 Mar 2026 02:37:20 +0000
Subject: [PATCH 5/9] chore: ignore VSCode build output dirs and worktrees
Co-Authored-By: Claude Sonnet 4.6
---
.gitignore | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/.gitignore b/.gitignore
index 721e725d..bfa96118 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,9 @@ apps/editor/extensions/**/package-lock.json
*.vsix
.DS_Store
apps/editor/.build/
+apps/VSCode-linux-x64/
+apps/VSCode-darwin-*/
+apps/VSCode-win32-*/
# Internal infrastructure docs — keep private
APPLE.md
@@ -18,3 +21,4 @@ ISsues
.env.local
occ-backend
.worktree
+.worktrees/
From c21662e8a3c2fcd83f1c8454cba92d25db473c23 Mon Sep 17 00:00:00 2001
From: root
Date: Tue, 31 Mar 2026 02:39:26 +0000
Subject: [PATCH 6/9] fix(build): use explicit path for rcedit to avoid npx
resolution issues on Windows
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index c76eed03..15dad523 100644
--- a/Makefile
+++ b/Makefile
@@ -154,7 +154,7 @@ build-windows:
echo "==> Package app (win32-x64)" && \
VSCODE_ARCH=x64 node_modules/.bin/gulp vscode-win32-x64-min-ci && \
echo "==> Stamp app icon" && \
- npx rcedit "$(PROJECT_ROOT)/apps/VSCode-win32-x64/OCcode.exe" --set-icon resources/win32/code.ico && \
+ node_modules/.bin/rcedit "$(PROJECT_ROOT)/apps/VSCode-win32-x64/OCcode.exe" --set-icon resources/win32/code.ico && \
echo "==> Copy inno_updater to build" && \
VSCODE_ARCH=x64 node_modules/.bin/gulp vscode-win32-x64-inno-updater && \
echo "==> Build Windows installers" && \
From 80d5595077a4ec5c37553800611edd9f77704c08 Mon Sep 17 00:00:00 2001
From: linuxdev
Date: Mon, 30 Mar 2026 22:39:53 -0400
Subject: [PATCH 7/9] chore(release): 3.2.43
---
CHANGELOG.md | 8 ++++++++
package.json | 2 +-
version.txt | 2 +-
3 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 581c637a..bcd77f92 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,14 @@
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
+## [3.2.43](https://github.com/damoahdominic/occ/compare/v3.2.42...v3.2.43) (2026-03-31)
+
+
+### Bug Fixes
+
+* **build:** use explicit path for rcedit to avoid npx resolution issues on Windows ([f8c1fc3](https://github.com/damoahdominic/occ/commit/f8c1fc3b67bf000a9ea9c04bd913b2fc1c4a8419))
+* **ci:** give each matrix leg a unique artifact name to prevent overwrites ([09886c8](https://github.com/damoahdominic/occ/commit/09886c8f127ecd152843c0ac2b5826d3f6e45457))
+
## [3.2.42](https://github.com/damoahdominic/occ/compare/v3.2.40...v3.2.42) (2026-03-31)
## [3.2.41](https://github.com/damoahdominic/occ/compare/v3.2.40...v3.2.41) (2026-03-31)
diff --git a/package.json b/package.json
index 68202858..d33b9a2e 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "occode",
- "version": "3.2.42",
+ "version": "3.2.43",
"private": true,
"description": "OCcode — branded cross-platform IDE wrapper with OpenClaw extension",
"workspaces": [
diff --git a/version.txt b/version.txt
index cbccdeb8..3dfd8f52 100644
--- a/version.txt
+++ b/version.txt
@@ -1 +1 @@
-3.2.42
\ No newline at end of file
+3.2.43
\ No newline at end of file
From b4e4c1fe866bc5e2e63df4610bbd572c618158d3 Mon Sep 17 00:00:00 2001
From: linuxdev
Date: Mon, 30 Mar 2026 22:46:07 -0400
Subject: [PATCH 8/9] chore(release): 3.2.44
---
CHANGELOG.md | 8 ++++++++
package.json | 2 +-
version.txt | 2 +-
3 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bcd77f92..bbf2b528 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,14 @@
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
+## [3.2.44](https://github.com/damoahdominic/occ/compare/v3.2.42...v3.2.44) (2026-03-31)
+
+
+### Bug Fixes
+
+* **build:** use explicit path for rcedit to avoid npx resolution issues on Windows ([c21662e](https://github.com/damoahdominic/occ/commit/c21662e8a3c2fcd83f1c8454cba92d25db473c23))
+* **ci:** give each matrix leg a unique artifact name to prevent overwrites ([bd91981](https://github.com/damoahdominic/occ/commit/bd9198163f497dd4fdc17a2aaa85c2743b51bd20))
+
## [3.2.43](https://github.com/damoahdominic/occ/compare/v3.2.42...v3.2.43) (2026-03-31)
diff --git a/package.json b/package.json
index d33b9a2e..0c94d5ca 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "occode",
- "version": "3.2.43",
+ "version": "3.2.44",
"private": true,
"description": "OCcode — branded cross-platform IDE wrapper with OpenClaw extension",
"workspaces": [
diff --git a/version.txt b/version.txt
index 3dfd8f52..49254621 100644
--- a/version.txt
+++ b/version.txt
@@ -1 +1 @@
-3.2.43
\ No newline at end of file
+3.2.44
\ No newline at end of file
From 2dc4883ee39f9891f08d3c8843c401fc2ee5a28f Mon Sep 17 00:00:00 2001
From: linuxdev
Date: Mon, 30 Mar 2026 22:46:12 -0400
Subject: [PATCH 9/9] chore(release): 3.2.45
---
CHANGELOG.md | 8 ++++++++
package.json | 2 +-
version.txt | 2 +-
3 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bbf2b528..832ef60d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,14 @@
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
+## [3.2.45](https://github.com/damoahdominic/occ/compare/v3.2.42...v3.2.45) (2026-03-31)
+
+
+### Bug Fixes
+
+* **build:** use explicit path for rcedit to avoid npx resolution issues on Windows ([c21662e](https://github.com/damoahdominic/occ/commit/c21662e8a3c2fcd83f1c8454cba92d25db473c23))
+* **ci:** give each matrix leg a unique artifact name to prevent overwrites ([bd91981](https://github.com/damoahdominic/occ/commit/bd9198163f497dd4fdc17a2aaa85c2743b51bd20))
+
## [3.2.44](https://github.com/damoahdominic/occ/compare/v3.2.42...v3.2.44) (2026-03-31)
diff --git a/package.json b/package.json
index 0c94d5ca..277bf9de 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "occode",
- "version": "3.2.44",
+ "version": "3.2.45",
"private": true,
"description": "OCcode — branded cross-platform IDE wrapper with OpenClaw extension",
"workspaces": [
diff --git a/version.txt b/version.txt
index 49254621..0a0a9272 100644
--- a/version.txt
+++ b/version.txt
@@ -1 +1 @@
-3.2.44
\ No newline at end of file
+3.2.45
\ No newline at end of file