Skip to content

Commit 24f5fd0

Browse files
ci: upgrade all workflows to Node 22, skip Electron binary download where not needed, cache electron binary in e2e job (#149)
Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent b1121f3 commit 24f5fd0

4 files changed

Lines changed: 48 additions & 14 deletions

File tree

.github/workflows/ci.yml

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,15 @@ permissions:
1414
jobs:
1515
build:
1616
runs-on: ubuntu-latest
17+
env:
18+
ELECTRON_SKIP_BINARY_DOWNLOAD: '1'
1719
steps:
1820
- uses: actions/checkout@v4
1921

2022
- uses: actions/setup-node@v4
2123
with:
22-
node-version: '20'
24+
node-version: '22'
25+
cache: 'npm'
2326

2427
- name: Install system dependencies
2528
run: sudo apt-get update && sudo apt-get install -y python3 make g++
@@ -105,7 +108,16 @@ jobs:
105108

106109
- uses: actions/setup-node@v4
107110
with:
108-
node-version: '20'
111+
node-version: '22'
112+
cache: 'npm'
113+
114+
- name: Cache Electron binary
115+
uses: actions/cache@v4
116+
with:
117+
path: ~/.cache/electron
118+
key: electron-linux-${{ hashFiles('**/package-lock.json') }}
119+
restore-keys: |
120+
electron-linux-
109121
110122
- name: Install system dependencies
111123
run: sudo apt-get update && sudo apt-get install -y python3 make g++ xvfb
@@ -143,12 +155,15 @@ jobs:
143155
name: Windows Build Verification
144156
runs-on: windows-latest
145157
needs: build
158+
env:
159+
ELECTRON_SKIP_BINARY_DOWNLOAD: '1'
146160
steps:
147161
- uses: actions/checkout@v4
148162

149163
- uses: actions/setup-node@v4
150164
with:
151-
node-version: '20'
165+
node-version: '22'
166+
cache: 'npm'
152167

153168
- name: Install npm dependencies
154169
run: npm ci

.github/workflows/release.yml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ jobs:
9898

9999
- uses: actions/setup-node@v4
100100
with:
101-
node-version: '20'
101+
node-version: '22'
102+
cache: 'npm'
102103

103104
- name: Install npm dependencies
104105
run: npm ci
@@ -131,7 +132,8 @@ jobs:
131132

132133
- uses: actions/setup-node@v4
133134
with:
134-
node-version: '20'
135+
node-version: '22'
136+
cache: 'npm'
135137

136138
- name: Install npm dependencies
137139
run: npm ci
@@ -167,12 +169,14 @@ jobs:
167169
APPLE_ID: ${{ secrets.APPLE_ID }}
168170
APPLE_APP_PASSWORD: ${{ secrets.APPLE_APP_PASSWORD }}
169171
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
172+
ELECTRON_SKIP_BINARY_DOWNLOAD: '1'
170173
steps:
171174
- uses: actions/checkout@v4
172175

173176
- uses: actions/setup-node@v4
174177
with:
175-
node-version: '20'
178+
node-version: '22'
179+
cache: 'npm'
176180

177181
- name: Install npm dependencies
178182
run: npm ci

.github/workflows/security.yml

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ jobs:
2222

2323
- uses: actions/setup-node@v4
2424
with:
25-
node-version: '20'
25+
node-version: '22'
26+
cache: 'npm'
2627

2728
- run: npm ci --ignore-scripts
2829

@@ -44,7 +45,8 @@ jobs:
4445

4546
- uses: actions/setup-node@v4
4647
with:
47-
node-version: '20'
48+
node-version: '22'
49+
cache: 'npm'
4850

4951
- run: npm ci --ignore-scripts
5052

@@ -64,7 +66,8 @@ jobs:
6466

6567
- uses: actions/setup-node@v4
6668
with:
67-
node-version: '20'
69+
node-version: '22'
70+
cache: 'npm'
6871

6972
- run: npm ci --ignore-scripts
7073

@@ -74,12 +77,15 @@ jobs:
7477
test-security:
7578
name: Security Tests
7679
runs-on: ubuntu-latest
80+
env:
81+
ELECTRON_SKIP_BINARY_DOWNLOAD: '1'
7782
steps:
7883
- uses: actions/checkout@v4
7984

8085
- uses: actions/setup-node@v4
8186
with:
82-
node-version: '20'
87+
node-version: '22'
88+
cache: 'npm'
8389

8490
- name: Install system dependencies
8591
run: sudo apt-get update && sudo apt-get install -y python3 make g++
@@ -101,17 +107,20 @@ jobs:
101107
load-test:
102108
name: Performance Load Test
103109
runs-on: ubuntu-latest
110+
env:
111+
ELECTRON_SKIP_BINARY_DOWNLOAD: '1'
104112
steps:
105113
- uses: actions/checkout@v4
106114

107115
- uses: actions/setup-node@v4
108116
with:
109-
node-version: '20'
117+
node-version: '22'
118+
cache: 'npm'
110119

111120
- name: Install system dependencies
112121
run: sudo apt-get update && sudo apt-get install -y python3 make g++
113122

114-
- run: npm install
123+
- run: npm ci
115124

116125
- name: Rebuild native modules
117126
run: npm rebuild better-sqlite3-multiple-ciphers
@@ -127,7 +136,8 @@ jobs:
127136

128137
- uses: actions/setup-node@v4
129138
with:
130-
node-version: '20'
139+
node-version: '22'
140+
cache: 'npm'
131141

132142
- name: Verify lockfile is committed
133143
run: |

electron/database/init.cjs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,12 @@ const Database = require('better-sqlite3-multiple-ciphers');
2020
const path = require('path');
2121
const fs = require('fs');
2222
const crypto = require('crypto');
23-
const { app, safeStorage } = require('electron');
23+
// Guarded require: electron is only available inside the Electron main process.
24+
// Unit tests (plain Node) load this module without launching Electron, so we
25+
// fall back to undefined. All code paths that use app/safeStorage are inside
26+
// function bodies that are never called during unit tests.
27+
let app, safeStorage;
28+
try { ({ app, safeStorage } = require('electron')); } catch { /* plain Node / CI */ }
2429
const { createSchema, createIndexes, createAuditLogTriggers, addOrgIdToExistingTables } = require('./schema.cjs');
2530
const { runMigrations } = require('./migrations.cjs');
2631

0 commit comments

Comments
 (0)