diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml index 18b78dbf..0360b19f 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/npm-publish.yml @@ -226,6 +226,112 @@ jobs: path: | node/dist/lancedb-vectordb-win32*.tgz + node-windows-arm64: + name: vectordb win32-arm64-msvc + runs-on: windows-4x-arm + if: startsWith(github.ref, 'refs/tags/v') + steps: + - uses: actions/checkout@v4 + - name: Cache installations + id: cache-installs + uses: actions/cache@v4 + with: + path: | + C:\Program Files\Git + C:\BuildTools + C:\Program Files (x86)\Windows Kits + C:\Program Files\7-Zip + C:\protoc + key: ${{ runner.os }}-arm64-installs-v1 + restore-keys: | + ${{ runner.os }}-arm64-installs- + - name: Install Git + if: steps.cache-installs.outputs.cache-hit != 'true' + run: | + Invoke-WebRequest -Uri "https://github.com/git-for-windows/git/releases/download/v2.44.0.windows.1/Git-2.44.0-64-bit.exe" -OutFile "git-installer.exe" + Start-Process -FilePath "git-installer.exe" -ArgumentList "/VERYSILENT", "/NORESTART" -Wait + shell: powershell + - name: Add Git to PATH + run: | + Add-Content $env:GITHUB_PATH "C:\Program Files\Git\bin" + $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") + shell: powershell + - name: Configure Git symlinks + run: git config --global core.symlinks true + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.13" + - name: Install Visual Studio Build Tools + if: steps.cache-installs.outputs.cache-hit != 'true' + run: | + Invoke-WebRequest -Uri "https://aka.ms/vs/17/release/vs_buildtools.exe" -OutFile "vs_buildtools.exe" + Start-Process -FilePath "vs_buildtools.exe" -ArgumentList "--quiet", "--wait", "--norestart", "--nocache", ` + "--installPath", "C:\BuildTools", ` + "--add", "Microsoft.VisualStudio.Component.VC.Tools.ARM64", ` + "--add", "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", ` + "--add", "Microsoft.VisualStudio.Component.Windows11SDK.22621", ` + "--add", "Microsoft.VisualStudio.Component.VC.ATL", ` + "--add", "Microsoft.VisualStudio.Component.VC.ATLMFC", ` + "--add", "Microsoft.VisualStudio.Component.VC.Llvm.Clang" -Wait + shell: powershell + - name: Add Visual Studio Build Tools to PATH + run: | + $vsPath = "C:\BuildTools\VC\Tools\MSVC" + $latestVersion = (Get-ChildItem $vsPath | Sort-Object {[version]$_.Name} -Descending)[0].Name + Add-Content $env:GITHUB_PATH "C:\BuildTools\VC\Tools\MSVC\$latestVersion\bin\Hostx64\arm64" + Add-Content $env:GITHUB_PATH "C:\BuildTools\VC\Tools\MSVC\$latestVersion\bin\Hostx64\x64" + Add-Content $env:GITHUB_PATH "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\arm64" + Add-Content $env:GITHUB_PATH "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64" + Add-Content $env:GITHUB_PATH "C:\BuildTools\VC\Tools\Llvm\x64\bin" + + $env:LIB = "" + Add-Content $env:GITHUB_ENV "LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\arm64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\ucrt\arm64" + shell: powershell + - name: Install Rust + run: | + Invoke-WebRequest https://win.rustup.rs/x86_64 -OutFile rustup-init.exe + .\rustup-init.exe -y --default-host aarch64-pc-windows-msvc + shell: powershell + - name: Add Rust to PATH + run: | + Add-Content $env:GITHUB_PATH "$env:USERPROFILE\.cargo\bin" + shell: powershell + + - uses: Swatinem/rust-cache@v2 + with: + workspaces: rust + - name: Install 7-Zip ARM + if: steps.cache-installs.outputs.cache-hit != 'true' + run: | + New-Item -Path 'C:\7zip' -ItemType Directory + Invoke-WebRequest https://7-zip.org/a/7z2408-arm64.exe -OutFile C:\7zip\7z-installer.exe + Start-Process -FilePath C:\7zip\7z-installer.exe -ArgumentList '/S' -Wait + shell: powershell + - name: Add 7-Zip to PATH + run: Add-Content $env:GITHUB_PATH "C:\Program Files\7-Zip" + shell: powershell + - name: Install Protoc v21.12 + if: steps.cache-installs.outputs.cache-hit != 'true' + working-directory: C:\ + run: | + New-Item -Path 'C:\protoc' -ItemType Directory + Set-Location C:\protoc + Invoke-WebRequest https://github.com/protocolbuffers/protobuf/releases/download/v21.12/protoc-21.12-win64.zip -OutFile C:\protoc\protoc.zip + & 'C:\Program Files\7-Zip\7z.exe' x protoc.zip + shell: powershell + - name: Add Protoc to PATH + run: Add-Content $env:GITHUB_PATH "C:\protoc\bin" + shell: powershell + - name: Build Windows native node modules + run: .\ci\build_windows_artifacts.ps1 aarch64-pc-windows-msvc + - name: Upload Windows ARM64 Artifacts + uses: actions/upload-artifact@v4 + with: + name: node-native-windows-arm64 + path: | + node/dist/*.node + nodejs-windows: name: lancedb ${{ matrix.target }} runs-on: windows-2022 @@ -260,9 +366,115 @@ jobs: path: | nodejs/dist/*.node + nodejs-windows-arm64: + name: lancedb win32-arm64-msvc + runs-on: windows-4x-arm + if: startsWith(github.ref, 'refs/tags/v') + steps: + - uses: actions/checkout@v4 + - name: Cache installations + id: cache-installs + uses: actions/cache@v4 + with: + path: | + C:\Program Files\Git + C:\BuildTools + C:\Program Files (x86)\Windows Kits + C:\Program Files\7-Zip + C:\protoc + key: ${{ runner.os }}-arm64-installs-v1 + restore-keys: | + ${{ runner.os }}-arm64-installs- + - name: Install Git + if: steps.cache-installs.outputs.cache-hit != 'true' + run: | + Invoke-WebRequest -Uri "https://github.com/git-for-windows/git/releases/download/v2.44.0.windows.1/Git-2.44.0-64-bit.exe" -OutFile "git-installer.exe" + Start-Process -FilePath "git-installer.exe" -ArgumentList "/VERYSILENT", "/NORESTART" -Wait + shell: powershell + - name: Add Git to PATH + run: | + Add-Content $env:GITHUB_PATH "C:\Program Files\Git\bin" + $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") + shell: powershell + - name: Configure Git symlinks + run: git config --global core.symlinks true + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.13" + - name: Install Visual Studio Build Tools + if: steps.cache-installs.outputs.cache-hit != 'true' + run: | + Invoke-WebRequest -Uri "https://aka.ms/vs/17/release/vs_buildtools.exe" -OutFile "vs_buildtools.exe" + Start-Process -FilePath "vs_buildtools.exe" -ArgumentList "--quiet", "--wait", "--norestart", "--nocache", ` + "--installPath", "C:\BuildTools", ` + "--add", "Microsoft.VisualStudio.Component.VC.Tools.ARM64", ` + "--add", "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", ` + "--add", "Microsoft.VisualStudio.Component.Windows11SDK.22621", ` + "--add", "Microsoft.VisualStudio.Component.VC.ATL", ` + "--add", "Microsoft.VisualStudio.Component.VC.ATLMFC", ` + "--add", "Microsoft.VisualStudio.Component.VC.Llvm.Clang" -Wait + shell: powershell + - name: Add Visual Studio Build Tools to PATH + run: | + $vsPath = "C:\BuildTools\VC\Tools\MSVC" + $latestVersion = (Get-ChildItem $vsPath | Sort-Object {[version]$_.Name} -Descending)[0].Name + Add-Content $env:GITHUB_PATH "C:\BuildTools\VC\Tools\MSVC\$latestVersion\bin\Hostx64\arm64" + Add-Content $env:GITHUB_PATH "C:\BuildTools\VC\Tools\MSVC\$latestVersion\bin\Hostx64\x64" + Add-Content $env:GITHUB_PATH "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\arm64" + Add-Content $env:GITHUB_PATH "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64" + Add-Content $env:GITHUB_PATH "C:\BuildTools\VC\Tools\Llvm\x64\bin" + + $env:LIB = "" + Add-Content $env:GITHUB_ENV "LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\arm64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\ucrt\arm64" + shell: powershell + - name: Install Rust + run: | + Invoke-WebRequest https://win.rustup.rs/x86_64 -OutFile rustup-init.exe + .\rustup-init.exe -y --default-host aarch64-pc-windows-msvc + shell: powershell + - name: Add Rust to PATH + run: | + Add-Content $env:GITHUB_PATH "$env:USERPROFILE\.cargo\bin" + shell: powershell + + - uses: Swatinem/rust-cache@v2 + with: + workspaces: rust + - name: Install 7-Zip ARM + if: steps.cache-installs.outputs.cache-hit != 'true' + run: | + New-Item -Path 'C:\7zip' -ItemType Directory + Invoke-WebRequest https://7-zip.org/a/7z2408-arm64.exe -OutFile C:\7zip\7z-installer.exe + Start-Process -FilePath C:\7zip\7z-installer.exe -ArgumentList '/S' -Wait + shell: powershell + - name: Add 7-Zip to PATH + run: Add-Content $env:GITHUB_PATH "C:\Program Files\7-Zip" + shell: powershell + - name: Install Protoc v21.12 + if: steps.cache-installs.outputs.cache-hit != 'true' + working-directory: C:\ + run: | + New-Item -Path 'C:\protoc' -ItemType Directory + Set-Location C:\protoc + Invoke-WebRequest https://github.com/protocolbuffers/protobuf/releases/download/v21.12/protoc-21.12-win64.zip -OutFile C:\protoc\protoc.zip + & 'C:\Program Files\7-Zip\7z.exe' x protoc.zip + shell: powershell + - name: Add Protoc to PATH + run: Add-Content $env:GITHUB_PATH "C:\protoc\bin" + shell: powershell + - name: Build Windows native node modules + run: .\ci\build_windows_artifacts_nodejs.ps1 aarch64-pc-windows-msvc + - name: Upload Windows ARM64 Artifacts + uses: actions/upload-artifact@v4 + with: + name: nodejs-native-windows-arm64 + path: | + nodejs/dist/*.node + release: name: vectordb NPM Publish - needs: [node, node-macos, node-linux, node-windows] + needs: [node, node-macos, node-linux, node-windows, node-windows-arm64] runs-on: ubuntu-latest # Only runs on tags that matches the make-release action if: startsWith(github.ref, 'refs/tags/v') @@ -302,7 +514,7 @@ jobs: release-nodejs: name: lancedb NPM Publish - needs: [nodejs-macos, nodejs-linux, nodejs-windows] + needs: [nodejs-macos, nodejs-linux, nodejs-windows, nodejs-windows-arm64] runs-on: ubuntu-latest # Only runs on tags that matches the make-release action if: startsWith(github.ref, 'refs/tags/v') diff --git a/nodejs/Cargo.toml b/nodejs/Cargo.toml index ba7af8da..f2a79408 100644 --- a/nodejs/Cargo.toml +++ b/nodejs/Cargo.toml @@ -18,7 +18,7 @@ futures.workspace = true lancedb = { path = "../rust/lancedb", features = ["remote"] } napi = { version = "2.16.8", default-features = false, features = [ "napi9", - "async", + "async" ] } napi-derive = "2.16.4" # Prevent dynamic linking of lzma, which comes from datafusion diff --git a/nodejs/npm/win32-arm64-msvc/package.json b/nodejs/npm/win32-arm64-msvc/package.json index 0478cef7..e35e6e08 100644 --- a/nodejs/npm/win32-arm64-msvc/package.json +++ b/nodejs/npm/win32-arm64-msvc/package.json @@ -1,6 +1,6 @@ { "name": "@lancedb/lancedb-win32-arm64-msvc", - "version": "0.12.0", + "version": "0.13.0-beta.1", "os": [ "win32" ],