Skip to content

Commit 7d6c7bc

Browse files
committed
Make: Modernize CI toolchains, pin cibuildwheel
The Python wheel jobs broke because `pip install cibuildwheel` is unpinned and drifted onto 4.x, which removed the `cpython-freethreading` enable group (now a hard parse error) and dropped the experimental CPython 3.13t free-threaded builds entirely. Pin `cibuildwheel~=4.1` so the major version no longer moves under us, drop the now-unbuildable `313t` matrix entries, and keep `314t` (3.14+ free-threading builds with no flag in 4.x). Verified build identifier selection against pyproject.toml with cibuildwheel 4.1. Refresh the rest of the CI toolchains to current best-practice versions, prioritising anything at or near end-of-life: - Node 20 -> 24: Node 20 reached EOL in April 2026; 24 (Krypton) is the active LTS and already used by the publish job. package.json `engines` floor raised 20 -> 22 (oldest still-maintained LTS). - .NET 8 -> 10: .NET 10 is the current LTS (Nov 2025). Test project retargeted net8.0 -> net10.0 and its stale test deps bumped (Test.Sdk 17.3 -> 18.7, xunit 2.4 -> 2.9, runner 2.4 -> 3.1, coverlet 3.1 -> 10.0); C# LangVersion 10 -> 13. Verified: dotnet build + 41/41 tests pass on net10. - Go 1.22 -> 1.25: 1.22 is past the two-release support window. Verified build + module graph on the go 1.26 toolchain. - Android NDK r26 -> r27c (27.2.12479018): r27 is the current LTS line. - Emscripten 3.1.47 -> 6.0.2: the 3.1.x line is long superseded. Verified by running the release WASM build locally; produces valid wasm objects. - Rust edition 2021 -> 2024: stable since Rust 1.85. Verified with a clean cargo check. - Java JUnit 4.13.2 -> JUnit 5 (Jupiter 5.12.2) with useJUnitPlatform(); Spotless 6.25 -> 8.8 (indentWithSpaces was removed, renamed to leadingTabsToSpaces). Assertions reordered to JUnit 5's message-last signature. Verified: gradle spotlessCheck + full test suite pass. - MinGW: unpin the stale 12.2.0 and move to setup-mingw@v3, letting the action install the runner's current MinGW-w64 default. The existing DLL architecture check still guards the output.
1 parent 3713af9 commit 7d6c7bc

10 files changed

Lines changed: 72 additions & 74 deletions

File tree

.github/workflows/prerelease.yml

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ env:
1111
PYTHONUTF8: 1
1212
PYTHONFAULTHANDLER: 1
1313
PYTHON_VERSION: 3.11
14-
DOTNET_VERSION: 8.0.x
15-
NODE_VERSION: 20
14+
DOTNET_VERSION: 10.0.x
15+
NODE_VERSION: 24
1616
JAVA_VERSION: 21
17-
GO_VERSION: "^1.22.0"
18-
ANDROID_NDK_VERSION: 26.3.11579264
17+
GO_VERSION: "^1.25.0"
18+
ANDROID_NDK_VERSION: 27.2.12479018
1919
ANDROID_SDK_VERSION: 21
2020

2121
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
@@ -408,7 +408,7 @@ jobs:
408408
needs: [test_ubuntu_gcc, test_ubuntu_clang]
409409
strategy:
410410
matrix:
411-
python-version: ["310", "311", "312", "313", "313t", "314", "314t"]
411+
python-version: ["310", "311", "312", "313", "314", "314t"]
412412
steps:
413413
- name: Checkout
414414
uses: actions/checkout@v6
@@ -424,7 +424,7 @@ jobs:
424424
max_attempts: 3
425425
retry_wait_seconds: 10
426426
timeout_minutes: 180
427-
command: python -m pip install cibuildwheel
427+
command: python -m pip install "cibuildwheel~=4.1"
428428
- name: Build wheels
429429
uses: nick-fields/retry@v4
430430
with:
@@ -434,7 +434,6 @@ jobs:
434434
command: cibuildwheel --output-dir wheelhouse
435435
env:
436436
CIBW_BUILD: cp${{ matrix.python-version }}-*
437-
CIBW_ENABLE: cpython-freethreading
438437
CIBW_PLATFORM: linux
439438

