diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f93963f..68df492 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,8 +14,11 @@ on: env: # See https://github.com/nodejs/release#release-schedule - # Node.js v20 EOL = 2026-04-30. v22 EOL = 2027-04-30. v23 EOL = 2025-06-01. v24 EOL = 2028-04-30. - 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 '_sqlite3' + # 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. + # Node.js 20-24 can build with GCC 10 (bullseye) + 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 '_sqlite3' + # Node.js 25+ requires GCC 11+ for header (bookworm) + NODE_BUILD_CMD_MODERN: npx --no-install prebuild -r node -t 25.0.0 --include-regex '_sqlite3' jobs: test: @@ -23,14 +26,15 @@ jobs: matrix: os: - ubuntu-22.04 - - macos-13 - - macos-14 + - macos-15 + - macos-15-intel - windows-2022 node: - 20 - 22 - 23 - 24 + - 25 name: Testing Node ${{ matrix.node }} on ${{ matrix.os }} runs-on: ${{ matrix.os }} steps: @@ -44,11 +48,16 @@ jobs: run: brew install python-setuptools - if: ${{ !startsWith(matrix.os, 'windows') && !startsWith(matrix.os, 'macos') }} run: python3 -m pip install setuptools - - if: ${{ startsWith(matrix.os, 'ubuntu') }} + - if: ${{ startsWith(matrix.os, 'ubuntu') && matrix.node < 25 }} run: | sudo apt update sudo apt install -y gcc-10 g++-10 libreadline-dev libncurses5-dev 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 + - if: ${{ startsWith(matrix.os, 'ubuntu') && matrix.node >= 25 }} + run: | + sudo apt update + sudo apt install -y gcc-10 g++-10 libreadline-dev libncurses5-dev + 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 - run: npm install --ignore-scripts - run: npm run build-debug - run: npm test @@ -58,10 +67,10 @@ jobs: matrix: os: - ubuntu-22.04 - - macos-13 - - macos-14 + - macos-15 + - macos-15-intel bun: - - 1.2.23 + - 1.3.5 name: Testing Bun ${{ matrix.bun }} on ${{ matrix.os }} runs-on: ${{ matrix.os }} steps: @@ -92,6 +101,8 @@ jobs: - prebuild-alpine-arm - prebuild-linux-x64 - prebuild-linux-arm + - prebuild-linux-x64-node-modern + - prebuild-linux-arm-node-modern steps: - uses: actions/checkout@v5 - uses: actions/setup-node@v5 @@ -108,8 +119,8 @@ jobs: fail-fast: false matrix: os: - - macos-13 - - macos-14 + - macos-15 + - macos-15-intel - windows-2022 name: Prebuild on ${{ matrix.os }} runs-on: ${{ matrix.os }} @@ -124,11 +135,14 @@ jobs: - if: ${{ startsWith(matrix.os, 'macos') }} run: brew install python-setuptools - run: npm install --ignore-scripts - - run: ${{ env.NODE_BUILD_CMD }} -u ${{ secrets.GITHUB_TOKEN }} + - run: ${{ env.NODE_BUILD_CMD_LEGACY }} -u ${{ secrets.GITHUB_TOKEN }} + - run: ${{ env.NODE_BUILD_CMD_MODERN }} -u ${{ secrets.GITHUB_TOKEN }} - if: matrix.os == 'windows-2022' run: | - ${{ env.NODE_BUILD_CMD }} --arch ia32 -u ${{ secrets.GITHUB_TOKEN }} - ${{ env.NODE_BUILD_CMD }} --arch arm64 -u ${{ secrets.GITHUB_TOKEN }} + ${{ env.NODE_BUILD_CMD_LEGACY }} --arch ia32 -u ${{ secrets.GITHUB_TOKEN }} + ${{ env.NODE_BUILD_CMD_MODERN }} --arch ia32 -u ${{ secrets.GITHUB_TOKEN }} + ${{ env.NODE_BUILD_CMD_LEGACY }} --arch arm64 -u ${{ secrets.GITHUB_TOKEN }} + ${{ env.NODE_BUILD_CMD_MODERN }} --arch arm64 -u ${{ secrets.GITHUB_TOKEN }} prebuild-linux-x64: if: ${{ github.event_name == 'release' }} @@ -139,7 +153,18 @@ jobs: steps: - uses: actions/checkout@v5 - run: npm install --ignore-scripts - - run: ${{ env.NODE_BUILD_CMD }} -u ${{ secrets.GITHUB_TOKEN }} + - run: ${{ env.NODE_BUILD_CMD_LEGACY }} -u ${{ secrets.GITHUB_TOKEN }} + + prebuild-linux-x64-node-modern: + if: ${{ github.event_name == 'release' }} + name: Prebuild on Linux x64 (Node 25+) + runs-on: ubuntu-latest + container: node:20-bookworm + needs: test + steps: + - uses: actions/checkout@v5 + - run: npm install --ignore-scripts + - run: ${{ env.NODE_BUILD_CMD_MODERN }} -u ${{ secrets.GITHUB_TOKEN }} prebuild-alpine: if: ${{ github.event_name == 'release' }} @@ -151,7 +176,8 @@ jobs: - uses: actions/checkout@v5 - run: apk add build-base git python3 py3-setuptools libstdc++ readline-dev ncurses-dev --update-cache - run: npm install --ignore-scripts - - run: ${{ env.NODE_BUILD_CMD }} -u ${{ secrets.GITHUB_TOKEN }} + - run: ${{ env.NODE_BUILD_CMD_LEGACY }} -u ${{ secrets.GITHUB_TOKEN }} + - run: ${{ env.NODE_BUILD_CMD_MODERN }} -u ${{ secrets.GITHUB_TOKEN }} prebuild-alpine-arm: if: ${{ github.event_name == 'release' }} @@ -172,7 +198,8 @@ jobs: apk add build-base git python3 py3-setuptools libstdc++ readline-dev ncurses-dev --update-cache && \ cd /tmp/project && \ npm install --ignore-scripts && \ - ${{ env.NODE_BUILD_CMD }} -u ${{ secrets.GITHUB_TOKEN }}" + ${{ env.NODE_BUILD_CMD_LEGACY }} -u ${{ secrets.GITHUB_TOKEN }} && \ + ${{ env.NODE_BUILD_CMD_MODERN }} -u ${{ secrets.GITHUB_TOKEN }}" prebuild-linux-arm: if: ${{ github.event_name == 'release' }} @@ -192,4 +219,24 @@ jobs: docker run --rm -v $(pwd):/tmp/project --entrypoint /bin/sh --platform linux/${{ matrix.arch }} node:20-bullseye -c "\ cd /tmp/project && \ npm install --ignore-scripts && \ - ${{ env.NODE_BUILD_CMD }} -u ${{ secrets.GITHUB_TOKEN }}" + ${{ env.NODE_BUILD_CMD_LEGACY }} -u ${{ secrets.GITHUB_TOKEN }}" + + prebuild-linux-arm-node-modern: + if: ${{ github.event_name == 'release' }} + strategy: + fail-fast: false + matrix: + arch: + - arm/v7 + - arm64 + name: Prebuild on Linux (${{ matrix.arch }}) (Node 25+) + runs-on: ubuntu-latest + needs: test + steps: + - uses: actions/checkout@v5 + - uses: docker/setup-qemu-action@v3 + - run: | + docker run --rm -v $(pwd):/tmp/project --entrypoint /bin/sh --platform linux/${{ matrix.arch }} node:20-bookworm -c "\ + cd /tmp/project && \ + npm install --ignore-scripts && \ + ${{ env.NODE_BUILD_CMD_MODERN }} -u ${{ secrets.GITHUB_TOKEN }}"