Skip to content

Commit 4df8c50

Browse files
authored
Add support for Node v25 and Electron 39+ prebuilds (#1422)
* chore(build): Add support for Electron 39+ builds in CI workflow by running those prebuilds with bookworm (and keeping the older prebuilds on bullseye). Fixes #1421 * chore(build): add support for node 25 (see #1412)
1 parent 656ca23 commit 4df8c50

File tree

2 files changed

+97
-17
lines changed

2 files changed

+97
-17
lines changed

.github/workflows/build.yml

Lines changed: 96 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,18 @@ on:
1414

1515
env:
1616
# See https://github.com/nodejs/release#release-schedule
17-
# Node.js v20 EOL = 2026-04-30. v22 EOL = 2027-04-30. v23 EOL = 2025-06-01. v24 EOL = 2028-04-30.
18-
NODE_BUILD_CMD: npx --no-install prebuild -r node -t 20.0.0 -t 22.0.0 -t 23.0.0 -t 24.0.0 --include-regex 'better_sqlite3.node$'
17+
# Node.js v20 EOL = 2026-04-30. v22 EOL = 2027-04-30. v23 EOL = 2025-06-01. v24 EOL = 2028-04-30. v25 EOL = 2026-06-01.
18+
# Node.js 20-24 can build with GCC 10 (bullseye)
19+
NODE_BUILD_CMD_LEGACY: npx --no-install prebuild -r node -t 20.0.0 -t 22.0.0 -t 23.0.0 -t 24.0.0 --include-regex 'better_sqlite3.node$'
20+
# Node.js 25+ requires GCC 11+ for <source_location> header (bookworm)
21+
NODE_BUILD_CMD_MODERN: npx --no-install prebuild -r node -t 25.0.0 --include-regex 'better_sqlite3.node$'
1922

2023
# See https://www.electronjs.org/docs/latest/tutorial/electron-timelines#version-support-policy
2124
# Electron v29 EOL = 2024-08-20. v30 EOL = 2024-10-15. v31 EOL = 2025-01-14. v32 EOL = 2025-03-11. v33 EOL = 2025-05-13. v34 EOL = 2025-06-24. v35 EOL = 2025-09-02. v36 EOL = 2025-10-28. v37 EOL = 2026-01-13. v38 EOL = 2026-03-10. v39 EOL = 2026-05-05
22-
ELECTRON_BUILD_CMD: npx --no-install prebuild -r electron -t 29.0.0 -t 30.0.0 -t 31.0.0 -t 32.0.0 -t 33.0.0 -t 34.0.0 -t 35.0.0 -t 36.0.0 -t 37.0.0 -t 38.0.0 -t 39.0.0 --include-regex 'better_sqlite3.node$'
25+
# Electron 29-38 can build with GCC 10 (bullseye)
26+
ELECTRON_BUILD_CMD_LEGACY: npx --no-install prebuild -r electron -t 29.0.0 -t 30.0.0 -t 31.0.0 -t 32.0.0 -t 33.0.0 -t 34.0.0 -t 35.0.0 -t 36.0.0 -t 37.0.0 -t 38.0.0 --include-regex 'better_sqlite3.node$'
27+
# Electron 39+ requires GCC 11+ for <source_location> header (bookworm)
28+
ELECTRON_BUILD_CMD_MODERN: npx --no-install prebuild -r electron -t 39.0.0 --include-regex 'better_sqlite3.node$'
2329

2430
jobs:
2531
test:
@@ -35,6 +41,7 @@ jobs:
3541
- 22
3642
- 23
3743
- 24
44+
- 25
3845
name: Testing Node ${{ matrix.node }} on ${{ matrix.os }}
3946
runs-on: ${{ matrix.os }}
4047
steps:
@@ -48,11 +55,16 @@ jobs:
4855
run: brew install python-setuptools
4956
- if: ${{ !startsWith(matrix.os, 'windows') && !startsWith(matrix.os, 'macos') }}
5057
run: python3 -m pip install setuptools
51-
- if: ${{ startsWith(matrix.os, 'ubuntu') }}
58+
- if: ${{ startsWith(matrix.os, 'ubuntu') && matrix.node < 25 }}
5259
run: |
5360
sudo apt update
5461
sudo apt install gcc-10 g++-10 -y
5562
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10 --slave /usr/bin/gcov gcov /usr/bin/gcov-10
63+
- if: ${{ startsWith(matrix.os, 'ubuntu') && matrix.node >= 25 }}
64+
run: |
65+
sudo apt update
66+
sudo apt install gcc-11 g++-11 -y
67+
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100 --slave /usr/bin/g++ g++ /usr/bin/g++-11 --slave /usr/bin/gcov gcov /usr/bin/gcov-11
5668
- run: npm install --ignore-scripts
5769
- run: npm run build-debug
5870
- run: npm test
@@ -73,6 +85,10 @@ jobs:
7385
- prebuild-alpine-arm
7486
- prebuild-linux-x64
7587
- prebuild-linux-arm
88+
- prebuild-linux-x64-node-modern
89+
- prebuild-linux-x64-electron-modern
90+
- prebuild-linux-arm-node-modern
91+
- prebuild-linux-arm64-electron-modern
7692
steps:
7793
- uses: actions/checkout@v4
7894
- uses: actions/setup-node@v4
@@ -105,14 +121,20 @@ jobs:
105121
- if: ${{ startsWith(matrix.os, 'macos') }}
106122
run: brew install python-setuptools
107123
- run: npm install --ignore-scripts
108-
- run: ${{ env.NODE_BUILD_CMD }} -u ${{ secrets.GITHUB_TOKEN }}
109-
- run: ${{ env.ELECTRON_BUILD_CMD }} -u ${{ secrets.GITHUB_TOKEN }}
124+
- run: ${{ env.NODE_BUILD_CMD_LEGACY }} -u ${{ secrets.GITHUB_TOKEN }}
125+
- run: ${{ env.NODE_BUILD_CMD_MODERN }} -u ${{ secrets.GITHUB_TOKEN }}
126+
- run: ${{ env.ELECTRON_BUILD_CMD_LEGACY }} -u ${{ secrets.GITHUB_TOKEN }}
127+
- run: ${{ env.ELECTRON_BUILD_CMD_MODERN }} -u ${{ secrets.GITHUB_TOKEN }}
110128
- if: matrix.os == 'windows-2022'
111129
run: |
112-
${{ env.NODE_BUILD_CMD }} --arch ia32 -u ${{ secrets.GITHUB_TOKEN }}
113-
${{ env.NODE_BUILD_CMD }} --arch arm64 -u ${{ secrets.GITHUB_TOKEN }}
114-
${{ env.ELECTRON_BUILD_CMD }} --arch ia32 -u ${{ secrets.GITHUB_TOKEN }}
115-
${{ env.ELECTRON_BUILD_CMD }} --arch arm64 -u ${{ secrets.GITHUB_TOKEN }}
130+
${{ env.NODE_BUILD_CMD_LEGACY }} --arch ia32 -u ${{ secrets.GITHUB_TOKEN }}
131+
${{ env.NODE_BUILD_CMD_MODERN }} --arch ia32 -u ${{ secrets.GITHUB_TOKEN }}
132+
${{ env.NODE_BUILD_CMD_LEGACY }} --arch arm64 -u ${{ secrets.GITHUB_TOKEN }}
133+
${{ env.NODE_BUILD_CMD_MODERN }} --arch arm64 -u ${{ secrets.GITHUB_TOKEN }}
134+
${{ env.ELECTRON_BUILD_CMD_LEGACY }} --arch ia32 -u ${{ secrets.GITHUB_TOKEN }}
135+
${{ env.ELECTRON_BUILD_CMD_MODERN }} --arch ia32 -u ${{ secrets.GITHUB_TOKEN }}
136+
${{ env.ELECTRON_BUILD_CMD_LEGACY }} --arch arm64 -u ${{ secrets.GITHUB_TOKEN }}
137+
${{ env.ELECTRON_BUILD_CMD_MODERN }} --arch arm64 -u ${{ secrets.GITHUB_TOKEN }}
116138
117139
prebuild-linux-x64:
118140
if: ${{ github.event_name == 'release' }}
@@ -123,8 +145,30 @@ jobs:
123145
steps:
124146
- uses: actions/checkout@v4
125147
- run: npm install --ignore-scripts
126-
- run: ${{ env.NODE_BUILD_CMD }} -u ${{ secrets.GITHUB_TOKEN }}
127-
- run: ${{ env.ELECTRON_BUILD_CMD }} -u ${{ secrets.GITHUB_TOKEN }}
148+
- run: ${{ env.NODE_BUILD_CMD_LEGACY }} -u ${{ secrets.GITHUB_TOKEN }}
149+
- run: ${{ env.ELECTRON_BUILD_CMD_LEGACY }} -u ${{ secrets.GITHUB_TOKEN }}
150+
151+
prebuild-linux-x64-node-modern:
152+
if: ${{ github.event_name == 'release' }}
153+
name: Prebuild on Linux x64 (Node 25+)
154+
runs-on: ubuntu-latest
155+
container: node:20-bookworm
156+
needs: test
157+
steps:
158+
- uses: actions/checkout@v4
159+
- run: npm install --ignore-scripts
160+
- run: ${{ env.NODE_BUILD_CMD_MODERN }} -u ${{ secrets.GITHUB_TOKEN }}
161+
162+
prebuild-linux-x64-electron-modern:
163+
if: ${{ github.event_name == 'release' }}
164+
name: Prebuild on Linux x64 (Electron 39+)
165+
runs-on: ubuntu-latest
166+
container: node:20-bookworm
167+
needs: test
168+
steps:
169+
- uses: actions/checkout@v4
170+
- run: npm install --ignore-scripts
171+
- run: ${{ env.ELECTRON_BUILD_CMD_MODERN }} -u ${{ secrets.GITHUB_TOKEN }}
128172

129173
prebuild-alpine:
130174
if: ${{ github.event_name == 'release' }}
@@ -136,7 +180,8 @@ jobs:
136180
- uses: actions/checkout@v4
137181
- run: apk add build-base git python3 py3-setuptools --update-cache
138182
- run: npm install --ignore-scripts
139-
- run: ${{ env.NODE_BUILD_CMD }} -u ${{ secrets.GITHUB_TOKEN }}
183+
- run: ${{ env.NODE_BUILD_CMD_LEGACY }} -u ${{ secrets.GITHUB_TOKEN }}
184+
- run: ${{ env.NODE_BUILD_CMD_MODERN }} -u ${{ secrets.GITHUB_TOKEN }}
140185

141186
prebuild-alpine-arm:
142187
if: ${{ github.event_name == 'release' }}
@@ -157,7 +202,8 @@ jobs:
157202
apk add build-base git python3 py3-setuptools --update-cache && \
158203
cd /tmp/project && \
159204
npm install --ignore-scripts && \
160-
${{ env.NODE_BUILD_CMD }} -u ${{ secrets.GITHUB_TOKEN }}"
205+
${{ env.NODE_BUILD_CMD_LEGACY }} -u ${{ secrets.GITHUB_TOKEN }} && \
206+
${{ env.NODE_BUILD_CMD_MODERN }} -u ${{ secrets.GITHUB_TOKEN }}"
161207
162208
prebuild-linux-arm:
163209
if: ${{ github.event_name == 'release' }}
@@ -177,5 +223,39 @@ jobs:
177223
docker run --rm -v $(pwd):/tmp/project --entrypoint /bin/sh --platform linux/${{ matrix.arch }} node:20-bullseye -c "\
178224
cd /tmp/project && \
179225
npm install --ignore-scripts && \
180-
${{ env.NODE_BUILD_CMD }} -u ${{ secrets.GITHUB_TOKEN }} && \
181-
if [ '${{ matrix.arch }}' = 'arm64' ]; then ${{ env.ELECTRON_BUILD_CMD }} --arch arm64 -u ${{ secrets.GITHUB_TOKEN }}; fi"
226+
${{ env.NODE_BUILD_CMD_LEGACY }} -u ${{ secrets.GITHUB_TOKEN }} && \
227+
if [ '${{ matrix.arch }}' = 'arm64' ]; then ${{ env.ELECTRON_BUILD_CMD_LEGACY }} --arch arm64 -u ${{ secrets.GITHUB_TOKEN }}; fi"
228+
229+
prebuild-linux-arm-node-modern:
230+
if: ${{ github.event_name == 'release' }}
231+
strategy:
232+
fail-fast: false
233+
matrix:
234+
arch:
235+
- arm/v7
236+
- arm64
237+
name: Prebuild on Linux (${{ matrix.arch }}) (Node 25+)
238+
runs-on: ubuntu-latest
239+
needs: test
240+
steps:
241+
- uses: actions/checkout@v4
242+
- uses: docker/setup-qemu-action@v3
243+
- run: |
244+
docker run --rm -v $(pwd):/tmp/project --entrypoint /bin/sh --platform linux/${{ matrix.arch }} node:20-bookworm -c "\
245+
cd /tmp/project && \
246+
npm install --ignore-scripts && \
247+
${{ env.NODE_BUILD_CMD_MODERN }} -u ${{ secrets.GITHUB_TOKEN }}"
248+
249+
prebuild-linux-arm64-electron-modern:
250+
if: ${{ github.event_name == 'release' }}
251+
name: Prebuild on Linux arm64 (Electron 39+)
252+
runs-on: ubuntu-latest
253+
needs: test
254+
steps:
255+
- uses: actions/checkout@v4
256+
- uses: docker/setup-qemu-action@v3
257+
- run: |
258+
docker run --rm -v $(pwd):/tmp/project --entrypoint /bin/sh --platform linux/arm64 node:20-bookworm -c "\
259+
cd /tmp/project && \
260+
npm install --ignore-scripts && \
261+
${{ env.ELECTRON_BUILD_CMD_MODERN }} --arch arm64 -u ${{ secrets.GITHUB_TOKEN }}"

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"deps/**"
1717
],
1818
"engines": {
19-
"node": "20.x || 22.x || 23.x || 24.x"
19+
"node": "20.x || 22.x || 23.x || 24.x || 25.x"
2020
},
2121
"dependencies": {
2222
"bindings": "^1.5.0",

0 commit comments

Comments
 (0)