440439
build_wheels_macos:
@@ -443,7 +442,7 @@ jobs:
443442
needs: [test_macos]
444443
strategy:
445444
matrix:
446-
python-version: ["310", "311", "312", "313", "313t", "314", "314t"]
445+
python-version: ["310", "311", "312", "313", "314", "314t"]
447446
steps:
448447
- name: Checkout
449448
uses: actions/checkout@v6
@@ -457,7 +456,7 @@ jobs:
457456
max_attempts: 3
458457
retry_wait_seconds: 10
459458
timeout_minutes: 180
460-
command: python -m pip install cibuildwheel
459+
command: python -m pip install "cibuildwheel~=4.1"
461460
- name: Build wheels
462461
uses: nick-fields/retry@v4
463462
with:
@@ -467,7 +466,6 @@ jobs:
467466
command: cibuildwheel --output-dir wheelhouse
468467
env:
469468
CIBW_BUILD: cp${{ matrix.python-version }}-*
470-
CIBW_ENABLE: cpython-freethreading
471469
CIBW_PLATFORM: macos
472470

473471
build_wheels_windows:
@@ -476,7 +474,7 @@ jobs:
476474
needs: [test_windows_x86]
477475
strategy:
478476
matrix:
479-
python-version: ["310", "311", "312", "313", "313t", "314", "314t"]
477+
python-version: ["310", "311", "312", "313", "314", "314t"]
480478
steps:
481479
- name: Checkout
482480
uses: actions/checkout@v6
@@ -490,7 +488,7 @@ jobs:
490488
max_attempts: 3
491489
retry_wait_seconds: 10
492490
timeout_minutes: 180
493-
command: python -m pip install cibuildwheel
491+
command: python -m pip install "cibuildwheel~=4.1"
494492
- name: Build wheels
495493
uses: nick-fields/retry@v4
496494
with:
@@ -500,7 +498,6 @@ jobs:
500498
command: cibuildwheel --output-dir wheelhouse
501499
env:
502500
CIBW_BUILD: cp${{ matrix.python-version }}-*
503-
CIBW_ENABLE: cpython-freethreading
504501
CIBW_PLATFORM: windows
505502

506503
test_ubuntu_cross_compilation:

.github/workflows/release.yml

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,13 @@ env:
88
GH_TOKEN: ${{ secrets.SEMANTIC_RELEASE_TOKEN }}
99
PYTHONUTF8: 1
1010
PYTHON_VERSION: 3.11
11-
DOTNET_VERSION: 8.0.x
12-
NODE_VERSION: 20
11+
DOTNET_VERSION: 10.0.x
12+
NODE_VERSION: 24
1313
JAVA_VERSION: 21
14-
GO_VERSION: "^1.22.0"
15-
ANDROID_NDK_VERSION: 26.3.11579264
14+
GO_VERSION: "^1.25.0"
15+
ANDROID_NDK_VERSION: 27.2.12479018
1616
ANDROID_SDK_VERSION: 21
17-
EMSCRIPTEN_VERSION: 3.1.47
18-
MINGW_VERSION: 12.2.0
17+
EMSCRIPTEN_VERSION: 6.0.2
1918

2019
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
2120
permissions:
@@ -195,10 +194,9 @@ jobs:
195194

196195
- name: Setup MinGW
197196
if: matrix.arch != 'arm64'
198-
uses: egor-tensin/setup-mingw@v2
197+
uses: egor-tensin/setup-mingw@v3
199198
with:
200199
platform: ${{ matrix.arch }}
201-
version: ${{ env.MINGW_VERSION }}
202200

