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