Skip to content

Commit

Permalink
CI
Browse files Browse the repository at this point in the history
  • Loading branch information
hannes committed Sep 26, 2023
1 parent e99108e commit 7111f04
Show file tree
Hide file tree
Showing 7 changed files with 404 additions and 3 deletions.
311 changes: 311 additions & 0 deletions .github/workflows/NodeJS.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,311 @@
name: NodeJS
on:
workflow_dispatch:
repository_dispatch:
push:
branches:
- '**'
- '!main'
- '!feature'
tags:
- '**'
paths-ignore:
- '**.md'
- 'data/**'
- 'examples/**'
- 'test/**'
- 'tools/**'
- '!tools/nodejs/**'
- '.github/patches/duckdb-wasm/**'
- '.github/workflows/**'
- '!.github/workflows/NodeJS.yml'

pull_request:
types: [opened, reopened, ready_for_review]
paths-ignore:
- '**.md'
- 'data/**'
- 'examples/**'
- 'test/**'
- 'tools/**'
- '!tools/nodejs/**'
- '.github/patches/duckdb-wasm/**'
- '.github/workflows/**'
- '!.github/workflows/NodeJS.yml'


concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref || '' }}-${{ github.base_ref || '' }}-${{ github.ref != 'refs/heads/main' || github.sha }}
cancel-in-progress: true

env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}
AWS_ACCESS_KEY_ID: ${{ secrets.NODE_PRE_GYP_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.NODE_PRE_GYP_SECRETACCESSKEY }}

jobs:
set-up-npm:
name: Set up NPM
runs-on: ubuntu-20.04
env:
DUCKDB_NODE_BUILD_CACHE: 0
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0

- name: Setup NPM
shell: bash
run: ./scripts/node_version.sh upload
env:
DUCKDB_NODE_BUILD_CACHE: 0 # create a standalone package
NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}}

linux-nodejs:
name: node.js Linux
runs-on: ubuntu-20.04
needs: set-up-npm
env:
TARGET_ARCH: ${{ matrix.target_arch }}
DUCKDB_NODE_BUILD_CACHE: 0
strategy:
matrix:
# node.js current support policy to be found at https://github.com/duckdb/duckdb/tree/main/tools/nodejs#Supported-Node-versions
node: [ '12', '14', '16', '17', '18', '19', '20' ]
target_arch: [ x64, arm64 ]
isRelease:
- ${{ startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main' }}
exclude:
- isRelease: false
node: 12
target_arch: x64
- isRelease: false
node: 14
target_arch: x64
- isRelease: false
node: 16
target_arch: x64
- isRelease: false
node: 17
target_arch: x64
- isRelease: false
node: 18
target_arch: x64
- isRelease: false
node: 19
target_arch: x64
- isRelease: false
node: 12
target_arch: arm64
- isRelease: false
node: 14
target_arch: arm64
- isRelease: false
node: 16
target_arch: arm64
- isRelease: false
node: 17
target_arch: arm64
- isRelease: false
node: 18
target_arch: arm64
- isRelease: false
node: 19
target_arch: arm64
- isRelease: false
node: 20
target_arch: arm64

steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0

- name: Update apt
shell: bash
run: |
sudo apt-get update -y
- name: Install requirements
shell: bash
run: |
sudo apt-get install -y git ninja-build make gcc-multilib g++-multilib wget libssl-dev
- name: Install CMake
shell: bash
run: |
wget https://github.com/Kitware/CMake/releases/download/v3.21.3/cmake-3.21.3-linux-x86_64.sh
chmod +x cmake-3.21.3-linux-x86_64.sh
sudo ./cmake-3.21.3-linux-x86_64.sh --skip-license --prefix=/usr/local
- name: Setup Ccache
uses: hendrikmuhs/ccache-action@main
with:
key: ${{ github.job }}
save: ${{ ( github.ref == 'refs/heads/main' || github.repository != 'duckdb/duckdb' ) && ( matrix.node == '19' ) }}

- name: Build DuckDB
shell: bash
run: |
GEN=ninja EXTENSION_STATIC_BUILD=1 BUILD_TPCH=1 BUILD_HTTPFS=1 STATIC_OPENSSL=1 BUILD_NODE=1 make
- name: Print platform
shell: bash
run: ./build/release/duckdb -c "PRAGMA platform;"

- name: Setup
shell: bash
run: ./scripts/node_version.sh
env:
DUCKDB_NODE_BUILD_CACHE: 0 # create a standalone package
NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}}

