Skip to content
This repository was archived by the owner on Jun 8, 2026. It is now read-only.

Commit 09cf797

Browse files
authored
Adopt pnpm 11 install policy (#272)
* Adopt pnpm 11 install policy Updates the desktop workspace to pnpm 11.3.0 and replaces onlyBuiltDependencies with allowBuilds approvals for audited desktop install scripts. Keeps unreviewed transitive build scripts denied unless a reviewed desktop path requires them. * Emit desktop version check for all PRs Run the workflow for every PR and no-op when apps/desktop is unchanged so branch protection receives the required context without forcing irrelevant version bumps.
1 parent fbccdfc commit 09cf797

5 files changed

Lines changed: 33 additions & 17 deletions

File tree

.github/workflows/version-check.yml

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ name: Desktop Version Bump Check
33
on:
44
pull_request:
55
types: [opened, synchronize, reopened]
6-
paths:
7-
- "apps/desktop/**"
86

97
jobs:
108
version-bump-check:
@@ -16,7 +14,22 @@ jobs:
1614
with:
1715
fetch-depth: 0
1816

17+
- name: Detect desktop changes
18+
id: desktop_changes
19+
run: |
20+
BASE_REF="${{ github.event.pull_request.base.ref }}"
21+
BASE=$(git merge-base "origin/$BASE_REF" HEAD)
22+
23+
if git diff --quiet "$BASE" HEAD -- apps/desktop; then
24+
echo "changed=false" >> "$GITHUB_OUTPUT"
25+
echo "No apps/desktop changes detected; desktop version bump is not required."
26+
else
27+
echo "changed=true" >> "$GITHUB_OUTPUT"
28+
echo "apps/desktop changes detected; desktop version bump is required."
29+
fi
30+
1931
- name: Check desktop version bump
32+
if: steps.desktop_changes.outputs.changed == 'true'
2033
run: |
2134
BASE_REF="${{ github.event.pull_request.base.ref }}"
2235
BASE=$(git merge-base "origin/$BASE_REF" HEAD)

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ We welcome contributions! This guide covers everything you need to get started.
77
### Prerequisites
88

99
- **Node.js** 24+ for development, build, and test tooling; Electron's bundled runtime Node version is unchanged.
10-
- **pnpm** 10.32.1 (`corepack enable && corepack prepare pnpm@10.32.1 --activate`)
10+
- **pnpm** 11.3.0 (`corepack enable && corepack prepare pnpm@11.3.0 --activate`)
1111
- **just** command runner (`brew install just`)
1212
- **macOS** (Electron desktop builds target macOS only)
1313

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Electron desktop app for the [ClosedLoop](https://closedloop.ai) platform. Provi
55
## Prerequisites
66

77
- **Node.js** 24+ for development, build, and test tooling; Electron's bundled runtime Node version is unchanged.
8-
- **pnpm** 10.32.1 (`corepack enable && corepack prepare pnpm@10.32.1 --activate`)
8+
- **pnpm** 11.3.0 (`corepack enable && corepack prepare pnpm@11.3.0 --activate`)
99
- **just** command runner (`brew install just`)
1010
- **macOS** or **Linux** (packaging currently macOS-only; Linux runs via `just desktop-dev`)
1111

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "closedloop-electron",
33
"private": true,
4-
"packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be",
4+
"packageManager": "pnpm@11.3.0+sha512.2c403d6594527287672b1f7056343a1f7c3634036a67ffabfcc2b3d7595d843768f8787148d1b57cf7956c90606bbd192857c363af19e96d2d0ec9ec5741d215",
55
"engines": {
66
"node": ">=24"
77
},

pnpm-workspace.yaml

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,18 @@ minimumReleaseAgeExclude:
2525
# file:, link:) introduced via transitive deps — closes the github-ref bypass.
2626
blockExoticSubdeps: true
2727

28-
# pnpm 10 disables postinstall lifecycle scripts by default — also a
29-
# supply-chain mitigation, since malicious packages typically run their
30-
# payload via postinstall. Explicitly allowlist the few packages whose
31-
# postinstall is load-bearing for this Electron app:
32-
# - electron: downloads the platform-specific Electron binary
33-
# - electron-winstaller: builds the Windows installer toolchain
34-
# - esbuild: installs the platform-specific native binary
35-
# Add to this list intentionally, after auditing the package's install script.
36-
onlyBuiltDependencies:
37-
- electron
38-
- electron-winstaller
39-
- esbuild
28+
# pnpm 11 blocks dependency build scripts unless explicitly approved.
29+
# Keep this standalone allowlist limited to audited desktop install scripts.
30+
allowBuilds:
31+
# Transitive telemetry notice script is not required for desktop installs.
32+
'@scarf/scarf': false
33+
# Keep transitive native database addon builds denied unless a reviewed desktop path requires them.
34+
better-sqlite3: false
35+
# Downloads the platform-specific Electron binary.
36+
electron: true
37+
# Builds the Windows installer toolchain.
38+
electron-winstaller: true
39+
# Installs the platform-specific esbuild native binary.
40+
esbuild: true
41+
# Keep transitive image tooling builds denied unless a reviewed desktop path requires them.
42+
sharp: false

0 commit comments

Comments
 (0)