Skip to content

fix(ci): build win32-arm64 on windows-11-vs2026-arm runner#697

Merged
cb1kenobi merged 1 commit into
mainfrom
fix/win32-arm64-vs2026-runner
Jul 9, 2026
Merged

fix(ci): build win32-arm64 on windows-11-vs2026-arm runner#697
cb1kenobi merged 1 commit into
mainfrom
fix/win32-arm64-vs2026-runner

Conversation

@cb1kenobi

Copy link
Copy Markdown
Member

Summary

The v2.4.0 publish failed on win32-arm64 with dozens of LNK2001: unresolved external symbol __std_search_1 / __std_find_trivial_1 / __std_find_last_of_trivial_pos_1 errors (failing run).

Root cause: the rocksdb-prebuilds Windows libraries (v11.1.2, built 2026-06-26) are cross-compiled on windows-latest, which now runs the windows-2025-vs2026 image — VS 2026 / MSVC toolset 14.51. That STL enables ARM64 vector algorithms, so the prebuilt rocksdb.lib objects reference __std_* helper symbols that are defined in the linking toolset's STL support lib. The windows-11-arm runner only ships VS 2022 (17.14 / MSVC 14.44), whose ARM64 STL predates those symbols. win32-x64 kept passing because it links on windows-latest with VS 2026.

Fix: switch the win32-arm64 job to the windows-11-vs2026-arm image (actions/runner-images#14225) so the linker toolset matches the prebuilds, same as x64. One-line runner change plus an explanatory comment.

Things to weigh

  • windows-11-vs2026-arm is marked public preview (GA'd 2026-06-11), so there is a small risk of queue delays while GitHub balances capacity.
  • This fixes CI, but source builds on Windows ARM64 with VS 2022 will still hit the same link error against prebuilds ≥ v11.1.2. The complementary, more durable fix is pinning the rocksdb-prebuilds Windows toolset (e.g. VCPKG_PLATFORM_TOOLSET_VERSION v143) — proposed as a follow-up in rocksdb-prebuilds rather than here.
  • CI on this PR does not exercise the fix — only the Publish workflow builds win32-arm64. Verification happens on the next publish attempt.

Cross-model review skipped: single-line CI runner change, no product code.

Generated by Claude Code (Claude Fable 5).

🤖 Generated with Claude Code

The rocksdb-prebuilds Windows libraries are cross-compiled on
windows-latest, which now runs the windows-2025-vs2026 image (VS 2026,
MSVC toolset 14.51). That toolset's STL enables ARM64 vector algorithms,
so the prebuilt rocksdb.lib objects reference __std_search_1,
__std_find_trivial_1, __std_find_last_of_trivial_pos_1, etc. Those
symbols live in the STL support library of the *linking* toolset, and
the windows-11-arm image only ships VS 2022 (17.14 / MSVC 14.44), whose
ARM64 STL libs predate them — so the publish build failed with LNK2001
unresolved externals. win32-x64 kept working because windows-latest
links with VS 2026.

Switch the win32-arm64 job to the windows-11-vs2026-arm image
(actions/runner-images#14225) so the linker toolset matches the one
that built the prebuilds, same as x64.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@cb1kenobi cb1kenobi requested a review from kriszyp July 9, 2026 15:15
@gemini-code-assist

Copy link
Copy Markdown

Note

Gemini is unable to generate a review for this pull request due to the file types involved not being currently supported.

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

📊 Benchmark Results

get-sync.bench.ts

getSync() > random keys - small key size (100 records)

Implementation Rank Operations/sec Mean (ms) Min (ms) Max (ms) RME (%) Samples
🥇 lmdb 1 24.54K ops/sec 40.75 39.45 575.159 0.117 122,690
🥈 rocksdb 2 11.78K ops/sec 84.92 80.74 4,832.563 0.194 58,881

getSync() > sequential keys - small key size (100 records)

Implementation Rank Operations/sec Mean (ms) Min (ms) Max (ms) RME (%) Samples
🥇 lmdb 1 28.77K ops/sec 34.76 33.72 587.28 0.099 143,851
🥈 rocksdb 2 12.18K ops/sec 82.10 79.17 2,820.422 0.118 60,901

ranges.bench.ts

getRange() > small range (100 records, 50 range)

Implementation Rank Operations/sec Mean (ms) Min (ms) Max (ms) RME (%) Samples
🥇 lmdb 1 24.90K ops/sec 40.16 36.10 3,810.035 0.310 124,513
🥈 rocksdb 2 17.27K ops/sec 57.89 51.76 1,999.345 0.143 86,370

realistic-load.bench.ts

Realistic write load with workers > write variable records with transaction log

Implementation Rank Operations/sec Mean (ms) Min (ms) Max (ms) RME (%) Samples
🥇 rocksdb 1 475.31 ops/sec 2,103.89 255.276 43,581.374 13.82 951
🥈 lmdb 2 26.95 ops/sec 37,108.59 426.493 1,159,395.721 136.402 64.00

transaction-log.bench.ts

Transaction log > read 100 iterators while write log with 100 byte records

Implementation Rank Operations/sec Mean (ms) Min (ms) Max (ms) RME (%) Samples
🥇 rocksdb 1 35.69K ops/sec 28.02 13.64 14,136.028 0.595 178,442
🥈 lmdb 2 438.23 ops/sec 2,281.893 138.247 24,630.432 1.47 2,192

Transaction log > read one entry from random position from log with 1000 100 byte records

Implementation Rank Operations/sec Mean (ms) Min (ms) Max (ms) RME (%) Samples
🥇 rocksdb 1 735.08K ops/sec 1.36 1.17 488.706 0.066 3,675,386
🥈 lmdb 2 455.46K ops/sec 2.20 1.17 747.56 0.267 2,277,495

worker-put-sync.bench.ts

putSync() > random keys - small key size (100 records, 10 workers)

Implementation Rank Operations/sec Mean (ms) Min (ms) Max (ms) RME (%) Samples
🥇 rocksdb 1 834.91 ops/sec 1,197.737 1,030.163 1,892.412 0.318 1,670
🥈 lmdb 2 1.14 ops/sec 876,773.611 819,079.348 902,619.248 2.27 10.00

worker-transaction-log.bench.ts

Transaction log with workers > write log with 100 byte records

Implementation Rank Operations/sec Mean (ms) Min (ms) Max (ms) RME (%) Samples
🥇 rocksdb 1 21.32K ops/sec 46.90 30.81 495.646 0.517 42,648
🥈 lmdb 2 808.30 ops/sec 1,237.159 44.61 12,356.409 5.41 1,617

Results from commit 916e958

@cb1kenobi cb1kenobi marked this pull request as ready for review July 9, 2026 15:20

@kriszyp kriszyp left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CI runner fix for the win32-arm64 build — the comment explaining the VS2022-vs-VS2026 ARM64 STL/linker mismatch is clear and checks out. LGTM.

— KrAIs

@cb1kenobi cb1kenobi merged commit af934ed into main Jul 9, 2026
23 checks passed
@cb1kenobi cb1kenobi deleted the fix/win32-arm64-vs2026-runner branch July 9, 2026 19:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants