From 8731879428e09064b81bf9dc00584566aa42ddfb Mon Sep 17 00:00:00 2001 From: Jeff Raymakers Date: Sun, 15 Dec 2024 09:41:05 -0800 Subject: [PATCH 01/14] build linux arm64 --- .../workflows/DuckDBNodeBindingsAndAPI.yml | 29 +++++++++++++++++++ README.md | 4 +++ api/pkgs/@duckdb/node-api/README.md | 1 + bindings/binding.gyp | 28 ++++++++++++++++++ .../@duckdb/node-bindings-linux-arm64/.npmrc | 1 + .../node-bindings-linux-arm64/README.md | 5 ++++ .../node-bindings-linux-arm64/package.json | 14 +++++++++ bindings/pkgs/@duckdb/node-bindings/README.md | 1 + .../pkgs/@duckdb/node-bindings/package.json | 1 + .../scripts/fetch_libduckdb_linux_aarch64.py | 11 +++++++ 10 files changed, 95 insertions(+) create mode 100644 bindings/pkgs/@duckdb/node-bindings-linux-arm64/.npmrc create mode 100644 bindings/pkgs/@duckdb/node-bindings-linux-arm64/README.md create mode 100644 bindings/pkgs/@duckdb/node-bindings-linux-arm64/package.json create mode 100644 bindings/scripts/fetch_libduckdb_linux_aarch64.py diff --git a/.github/workflows/DuckDBNodeBindingsAndAPI.yml b/.github/workflows/DuckDBNodeBindingsAndAPI.yml index 20544e6e..619ea1e5 100644 --- a/.github/workflows/DuckDBNodeBindingsAndAPI.yml +++ b/.github/workflows/DuckDBNodeBindingsAndAPI.yml @@ -28,6 +28,11 @@ on: type: boolean required: true default: false + linux_arm64: + description: 'Run on Linux arm64' + type: boolean + required: true + default: false macos_arm64: description: 'Run on Mac OS X arm64' type: boolean @@ -111,6 +116,30 @@ jobs: env: NPM_AUTH_TOKEN: ${{ secrets.DUCKDB_NPM_TOKEN }} + linux_arm64: + name: Linux arm64 + runs-on: ubuntu-latest + if: ${{ github.event_name != 'workflow_dispatch' || inputs.linux_arm64 }} + env: + TARGET_ARCH: 'arm64' + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v3 + with: + version: 9 + + - name: Workspace - Install + run: pnpm install --ignore-scripts + + - name: Bindings - Build + working-directory: bindings + run: pnpm run build + + - name: Bindings - Test + working-directory: bindings + run: pnpm test + macos_arm64: name: Mac OS X arm64 runs-on: macos-latest diff --git a/README.md b/README.md index 03991595..6e87a8c8 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ - [@duckdb/node-api](api/pkgs/@duckdb/node-api/README.md) - [@duckdb/node-bindings](bindings/pkgs/@duckdb/node-bindings/README.md) - [@duckdb/node-bindings-darwin-arm64](bindings/pkgs/@duckdb/node-bindings-darwin-arm64/README.md) +- [@duckdb/node-bindings-linux-arm64](bindings/pkgs/@duckdb/node-bindings-linux-x64/README.md) - [@duckdb/node-bindings-linux-x64](bindings/pkgs/@duckdb/node-bindings-linux-x64/README.md) - [@duckdb/node-bindings-win32-x64](bindings/pkgs/@duckdb/node-bindings-win32-x64/README.md) @@ -17,6 +18,7 @@ - [@duckdb/node-api](https://www.npmjs.com/package/@duckdb/node-api) - [@duckdb/node-bindings](https://www.npmjs.com/package/@duckdb/node-bindings) - [@duckdb/node-bindings-darwin-arm64](https://www.npmjs.com/package/@duckdb/node-bindings-darwin-arm64) +- [@duckdb/node-bindings-linux-arm64](https://www.npmjs.com/package/@duckdb/node-bindings-linux-x64) - [@duckdb/node-bindings-linux-x64](https://www.npmjs.com/package/@duckdb/node-bindings-linux-x64) - [@duckdb/node-bindings-win32-x64](https://www.npmjs.com/package/@duckdb/node-bindings-win32-x64) @@ -46,12 +48,14 @@ Change version in: - `api/pkgs/@duckdb/node-api/package.json` - `bindings/pkgs/@duckdb/node-bindings/package.json` - `bindings/pkgs/@duckdb/node-bindings-darwin-arm64/package.json` +- `bindings/pkgs/@duckdb/node-bindings-linux-arm64/package.json` - `bindings/pkgs/@duckdb/node-bindings-linux-x64/package.json` - `bindings/pkgs/@duckdb/node-bindings-win32-x64/package.json` ### Upgrade DuckDB Version Change version in: +- `bindings/scripts/fetch_libduckdb_linux_aarch64.py` - `bindings/scripts/fetch_libduckdb_linux_amd64.py` - `bindings/scripts/fetch_libduckdb_osx_universal.py` - `bindings/scripts/fetch_libduckdb_windows_amd64.py` diff --git a/api/pkgs/@duckdb/node-api/README.md b/api/pkgs/@duckdb/node-api/README.md index 4966e858..576980dd 100644 --- a/api/pkgs/@duckdb/node-api/README.md +++ b/api/pkgs/@duckdb/node-api/README.md @@ -28,6 +28,7 @@ Some features are not yet complete: ### Supported Platforms - Linux x64 +- Linux arm64 - Mac OS X (Darwin) arm64 (Apple Silicon) - Windows (Win32) x64 diff --git a/bindings/binding.gyp b/bindings/binding.gyp index 877f38fd..f82ac62c 100644 --- a/bindings/binding.gyp +++ b/bindings/binding.gyp @@ -9,6 +9,11 @@ 'script_path': '<(module_root_dir)/scripts/fetch_libduckdb_linux_amd64.py', }, }], + ['OS=="linux" and target_arch=="amd64"', { + 'variables': { + 'script_path': '<(module_root_dir)/scripts/fetch_libduckdb_linux_aarch64.py', + }, + }], ['OS=="mac"', { 'variables': { 'script_path': '<(module_root_dir)/scripts/fetch_libduckdb_osx_universal.py', @@ -54,6 +59,21 @@ }, ], }], + ['OS=="linux" and target_arch=="arm64"', { + 'link_settings': { + 'libraries': [ + '-lduckdb', + '-L<(module_root_dir)/libduckdb', + '-Wl,-rpath,\'$$ORIGIN\'', + ], + }, + 'copies': [ + { + 'files': ['<(module_root_dir)/libduckdb/libduckdb.so'], + 'destination': '<(module_root_dir)/pkgs/@duckdb/node-bindings-linux-arm64', + }, + ], + }], ['OS=="mac"', { 'cflags+': ['-fvisibility=hidden'], 'xcode_settings': { @@ -101,6 +121,14 @@ }, ], }], + ['OS=="linux" and target_arch=="arm64"', { + 'copies': [ + { + 'files': ['<(module_root_dir)/build/Release/duckdb.node'], + 'destination': '<(module_root_dir)/pkgs/@duckdb/node-bindings-linux-arm64', + }, + ], + }], ['OS=="mac"', { 'copies': [ { diff --git a/bindings/pkgs/@duckdb/node-bindings-linux-arm64/.npmrc b/bindings/pkgs/@duckdb/node-bindings-linux-arm64/.npmrc new file mode 100644 index 00000000..2346004a --- /dev/null +++ b/bindings/pkgs/@duckdb/node-bindings-linux-arm64/.npmrc @@ -0,0 +1 @@ +//registry.npmjs.org/:_authToken=${NPM_AUTH_TOKEN} \ No newline at end of file diff --git a/bindings/pkgs/@duckdb/node-bindings-linux-arm64/README.md b/bindings/pkgs/@duckdb/node-bindings-linux-arm64/README.md new file mode 100644 index 00000000..d3096318 --- /dev/null +++ b/bindings/pkgs/@duckdb/node-bindings-linux-arm64/README.md @@ -0,0 +1,5 @@ +# DuckDB Node Bindings: Linux arm64 + +Binaries supporting [Node](https://nodejs.org/) bindings to the [DuckDB C API](https://duckdb.org/docs/api/c/overview) for Linux arm64. + +See [@duckdb/node-bindings](https://www.npmjs.com/package/@duckdb/node-bindings) for a low-level API that uses these binaries, or [@duckdb/node-api](https://www.npmjs.com/package/@duckdb/node-api) for a high-level API built on those bindings. diff --git a/bindings/pkgs/@duckdb/node-bindings-linux-arm64/package.json b/bindings/pkgs/@duckdb/node-bindings-linux-arm64/package.json new file mode 100644 index 00000000..6ed1bc6d --- /dev/null +++ b/bindings/pkgs/@duckdb/node-bindings-linux-arm64/package.json @@ -0,0 +1,14 @@ +{ + "name": "@duckdb/node-bindings-linux-arm64", + "version": "1.1.3-alpha.6", + "os": [ + "linux" + ], + "cpu": [ + "arm64" + ], + "repository": { + "type": "git", + "url": "https://github.com/duckdb/duckdb-node-neo.git" + } +} diff --git a/bindings/pkgs/@duckdb/node-bindings/README.md b/bindings/pkgs/@duckdb/node-bindings/README.md index ae9955d3..9c7cbd52 100644 --- a/bindings/pkgs/@duckdb/node-bindings/README.md +++ b/bindings/pkgs/@duckdb/node-bindings/README.md @@ -7,5 +7,6 @@ See [@duckdb/node-api](https://www.npmjs.com/package/@duckdb/node-api) for a hig ### Supported Platforms - Linux x64 +- Linux arm64 - Mac OS X (Darwin) arm64 (Apple Silicon) - Windows (Win32) x64 diff --git a/bindings/pkgs/@duckdb/node-bindings/package.json b/bindings/pkgs/@duckdb/node-bindings/package.json index 3e1e3197..4078fd3e 100644 --- a/bindings/pkgs/@duckdb/node-bindings/package.json +++ b/bindings/pkgs/@duckdb/node-bindings/package.json @@ -5,6 +5,7 @@ "types": "./duckdb.d.ts", "optionalDependencies": { "@duckdb/node-bindings-darwin-arm64": "workspace:*", + "@duckdb/node-bindings-linux-arm64": "workspace:*", "@duckdb/node-bindings-linux-x64": "workspace:*", "@duckdb/node-bindings-win32-x64": "workspace:*" }, diff --git a/bindings/scripts/fetch_libduckdb_linux_aarch64.py b/bindings/scripts/fetch_libduckdb_linux_aarch64.py new file mode 100644 index 00000000..8d488247 --- /dev/null +++ b/bindings/scripts/fetch_libduckdb_linux_aarch64.py @@ -0,0 +1,11 @@ +import os +from fetch_libduckdb import fetch_libduckdb + +zip_url = "https://github.com/duckdb/duckdb/releases/download/v1.1.3/libduckdb-linux-aarch64.zip" +output_dir = os.path.join(os.path.dirname(__file__), "..", "libduckdb") +files = [ + "duckdb.h", + "libduckdb.so", +] + +fetch_libduckdb(zip_url, output_dir, files) From 60cd26c9a1288e3dcde0fcf423aeaa2ad84d1fe6 Mon Sep 17 00:00:00 2001 From: Jeff Raymakers Date: Sun, 15 Dec 2024 09:42:57 -0800 Subject: [PATCH 02/14] update root pnpm-lock.yaml --- pnpm-lock.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b488289b..6b95eef6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -59,6 +59,9 @@ importers: '@duckdb/node-bindings-darwin-arm64': specifier: workspace:* version: link:../node-bindings-darwin-arm64 + '@duckdb/node-bindings-linux-arm64': + specifier: workspace:* + version: link:../node-bindings-linux-arm64 '@duckdb/node-bindings-linux-x64': specifier: workspace:* version: link:../node-bindings-linux-x64 @@ -68,6 +71,8 @@ importers: bindings/pkgs/@duckdb/node-bindings-darwin-arm64: {} + bindings/pkgs/@duckdb/node-bindings-linux-arm64: {} + bindings/pkgs/@duckdb/node-bindings-linux-x64: {} bindings/pkgs/@duckdb/node-bindings-win32-x64: {} From 0a8338826023e8b9ba68102f1edc07d8146b1fde Mon Sep 17 00:00:00 2001 From: Jeff Raymakers Date: Sun, 15 Dec 2024 09:47:05 -0800 Subject: [PATCH 03/14] fix setting TARGET_ARCH? --- .github/workflows/DuckDBNodeBindingsAndAPI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/DuckDBNodeBindingsAndAPI.yml b/.github/workflows/DuckDBNodeBindingsAndAPI.yml index 619ea1e5..966fa22d 100644 --- a/.github/workflows/DuckDBNodeBindingsAndAPI.yml +++ b/.github/workflows/DuckDBNodeBindingsAndAPI.yml @@ -121,7 +121,7 @@ jobs: runs-on: ubuntu-latest if: ${{ github.event_name != 'workflow_dispatch' || inputs.linux_arm64 }} env: - TARGET_ARCH: 'arm64' + TARGET_ARCH: ${{ 'arm64' }} steps: - uses: actions/checkout@v4 From bfcfdc1822110acbcb3d246fd560c137d3a32564 Mon Sep 17 00:00:00 2001 From: Jeff Raymakers Date: Sun, 15 Dec 2024 09:49:59 -0800 Subject: [PATCH 04/14] more TARGET_ARCH setting attempts --- .github/workflows/DuckDBNodeBindingsAndAPI.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/DuckDBNodeBindingsAndAPI.yml b/.github/workflows/DuckDBNodeBindingsAndAPI.yml index 966fa22d..f305e76d 100644 --- a/.github/workflows/DuckDBNodeBindingsAndAPI.yml +++ b/.github/workflows/DuckDBNodeBindingsAndAPI.yml @@ -123,6 +123,9 @@ jobs: env: TARGET_ARCH: ${{ 'arm64' }} steps: + - name: Echo TARGET_ARGH + run: echo $TARGET_ARCH + - uses: actions/checkout@v4 - uses: pnpm/action-setup@v3 @@ -135,6 +138,8 @@ jobs: - name: Bindings - Build working-directory: bindings run: pnpm run build + env: + TARGET_ARCH: ${{ 'arm64' }} - name: Bindings - Test working-directory: bindings From 8975a8afac5c8319a23972faaabf412af62eba4f Mon Sep 17 00:00:00 2001 From: Jeff Raymakers Date: Sun, 15 Dec 2024 09:54:03 -0800 Subject: [PATCH 05/14] pass TARGET_ARCH to node-gyp --- .github/workflows/DuckDBNodeBindingsAndAPI.yml | 5 ----- bindings/package.json | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/DuckDBNodeBindingsAndAPI.yml b/.github/workflows/DuckDBNodeBindingsAndAPI.yml index f305e76d..966fa22d 100644 --- a/.github/workflows/DuckDBNodeBindingsAndAPI.yml +++ b/.github/workflows/DuckDBNodeBindingsAndAPI.yml @@ -123,9 +123,6 @@ jobs: env: TARGET_ARCH: ${{ 'arm64' }} steps: - - name: Echo TARGET_ARGH - run: echo $TARGET_ARCH - - uses: actions/checkout@v4 - uses: pnpm/action-setup@v3 @@ -138,8 +135,6 @@ jobs: - name: Bindings - Build working-directory: bindings run: pnpm run build - env: - TARGET_ARCH: ${{ 'arm64' }} - name: Bindings - Test working-directory: bindings diff --git a/bindings/package.json b/bindings/package.json index 46dafd83..58975116 100644 --- a/bindings/package.json +++ b/bindings/package.json @@ -2,7 +2,7 @@ "private": true, "scripts": { "build": "npm run build:package && npm run build:test", - "build:package": "node-gyp configure && node-gyp build", + "build:package": "node-gyp configure --arch=$TARGET_ARCH && node-gyp build --arch=$TARGET_ARCH", "build:test": "tsc -b test", "clean": "npm run clean:gyp && npm run clean:libduckdb && npm run clean:package", "clean:gyp": "node-gyp clean", From b1e1b3d59d3585bca587e7decaebc5668fc722b8 Mon Sep 17 00:00:00 2001 From: Jeff Raymakers Date: Sun, 15 Dec 2024 09:56:39 -0800 Subject: [PATCH 06/14] fix typo: amd64->arm64 --- bindings/binding.gyp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bindings/binding.gyp b/bindings/binding.gyp index f82ac62c..136408db 100644 --- a/bindings/binding.gyp +++ b/bindings/binding.gyp @@ -9,7 +9,7 @@ 'script_path': '<(module_root_dir)/scripts/fetch_libduckdb_linux_amd64.py', }, }], - ['OS=="linux" and target_arch=="amd64"', { + ['OS=="linux" and target_arch=="arm64"', { 'variables': { 'script_path': '<(module_root_dir)/scripts/fetch_libduckdb_linux_aarch64.py', }, From a7589c93469465a762c9c49d6c86c24a80381b8b Mon Sep 17 00:00:00 2001 From: Jeff Raymakers Date: Sun, 15 Dec 2024 10:07:16 -0800 Subject: [PATCH 07/14] fix env var on windows --- bindings/package.json | 3 ++- pnpm-lock.yaml | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/bindings/package.json b/bindings/package.json index 58975116..d1530060 100644 --- a/bindings/package.json +++ b/bindings/package.json @@ -2,7 +2,7 @@ "private": true, "scripts": { "build": "npm run build:package && npm run build:test", - "build:package": "node-gyp configure --arch=$TARGET_ARCH && node-gyp build --arch=$TARGET_ARCH", + "build:package": "cross-replace node-gyp configure --arch=$TARGET_ARCH && node-gyp build --arch=$TARGET_ARCH", "build:test": "tsc -b test", "clean": "npm run clean:gyp && npm run clean:libduckdb && npm run clean:package", "clean:gyp": "node-gyp clean", @@ -13,6 +13,7 @@ }, "dependencies": { "@duckdb/node-bindings": "workspace:*", + "cross-replace": "^0.2.0", "node-addon-api": "^8.3.0", "node-gyp": "^10.3.1", "rimraf": "^5.0.10", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6b95eef6..1dfea4dd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,6 +38,9 @@ importers: '@duckdb/node-bindings': specifier: workspace:* version: link:pkgs/@duckdb/node-bindings + cross-replace: + specifier: ^0.2.0 + version: 0.2.0 node-addon-api: specifier: ^8.3.0 version: 8.3.0 @@ -435,6 +438,10 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + cross-replace@0.2.0: + resolution: {integrity: sha512-LF8ZXUDGw5yy8YHPzw4RbOtJJG6NVxpxvEAJZwJgMyLV/wBJonG39vWBDS168nS4ImYP59mPkXj/5ezMOAuzwQ==} + hasBin: true + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -1179,6 +1186,10 @@ snapshots: color-name@1.1.4: {} + cross-replace@0.2.0: + dependencies: + cross-spawn: 7.0.6 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 From 93c0e6b10dca651d53a0aad6b443ec1055c1cb07 Mon Sep 17 00:00:00 2001 From: Jeff Raymakers Date: Sun, 15 Dec 2024 10:19:08 -0800 Subject: [PATCH 08/14] add --verbose to node-gyp --- bindings/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bindings/package.json b/bindings/package.json index d1530060..4ccf0504 100644 --- a/bindings/package.json +++ b/bindings/package.json @@ -2,7 +2,7 @@ "private": true, "scripts": { "build": "npm run build:package && npm run build:test", - "build:package": "cross-replace node-gyp configure --arch=$TARGET_ARCH && node-gyp build --arch=$TARGET_ARCH", + "build:package": "cross-replace node-gyp configure --verbose --arch=$TARGET_ARCH && node-gyp build --verbose --arch=$TARGET_ARCH", "build:test": "tsc -b test", "clean": "npm run clean:gyp && npm run clean:libduckdb && npm run clean:package", "clean:gyp": "node-gyp clean", From 43f6fad35338d6b4c4cc87f608329d09ad4cebce Mon Sep 17 00:00:00 2001 From: Jeff Raymakers Date: Sun, 15 Dec 2024 10:49:36 -0800 Subject: [PATCH 09/14] try set CC and CXX --- .github/workflows/DuckDBNodeBindingsAndAPI.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/DuckDBNodeBindingsAndAPI.yml b/.github/workflows/DuckDBNodeBindingsAndAPI.yml index 966fa22d..462ecc7e 100644 --- a/.github/workflows/DuckDBNodeBindingsAndAPI.yml +++ b/.github/workflows/DuckDBNodeBindingsAndAPI.yml @@ -121,7 +121,9 @@ jobs: runs-on: ubuntu-latest if: ${{ github.event_name != 'workflow_dispatch' || inputs.linux_arm64 }} env: - TARGET_ARCH: ${{ 'arm64' }} + TARGET_ARCH: arm64 + CC: aarch64-linux-gnu-gcc + CXX: aarch64-linux-gnu-g++ steps: - uses: actions/checkout@v4 From 1bcd96429bd72cfe697a59e7dc72975ae4352773 Mon Sep 17 00:00:00 2001 From: Jeff Raymakers Date: Sun, 15 Dec 2024 10:58:44 -0800 Subject: [PATCH 10/14] try install aarch64 cross-compilers --- .github/workflows/DuckDBNodeBindingsAndAPI.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/DuckDBNodeBindingsAndAPI.yml b/.github/workflows/DuckDBNodeBindingsAndAPI.yml index 462ecc7e..1e78d2cd 100644 --- a/.github/workflows/DuckDBNodeBindingsAndAPI.yml +++ b/.github/workflows/DuckDBNodeBindingsAndAPI.yml @@ -125,6 +125,9 @@ jobs: CC: aarch64-linux-gnu-gcc CXX: aarch64-linux-gnu-g++ steps: + - name: Install aarch64 compilers + run: apt install binutils-aarch64-linux-gnu gcc-aarch64-linux-gnu g++-aarch64-linux-gnu + - uses: actions/checkout@v4 - uses: pnpm/action-setup@v3 From 4ea9ffca64d2dcee95adf2ae704f8b3e74d68c22 Mon Sep 17 00:00:00 2001 From: Jeff Raymakers Date: Sun, 15 Dec 2024 11:02:57 -0800 Subject: [PATCH 11/14] add sudo --- .github/workflows/DuckDBNodeBindingsAndAPI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/DuckDBNodeBindingsAndAPI.yml b/.github/workflows/DuckDBNodeBindingsAndAPI.yml index 1e78d2cd..47a2f0ee 100644 --- a/.github/workflows/DuckDBNodeBindingsAndAPI.yml +++ b/.github/workflows/DuckDBNodeBindingsAndAPI.yml @@ -126,7 +126,7 @@ jobs: CXX: aarch64-linux-gnu-g++ steps: - name: Install aarch64 compilers - run: apt install binutils-aarch64-linux-gnu gcc-aarch64-linux-gnu g++-aarch64-linux-gnu + run: sudo apt install binutils-aarch64-linux-gnu gcc-aarch64-linux-gnu g++-aarch64-linux-gnu - uses: actions/checkout@v4 From 1f4e198582ae2be9c82ad50beea826089a2ae4b7 Mon Sep 17 00:00:00 2001 From: Jeff Raymakers Date: Sun, 15 Dec 2024 11:07:25 -0800 Subject: [PATCH 12/14] remove arm64 tests, add publish action --- .github/workflows/DuckDBNodeBindingsAndAPI.yml | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/.github/workflows/DuckDBNodeBindingsAndAPI.yml b/.github/workflows/DuckDBNodeBindingsAndAPI.yml index 47a2f0ee..471996e1 100644 --- a/.github/workflows/DuckDBNodeBindingsAndAPI.yml +++ b/.github/workflows/DuckDBNodeBindingsAndAPI.yml @@ -33,6 +33,11 @@ on: type: boolean required: true default: false + publish_linux_arm64: + description: 'Publish Bindings for Linux arm64' + type: boolean + required: true + default: false macos_arm64: description: 'Run on Mac OS X arm64' type: boolean @@ -141,9 +146,16 @@ jobs: working-directory: bindings run: pnpm run build - - name: Bindings - Test - working-directory: bindings - run: pnpm test + - name: Git Status + if: ${{ inputs.publish_linux_arm64 }} + run: git status + + - name: Publish - Bindings - Linux arm64 + if: ${{ inputs.publish_linux_arm64 }} + working-directory: bindings/pkgs/@duckdb/node-bindings-linux-arm64 + run: pnpm publish ${{ inputs.publish_dry_run && '--dry-run' || '' }} --publish-branch ${{ github.ref_name }} --access public + env: + NPM_AUTH_TOKEN: ${{ secrets.DUCKDB_NPM_TOKEN }} macos_arm64: name: Mac OS X arm64 From 8c36f2691f50779d513ab5e2ad66c978b1ee5c7e Mon Sep 17 00:00:00 2001 From: Jeff Raymakers Date: Sun, 15 Dec 2024 11:15:01 -0800 Subject: [PATCH 13/14] remove package-specific publish controls --- .../workflows/DuckDBNodeBindingsAndAPI.yml | 85 ++++++++++--------- 1 file changed, 45 insertions(+), 40 deletions(-) diff --git a/.github/workflows/DuckDBNodeBindingsAndAPI.yml b/.github/workflows/DuckDBNodeBindingsAndAPI.yml index 471996e1..6b35376d 100644 --- a/.github/workflows/DuckDBNodeBindingsAndAPI.yml +++ b/.github/workflows/DuckDBNodeBindingsAndAPI.yml @@ -3,6 +3,11 @@ on: pull_request: workflow_dispatch: inputs: + publish: + description: 'Publish' + type: boolean + required: true + default: false publish_dry_run: description: 'Publish Dry Run' type: boolean @@ -13,51 +18,51 @@ on: type: boolean required: true default: false - publish_linux_x64: - description: 'Publish Bindings for Linux x64' - type: boolean - required: true - default: false - publish_bindings: - description: 'Publish Bindings (from Linux x64)' - type: boolean - required: true - default: false - publish_api: - description: 'Publish API (from Linux x64)' - type: boolean - required: true - default: false + # publish_linux_x64: + # description: 'Publish Bindings for Linux x64' + # type: boolean + # required: true + # default: false + # publish_bindings: + # description: 'Publish Bindings (from Linux x64)' + # type: boolean + # required: true + # default: false + # publish_api: + # description: 'Publish API (from Linux x64)' + # type: boolean + # required: true + # default: false linux_arm64: description: 'Run on Linux arm64' type: boolean required: true default: false - publish_linux_arm64: - description: 'Publish Bindings for Linux arm64' - type: boolean - required: true - default: false + # publish_linux_arm64: + # description: 'Publish Bindings for Linux arm64' + # type: boolean + # required: true + # default: false macos_arm64: description: 'Run on Mac OS X arm64' type: boolean required: true default: false - publish_darwin_arm64: - description: 'Publish Bindings for Darwin arm64' - type: boolean - required: true - default: false + # publish_darwin_arm64: + # description: 'Publish Bindings for Darwin arm64' + # type: boolean + # required: true + # default: false windows_x64: description: 'Run on Windows x64' type: boolean required: true default: false - publish_win32_x64: - description: 'Publish Bindings for Win32 x64' - type: boolean - required: true - default: false + # publish_win32_x64: + # description: 'Publish Bindings for Win32 x64' + # type: boolean + # required: true + # default: false repository_dispatch: concurrency: @@ -97,25 +102,25 @@ jobs: run: pnpm test - name: Git Status - if: ${{ inputs.publish_linux_x64 || inputs.publish_bindings || inputs.publish_api }} + if: ${{ inputs.publish }} run: git status - name: Publish - Bindings - Linux x64 - if: ${{ inputs.publish_linux_x64 }} + if: ${{ inputs.publish }} working-directory: bindings/pkgs/@duckdb/node-bindings-linux-x64 run: pnpm publish ${{ inputs.publish_dry_run && '--dry-run' || '' }} --publish-branch ${{ github.ref_name }} --access public env: NPM_AUTH_TOKEN: ${{ secrets.DUCKDB_NPM_TOKEN }} - name: Publish - Bindings - if: ${{ inputs.publish_bindings }} + if: ${{ inputs.publish }} working-directory: bindings/pkgs/@duckdb/node-bindings run: pnpm publish ${{ inputs.publish_dry_run && '--dry-run' || '' }} --publish-branch ${{ github.ref_name }} --access public env: NPM_AUTH_TOKEN: ${{ secrets.DUCKDB_NPM_TOKEN }} - name: Publish - API - if: ${{ inputs.publish_api }} + if: ${{ inputs.publish }} working-directory: api/pkgs/@duckdb/node-api run: pnpm publish ${{ inputs.publish_dry_run && '--dry-run' || '' }} --publish-branch ${{ github.ref_name }} --access public env: @@ -147,11 +152,11 @@ jobs: run: pnpm run build - name: Git Status - if: ${{ inputs.publish_linux_arm64 }} + if: ${{ inputs.publish }} run: git status - name: Publish - Bindings - Linux arm64 - if: ${{ inputs.publish_linux_arm64 }} + if: ${{ inputs.publish }} working-directory: bindings/pkgs/@duckdb/node-bindings-linux-arm64 run: pnpm publish ${{ inputs.publish_dry_run && '--dry-run' || '' }} --publish-branch ${{ github.ref_name }} --access public env: @@ -188,11 +193,11 @@ jobs: run: pnpm test - name: Git Status - if: ${{ inputs.publish_darwin_arm64 }} + if: ${{ inputs.publish }} run: git status - name: Publish - Bindings - Darwin arm64 - if: ${{ inputs.publish_darwin_arm64 }} + if: ${{ inputs.publish }} working-directory: bindings/pkgs/@duckdb/node-bindings-darwin-arm64 run: pnpm publish ${{ inputs.publish_dry_run && '--dry-run' || '' }} --publish-branch ${{ github.ref_name }} --access public env: @@ -229,11 +234,11 @@ jobs: run: pnpm test - name: Git Status - if: ${{ inputs.publish_win32_x64 }} + if: ${{ inputs.publish }} run: git status - name: Publish - Bindings - Win32 x64 - if: ${{ inputs.publish_win32_x64 }} + if: ${{ inputs.publish }} working-directory: bindings/pkgs/@duckdb/node-bindings-win32-x64 run: pnpm publish ${{ inputs.publish_dry_run && '--dry-run' || '' }} --publish-branch ${{ github.ref_name }} --access public env: From f2b08fcd7e04b0875bc07315db0b38673fc3ff97 Mon Sep 17 00:00:00 2001 From: Jeff Raymakers Date: Sun, 15 Dec 2024 19:26:47 -0800 Subject: [PATCH 14/14] README tweaks --- api/pkgs/@duckdb/node-api/README.md | 2 +- bindings/pkgs/@duckdb/node-bindings-linux-arm64/README.md | 4 ++-- bindings/pkgs/@duckdb/node-bindings/README.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/api/pkgs/@duckdb/node-api/README.md b/api/pkgs/@duckdb/node-api/README.md index 576980dd..b4f954ef 100644 --- a/api/pkgs/@duckdb/node-api/README.md +++ b/api/pkgs/@duckdb/node-api/README.md @@ -27,8 +27,8 @@ Some features are not yet complete: ### Supported Platforms +- Linux arm64 (experimental) - Linux x64 -- Linux arm64 - Mac OS X (Darwin) arm64 (Apple Silicon) - Windows (Win32) x64 diff --git a/bindings/pkgs/@duckdb/node-bindings-linux-arm64/README.md b/bindings/pkgs/@duckdb/node-bindings-linux-arm64/README.md index d3096318..32fb1054 100644 --- a/bindings/pkgs/@duckdb/node-bindings-linux-arm64/README.md +++ b/bindings/pkgs/@duckdb/node-bindings-linux-arm64/README.md @@ -1,5 +1,5 @@ -# DuckDB Node Bindings: Linux arm64 +# DuckDB Node Bindings: Linux arm64 (experimental) -Binaries supporting [Node](https://nodejs.org/) bindings to the [DuckDB C API](https://duckdb.org/docs/api/c/overview) for Linux arm64. +Binaries supporting [Node](https://nodejs.org/) bindings to the [DuckDB C API](https://duckdb.org/docs/api/c/overview) for Linux arm64. These are experimental; they are not fully tested. See [@duckdb/node-bindings](https://www.npmjs.com/package/@duckdb/node-bindings) for a low-level API that uses these binaries, or [@duckdb/node-api](https://www.npmjs.com/package/@duckdb/node-api) for a high-level API built on those bindings. diff --git a/bindings/pkgs/@duckdb/node-bindings/README.md b/bindings/pkgs/@duckdb/node-bindings/README.md index 9c7cbd52..ceef8e8d 100644 --- a/bindings/pkgs/@duckdb/node-bindings/README.md +++ b/bindings/pkgs/@duckdb/node-bindings/README.md @@ -6,7 +6,7 @@ See [@duckdb/node-api](https://www.npmjs.com/package/@duckdb/node-api) for a hig ### Supported Platforms +- Linux arm64 (experimental) - Linux x64 -- Linux arm64 - Mac OS X (Darwin) arm64 (Apple Silicon) - Windows (Win32) x64