203201
- name: Setup MSVC for ARM64
204202
if: matrix.arch == 'arm64'
@@ -750,7 +748,7 @@ jobs:
750748
strategy:
751749
matrix:
752750
os: [ubuntu-24.04, macos-14, windows-2022]
753-
python-version: ["310", "311", "312", "313", "313t", "314", "314t"]
751+
python-version: ["310", "311", "312", "313", "314", "314t"]
754752
steps:
755753
- name: Check out refreshed version
756754
uses: actions/checkout@v6
@@ -767,12 +765,11 @@ jobs:
767765
if: matrix.os == 'ubuntu-24.04' # We only need QEMU for Linux builds
768766
uses: docker/setup-qemu-action@v3
769767
- name: Install cibuildwheel
770-
run: python -m pip install cibuildwheel
768+
run: python -m pip install "cibuildwheel~=4.1"
771769
- name: Build wheels
772770
run: cibuildwheel --output-dir wheelhouse
773771
env:
774772
CIBW_BUILD: cp${{ matrix.python-version }}-*
775-
CIBW_ENABLE: cpython-freethreading # No-GIL 3.13t builds
776773
CIBW_TEST_SKIP: "*-win_arm64" # Too complex to emulate Windows ARM
777774
- name: Upload wheels
778775
uses: actions/upload-artifact@v5

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
authors = ["Ash Vardanian <1983160+ashvardanian@users.noreply.github.com>"]
33
description = "Smaller & Faster Single-File Vector Search Engine from Unum"
44
documentation = "https://unum-cloud.github.io/USearch"
5-
edition = "2021"
5+
edition = "2024"
66
include = [
77
"/rust/**",
88
"/include/**",

build.gradle

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66
id 'cpp'
77
id 'maven-publish'
88
id 'signing'
9-
id 'com.diffplug.spotless' version '6.25.0'
9+
id 'com.diffplug.spotless' version '8.8.0'
1010
}
1111

1212
group = "cloud.unum"
@@ -57,14 +57,15 @@ task javadocJar(type: Jar, dependsOn: javadoc) {
5757
}
5858

5959
dependencies {
60-
testImplementation('junit:junit:4.13.2')
60+
testImplementation('org.junit.jupiter:junit-jupiter:5.12.2')
61+
testRuntimeOnly('org.junit.platform:junit-platform-launcher')
6162
}
6263

6364
spotless {
6465
format 'gradle', {
6566
target '*.gradle'
6667
trimTrailingWhitespace()
67-
indentWithSpaces(4)
68+
leadingTabsToSpaces(4)
6869
endWithNewline()
6970
}
7071

@@ -196,6 +197,7 @@ model {
196197
}
197198

198199
test {
200+
useJUnitPlatform()
199201
forkEvery = 1
200202

201203
dependsOn jar

csharp/Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<Project>
33

44
<PropertyGroup>
5-
<LangVersion>10</LangVersion>
5+
<LangVersion>13</LangVersion>
66
</PropertyGroup>
77

88
<PropertyGroup>

csharp/src/Cloud.Unum.USearch.Tests/Cloud.Unum.USearch.Tests.csproj

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net8.0</TargetFramework>
4+
<TargetFramework>net10.0</TargetFramework>
55
<ImplicitUsings>enable</ImplicitUsings>
66
<IsPackable>false</IsPackable>
77
<Nullable>enable</Nullable>
@@ -10,13 +10,13 @@
1010
</PropertyGroup>
1111

1212
<ItemGroup>
13-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
14-
<PackageReference Include="xunit" Version="2.4.2" />
15-
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
13+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.7.0" />
14+
<PackageReference Include="xunit" Version="2.9.3" />
15+
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
1616
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1717
<PrivateAssets>all</PrivateAssets>
1818
</PackageReference>
19-
<PackageReference Include="coverlet.collector" Version="3.1.2">
19+
<PackageReference Include="coverlet.collector" Version="10.0.1">
2020
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2121
<PrivateAssets>all</PrivateAssets>
2222
</PackageReference>

golang/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module github.com/unum-cloud/usearch/golang
22

3-
go 1.22
3+
go 1.25

0 commit comments

Comments
 (0)