From e5bf4fe9f9c3c9a5504791f6510fb6a93d7acdd8 Mon Sep 17 00:00:00 2001 From: Philip Moore Date: Wed, 29 Jul 2026 21:33:00 -0400 Subject: [PATCH 1/3] feat(javascript): publish a win32-arm64 native package Adds an aarch64-pc-windows-msvc build of the Node.js driver manager, built natively on GitHub-hosted windows-11-arm runners with the standard MSVC toolchain (aarch64-pc-windows-msvc is a Tier 1 Rust target as of Rust 1.91). This publishes @apache-arrow/adbc-driver-manager-win32-arm64-msvc so applications using the driver manager can run natively on Windows-on-ARM. Fixes #4629. Co-Authored-By: Claude Fable 5 --- .github/workflows/javascript.yml | 4 ++++ .github/workflows/packaging.yml | 2 ++ javascript/.cargo/config.toml | 3 +++ javascript/npm/win32-arm64-msvc/README.md | 22 ++++++++++++++++++ javascript/npm/win32-arm64-msvc/package.json | 24 ++++++++++++++++++++ javascript/package-lock.json | 1 + javascript/package.json | 2 ++ 7 files changed, 58 insertions(+) create mode 100644 javascript/npm/win32-arm64-msvc/README.md create mode 100644 javascript/npm/win32-arm64-msvc/package.json diff --git a/.github/workflows/javascript.yml b/.github/workflows/javascript.yml index c0519a07c9..14a364655e 100644 --- a/.github/workflows/javascript.yml +++ b/.github/workflows/javascript.yml @@ -91,6 +91,8 @@ jobs: target: aarch64-apple-darwin - host: windows-latest target: x86_64-pc-windows-msvc + - host: windows-11-arm + target: aarch64-pc-windows-msvc - host: ubuntu-latest target: x86_64-unknown-linux-gnu - host: ubuntu-24.04-arm @@ -149,6 +151,8 @@ jobs: target: aarch64-apple-darwin - host: windows-latest target: x86_64-pc-windows-msvc + - host: windows-11-arm + target: aarch64-pc-windows-msvc steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: diff --git a/.github/workflows/packaging.yml b/.github/workflows/packaging.yml index 77a8763711..0a3c11685c 100644 --- a/.github/workflows/packaging.yml +++ b/.github/workflows/packaging.yml @@ -1124,6 +1124,8 @@ jobs: target: aarch64-apple-darwin - host: windows-latest target: x86_64-pc-windows-msvc + - host: windows-11-arm + target: aarch64-pc-windows-msvc - host: ubuntu-latest target: x86_64-unknown-linux-gnu - host: ubuntu-24.04-arm diff --git a/javascript/.cargo/config.toml b/javascript/.cargo/config.toml index 60aafc2cce..f86e2115f6 100644 --- a/javascript/.cargo/config.toml +++ b/javascript/.cargo/config.toml @@ -17,3 +17,6 @@ [target.x86_64-pc-windows-msvc] rustflags = ["-C", "target-feature=+crt-static"] + +[target.aarch64-pc-windows-msvc] +rustflags = ["-C", "target-feature=+crt-static"] diff --git a/javascript/npm/win32-arm64-msvc/README.md b/javascript/npm/win32-arm64-msvc/README.md new file mode 100644 index 0000000000..598b0018cf --- /dev/null +++ b/javascript/npm/win32-arm64-msvc/README.md @@ -0,0 +1,22 @@ + + +# `adbc-driver-manager-win32-arm64-msvc` + +This is the **aarch64-pc-windows-msvc** binary for `adbc-driver-manager` diff --git a/javascript/npm/win32-arm64-msvc/package.json b/javascript/npm/win32-arm64-msvc/package.json new file mode 100644 index 0000000000..c25cd61707 --- /dev/null +++ b/javascript/npm/win32-arm64-msvc/package.json @@ -0,0 +1,24 @@ +{ + "name": "@apache-arrow/adbc-driver-manager-win32-arm64-msvc", + "version": "0.25.0", + "cpu": [ + "arm64" + ], + "main": "adbc-driver-manager.win32-arm64-msvc.node", + "files": [ + "adbc-driver-manager.win32-arm64-msvc.node" + ], + "description": "Node.js ADBC Driver Manager", + "license": "Apache-2.0", + "engines": { + "node": ">=22.0.0" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/apache/arrow-adbc.git", + "directory": "javascript" + }, + "os": [ + "win32" + ] +} diff --git a/javascript/package-lock.json b/javascript/package-lock.json index 2f0a2f307d..2083982c9d 100644 --- a/javascript/package-lock.json +++ b/javascript/package-lock.json @@ -27,6 +27,7 @@ "@apache-arrow/adbc-driver-manager-darwin-x64": "0.25.0", "@apache-arrow/adbc-driver-manager-linux-arm64-gnu": "0.25.0", "@apache-arrow/adbc-driver-manager-linux-x64-gnu": "0.25.0", + "@apache-arrow/adbc-driver-manager-win32-arm64-msvc": "0.25.0", "@apache-arrow/adbc-driver-manager-win32-x64-msvc": "0.25.0" }, "peerDependencies": { diff --git a/javascript/package.json b/javascript/package.json index bc5a7a32ce..3e07a6ae7d 100644 --- a/javascript/package.json +++ b/javascript/package.json @@ -26,6 +26,7 @@ "binaryName": "adbc-driver-manager", "targets": [ "x86_64-pc-windows-msvc", + "aarch64-pc-windows-msvc", "x86_64-apple-darwin", "x86_64-unknown-linux-gnu", "aarch64-unknown-linux-gnu", @@ -86,6 +87,7 @@ }, "optionalDependencies": { "@apache-arrow/adbc-driver-manager-win32-x64-msvc": "0.25.0", + "@apache-arrow/adbc-driver-manager-win32-arm64-msvc": "0.25.0", "@apache-arrow/adbc-driver-manager-darwin-x64": "0.25.0", "@apache-arrow/adbc-driver-manager-linux-x64-gnu": "0.25.0", "@apache-arrow/adbc-driver-manager-linux-arm64-gnu": "0.25.0", From 3625abfc2877c6f605d20a87c055df26a88e7e26 Mon Sep 17 00:00:00 2001 From: Philip Moore Date: Wed, 29 Jul 2026 21:43:07 -0400 Subject: [PATCH 2/3] feat(javascript): use vcpkg for SQLite in the win-arm64 test leg Miniforge does not publish a Windows ARM64 installer, so setup-miniconda 404s on windows-11-arm. Use vcpkg (a supported ADBC_DEPENDENCY_SOURCE) to provide SQLite for the test driver build on that leg instead. Co-Authored-By: Claude Fable 5 --- .github/workflows/javascript.yml | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/.github/workflows/javascript.yml b/.github/workflows/javascript.yml index 14a364655e..d743db44f2 100644 --- a/.github/workflows/javascript.yml +++ b/.github/workflows/javascript.yml @@ -173,18 +173,35 @@ jobs: name: bindings-${{ matrix.settings.target }} path: javascript - name: Setup conda (Windows) - if: runner.os == 'Windows' + # Miniforge does not publish a Windows ARM64 installer, so the ARM64 + # leg gets SQLite from vcpkg below instead. + if: runner.os == 'Windows' && runner.arch != 'ARM64' uses: conda-incubator/setup-miniconda@8ee1f361103df19b6f8c8655fd3967a8ecb162d5 # v4.0.1 with: miniforge-version: latest - name: Install C++ dependencies (Windows) - if: runner.os == 'Windows' + if: runner.os == 'Windows' && runner.arch != 'ARM64' run: conda install -c conda-forge --file ci/conda_env_cpp.txt + - name: Install C++ dependencies (Windows ARM64) + if: runner.os == 'Windows' && runner.arch == 'ARM64' + shell: pwsh + run: | + if (-not $env:VCPKG_INSTALLATION_ROOT) { + git clone --depth 1 https://github.com/microsoft/vcpkg.git "$env:RUNNER_TEMP\vcpkg" + & "$env:RUNNER_TEMP\vcpkg\bootstrap-vcpkg.bat" + echo "VCPKG_INSTALLATION_ROOT=$env:RUNNER_TEMP\vcpkg" >> $env:GITHUB_ENV + $vcpkgRoot = "$env:RUNNER_TEMP\vcpkg" + } else { + $vcpkgRoot = $env:VCPKG_INSTALLATION_ROOT + } + & "$vcpkgRoot\vcpkg.exe" install sqlite3:arm64-windows-static-md + $toolchain = "$vcpkgRoot\scripts\buildsystems\vcpkg.cmake" -replace '\\', '/' + echo "ADBC_CMAKE_ARGS=-DCMAKE_TOOLCHAIN_FILE=$toolchain -DVCPKG_TARGET_TRIPLET=arm64-windows-static-md" >> $env:GITHUB_ENV - name: Install C++ dependencies (Linux) if: runner.os == 'Linux' run: sudo apt-get install libsqlite3-dev - name: Set cmake args (Windows) - if: runner.os == 'Windows' + if: runner.os == 'Windows' && runner.arch != 'ARM64' shell: pwsh run: echo "ADBC_CMAKE_ARGS=-DCMAKE_PREFIX_PATH=$env:CONDA_PREFIX/Library" >> $env:GITHUB_ENV - name: Build Driver From 562b35c3f3b360d786d06de30fdb2f19978a5c77 Mon Sep 17 00:00:00 2001 From: Philip Moore Date: Thu, 30 Jul 2026 00:15:57 -0400 Subject: [PATCH 3/3] feat(javascript): use micromamba for the win-arm64 test leg Per review, use the conda-forge flow via micromamba (which ships native Windows ARM64 binaries) instead of vcpkg. setup-micromamba is not on the ASF actions allowlist, so download the pinned, checksummed binary from micromamba-releases directly. conda-forge's win-arm64 platform does not have cmake/compilers/libpq/pkg-config yet, so only libsqlite is installed; the runner's MSVC and CMake are used. Co-Authored-By: Claude Fable 5 --- .github/workflows/javascript.yml | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/.github/workflows/javascript.yml b/.github/workflows/javascript.yml index d743db44f2..29eadcedcb 100644 --- a/.github/workflows/javascript.yml +++ b/.github/workflows/javascript.yml @@ -174,7 +174,7 @@ jobs: path: javascript - name: Setup conda (Windows) # Miniforge does not publish a Windows ARM64 installer, so the ARM64 - # leg gets SQLite from vcpkg below instead. + # leg uses micromamba (which ships native arm64 binaries) below. if: runner.os == 'Windows' && runner.arch != 'ARM64' uses: conda-incubator/setup-miniconda@8ee1f361103df19b6f8c8655fd3967a8ecb162d5 # v4.0.1 with: @@ -183,20 +183,25 @@ jobs: if: runner.os == 'Windows' && runner.arch != 'ARM64' run: conda install -c conda-forge --file ci/conda_env_cpp.txt - name: Install C++ dependencies (Windows ARM64) + # mamba-org/setup-micromamba is not on the ASF actions allowlist, so + # fetch the official micromamba binary directly (pinned + checksummed). + # conda-forge's win-arm64 platform does not have cmake, compilers, + # libpq, or pkg-config yet, so install just what the SQLite driver + # build needs and use the runner's preinstalled MSVC and CMake. + # CONDA_PREFIX is exported so the shared "Set driver path (Windows)" + # step puts the env's Library\bin (sqlite3.dll) on PATH. if: runner.os == 'Windows' && runner.arch == 'ARM64' shell: pwsh run: | - if (-not $env:VCPKG_INSTALLATION_ROOT) { - git clone --depth 1 https://github.com/microsoft/vcpkg.git "$env:RUNNER_TEMP\vcpkg" - & "$env:RUNNER_TEMP\vcpkg\bootstrap-vcpkg.bat" - echo "VCPKG_INSTALLATION_ROOT=$env:RUNNER_TEMP\vcpkg" >> $env:GITHUB_ENV - $vcpkgRoot = "$env:RUNNER_TEMP\vcpkg" - } else { - $vcpkgRoot = $env:VCPKG_INSTALLATION_ROOT - } - & "$vcpkgRoot\vcpkg.exe" install sqlite3:arm64-windows-static-md - $toolchain = "$vcpkgRoot\scripts\buildsystems\vcpkg.cmake" -replace '\\', '/' - echo "ADBC_CMAKE_ARGS=-DCMAKE_TOOLCHAIN_FILE=$toolchain -DVCPKG_TARGET_TRIPLET=arm64-windows-static-md" >> $env:GITHUB_ENV + $version = "2.8.1-0" + $sha256 = "c90eda5e4c88ebd4fb4c857d7c98d7484156fae5419b72c9c652f331ad7aad9f" + $exe = "$env:RUNNER_TEMP\micromamba.exe" + Invoke-WebRequest -Uri "https://github.com/mamba-org/micromamba-releases/releases/download/$version/micromamba-win-arm64.exe" -OutFile $exe + if ((Get-FileHash $exe -Algorithm SHA256).Hash -ne $sha256) { throw "micromamba checksum mismatch" } + $prefix = "$env:RUNNER_TEMP\conda-env" + & $exe create --yes --prefix $prefix --channel conda-forge libsqlite + echo "CONDA_PREFIX=$prefix" >> $env:GITHUB_ENV + echo "ADBC_CMAKE_ARGS=-DCMAKE_PREFIX_PATH=$($prefix -replace '\\','/')/Library" >> $env:GITHUB_ENV - name: Install C++ dependencies (Linux) if: runner.os == 'Linux' run: sudo apt-get install libsqlite3-dev