- name: Validate Docs
run: npx jsdoc-to-markdown --files tools/nodejs/lib/*.js >> $GITHUB_STEP_SUMMARY
env:
npm_config_yes: true

- name: Node ${{ matrix.node }}
shell: bash
run: ./scripts/node_build.sh ${{ matrix.node }}

osx-nodejs:
if: startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main' || github.repository != 'duckdb/duckdb'
name: node.js OSX
runs-on: macos-latest
needs: linux-nodejs
strategy:
matrix:
target_arch: [ x64, arm64 ]
node: [ '12', '14', '16', '17', '18', '19', '20' ]
isRelease:
- ${{ startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main' }}
exclude:
- isRelease: false
node: 12
- isRelease: false
node: 14
- isRelease: false
node: 16
- isRelease: false
node: 17
- isRelease: false
node: 18
- target_arch: arm64
node: 12
- target_arch: arm64
node: 14
# these older versions of NodeJS don't have M1 support

env:
TARGET_ARCH: ${{ matrix.target_arch }}
DUCKDB_NODE_BUILD_CACHE: 0
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0

- name: Setup Ccache
uses: hendrikmuhs/ccache-action@main
with:
key: ${{ github.job }}-${{ matrix.target_arch }}
save: ${{ ( github.ref == 'refs/heads/main' || github.repository != 'duckdb/duckdb' ) && ( matrix.node == '19' ) }}

- name: Build DuckDB
shell: bash
if: matrix.target_arch == 'x64'
run: |
brew install openssl ninja
export OPENSSL_ROOT_DIR=`brew --prefix openssl`
echo $OPENSSL_ROOT_DIR
GEN=ninja BUILD_TPCH=1 BUILD_HTTPFS=1 STATIC_OPENSSL=1 BUILD_NODE=1 make
- name: Build DuckDB
shell: bash
if: matrix.target_arch == 'arm64'
run: |
brew install ninja
GEN=ninja BUILD_TPCH=1 BUILD_NODE=1 make
- name: Print platform
shell: bash
run: ./build/release/duckdb -c "PRAGMA platform;"

- name: Setup
shell: bash
run: ./scripts/node_version.sh
env:
NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}}

- name: Node ${{ matrix.node }}
shell: bash
run: ./scripts/node_build.sh ${{ matrix.node }}

win-nodejs:
name: node.js Windows
runs-on: windows-latest
needs: linux-nodejs
env:
npm_config_msvs_version: 2019

strategy:
matrix:
node: [ '12', '14', '16', '17', '18', '19', '20' ]
isRelease:
- ${{ startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main' }}
exclude:
- isRelease: false
node: 12
- isRelease: false
node: 14
- isRelease: false
node: 16
- isRelease: false
node: 17
- isRelease: false
node: 18
- isRelease: false
node: 19

steps:
- uses: actions/setup-python@v4
with:
python-version: '3.8'

- uses: actions/checkout@v3
with:
fetch-depth: 0

- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node }}

- name: Versions
shell: bash
run: |
systeminfo
node -v
npm -v
- name: Windows Build Tools
shell: bash
run: |
choco install visualstudio2019-workload-vctools -y
- name: Node Version
shell: bash
run: ./scripts/node_version.sh
env:
NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}}

- name: Setup Ccache
uses: hendrikmuhs/ccache-action@main
with:
key: ${{ github.job }}-${{ matrix.node }}
save: ${{ github.ref == 'refs/heads/main' || github.repository != 'duckdb/duckdb' }}
variant: sccache

- name: Node
shell: bash
run: ./scripts/node_build_win.sh
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
src/duckdb
node_modules
build
lib/binding
test/support/big.db
.DS_Store
2 changes: 0 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@ clean:
rm -rf lib/binding/
rm -f test/support/big.db-journal
rm -rf ./node_modules/
rm -rf src/duckdb/
rm -f binding.gyp

complete_build:
npm install
Expand Down
39 changes: 39 additions & 0 deletions scripts/node_build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#!/usr/bin/env bash

set -ex

TARGET_ARCH=${TARGET_ARCH:=x64}
echo targeting arch: $TARGET_ARCH

set +x
source scripts/install_node.sh $1
set -x
make clean
./configure

if [ "$(expr substr $(uname -s) 1 5)" == "Linux" ] && [[ "$TARGET_ARCH" == "arm64" ]] ; then
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu --yes
export CC=aarch64-linux-gnu-gcc
export CXX=aarch64-linux-gnu-g++
fi

npm install --build-from-source --target_arch="$TARGET_ARCH"

./node_modules/.bin/node-pre-gyp reveal --target_arch="$TARGET_ARCH"

if [[ "$TARGET_ARCH" != "arm64" ]] ; then
npm test
else
ARCH=$(file lib/binding/duckdb.node | tr '[:upper:]' '[:lower:]')
if [[ "$ARCH" != *"arm"* ]] ; then
echo "no arch $ARCH"
exit 1
fi
fi

export PATH=$(npm bin):$PATH
./node_modules/.bin/node-pre-gyp package testpackage testbinary --target_arch="$TARGET_ARCH"
if [[ "$GITHUB_REF" =~ ^(refs/heads/main|refs/tags/v.+)$ ]] ; then
./node_modules/.bin/node-pre-gyp publish --target_arch=$TARGET_ARCH
./node_modules/.bin/node-pre-gyp info --target_arch=$TARGET_ARCH
fi
19 changes: 19 additions & 0 deletions scripts/node_build_win.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/usr/bin/env bash

set -e

node --version
npm --version
which node

make clean
./configure

npm install --build-from-source
npm test
npx node-pre-gyp package testpackage testbinary

if [[ "$GITHUB_REF" =~ ^(refs/heads/main|refs/tags/v.+)$ ]] ; then
npx node-pre-gyp publish
npx node-pre-gyp info
fi
Loading

0 comments on commit 7111f04

Please sign in to comment.