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
3841 - 22
3942 - 23
4043 - 24
44+ - 25
4145 name : Testing Node ${{ matrix.node }} on ${{ matrix.os }}
4246 runs-on : ${{ matrix.os }}
4347 steps :
@@ -51,11 +55,16 @@ jobs:
5155 run : brew install python-setuptools
5256 - if : ${{ !startsWith(matrix.os, 'windows') && !startsWith(matrix.os, 'macos') }}
5357 run : python3 -m pip install setuptools
54- - if : ${{ startsWith(matrix.os, 'ubuntu') }}
58+ - if : ${{ startsWith(matrix.os, 'ubuntu') && matrix.node < 25 }}
5559 run : |
5660 sudo apt update
5761 sudo apt install gcc-10 g++-10 -y
5862 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
5968 - run : npm install --ignore-scripts
6069 - run : npm run build-debug
6170 - run : npm test
7685 - prebuild-alpine-arm
7786 - prebuild-linux-x64
7887 - prebuild-linux-arm
88+ - prebuild-linux-x64-node-modern
7989 - prebuild-linux-x64-electron-modern
90+ - prebuild-linux-arm-node-modern
8091 - prebuild-linux-arm64-electron-modern
8192 steps :
8293 - uses : actions/checkout@v4
@@ -110,13 +121,16 @@ jobs:
110121 - if : ${{ startsWith(matrix.os, 'macos') }}
111122 run : brew install python-setuptools
112123 - run : npm install --ignore-scripts
113- - run : ${{ env.NODE_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 }}
114126 - run : ${{ env.ELECTRON_BUILD_CMD_LEGACY }} -u ${{ secrets.GITHUB_TOKEN }}
115127 - run : ${{ env.ELECTRON_BUILD_CMD_MODERN }} -u ${{ secrets.GITHUB_TOKEN }}
116128 - if : matrix.os == 'windows-2022'
117129 run : |
118- ${{ env.NODE_BUILD_CMD }} --arch ia32 -u ${{ secrets.GITHUB_TOKEN }}
119- ${{ env.NODE_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 }}
120134 ${{ env.ELECTRON_BUILD_CMD_LEGACY }} --arch ia32 -u ${{ secrets.GITHUB_TOKEN }}
121135 ${{ env.ELECTRON_BUILD_CMD_MODERN }} --arch ia32 -u ${{ secrets.GITHUB_TOKEN }}
122136 ${{ env.ELECTRON_BUILD_CMD_LEGACY }} --arch arm64 -u ${{ secrets.GITHUB_TOKEN }}
@@ -131,9 +145,31 @@ jobs:
131145 steps :
132146 - uses : actions/checkout@v4
133147 - run : npm install --ignore-scripts
134- - run : ${{ env.NODE_BUILD_CMD }} -u ${{ secrets.GITHUB_TOKEN }}
148+ - run : ${{ env.NODE_BUILD_CMD_LEGACY }} -u ${{ secrets.GITHUB_TOKEN }}
135149 - run : ${{ env.ELECTRON_BUILD_CMD_LEGACY }} -u ${{ secrets.GITHUB_TOKEN }}
136150
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 }}
172+
137173 prebuild-alpine :
138174 if : ${{ github.event_name == 'release' }}
139175 name : Prebuild on alpine
@@ -144,7 +180,8 @@ jobs:
144180 - uses : actions/checkout@v4
145181 - run : apk add build-base git python3 py3-setuptools --update-cache
146182 - run : npm install --ignore-scripts
147- - 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 }}
148185
149186 prebuild-alpine-arm :
150187 if : ${{ github.event_name == 'release' }}
@@ -165,7 +202,8 @@ jobs:
165202 apk add build-base git python3 py3-setuptools --update-cache && \
166203 cd /tmp/project && \
167204 npm install --ignore-scripts && \
168- ${{ 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 }}"
169207
170208 prebuild-linux-arm :
171209 if : ${{ github.event_name == 'release' }}
@@ -185,19 +223,28 @@ jobs:
185223 docker run --rm -v $(pwd):/tmp/project --entrypoint /bin/sh --platform linux/${{ matrix.arch }} node:20-bullseye -c "\
186224 cd /tmp/project && \
187225 npm install --ignore-scripts && \
188- ${{ env.NODE_BUILD_CMD }} -u ${{ secrets.GITHUB_TOKEN }} && \
226+ ${{ env.NODE_BUILD_CMD_LEGACY }} -u ${{ secrets.GITHUB_TOKEN }} && \
189227 if [ '${{ matrix.arch }}' = 'arm64' ]; then ${{ env.ELECTRON_BUILD_CMD_LEGACY }} --arch arm64 -u ${{ secrets.GITHUB_TOKEN }}; fi"
190228
191- prebuild-linux-x64-electron -modern :
229+ prebuild-linux-arm-node -modern :
192230 if : ${{ github.event_name == 'release' }}
193- name : Prebuild on Linux x64 (Electron 39+)
231+ strategy :
232+ fail-fast : false
233+ matrix :
234+ arch :
235+ - arm/v7
236+ - arm64
237+ name : Prebuild on Linux (${{ matrix.arch }}) (Node 25+)
194238 runs-on : ubuntu-latest
195- container : node:20-bookworm
196239 needs : test
197240 steps :
198241 - uses : actions/checkout@v4
199- - run : npm install --ignore-scripts
200- - run : ${{ env.ELECTRON_BUILD_CMD_MODERN }} -u ${{ secrets.GITHUB_TOKEN }}
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 }}"
201248
202249 prebuild-linux-arm64-electron-modern :
203250 if : ${{ github.event_name == 'release' }}
0 commit comments