1414
1515env :
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
2430jobs :
2531 test :
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
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 }}"
0 commit comments