name: Node on: push: branches: - main pull_request: paths: - node/** - rust/ffi/node/** - .github/workflows/node.yml - docker-compose.yml concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true env: # Disable full debug symbol generation to speed up CI build and keep memory down # "1" means line tables only, which is useful for panic tracebacks. # # Use native CPU to accelerate tests if possible, especially for f16 # target-cpu=haswell fixes failing ci build RUSTFLAGS: "-C debuginfo=1 -C target-cpu=haswell -C target-feature=+f16c,+avx2,+fma" RUST_BACKTRACE: "1" jobs: linux: name: Linux (Node ${{ matrix.node-version }}) timeout-minutes: 30 strategy: matrix: node-version: [ "18", "20" ] runs-on: "ubuntu-22.04" defaults: run: shell: bash working-directory: node steps: - uses: actions/checkout@v4 with: fetch-depth: 0 lfs: true - uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} cache: 'npm' cache-dependency-path: node/package-lock.json - uses: Swatinem/rust-cache@v2 - name: Install dependencies run: | sudo apt update sudo apt install -y protobuf-compiler libssl-dev - name: Build run: | npm ci npm run build npm run pack-build npm install --no-save ./dist/lancedb-vectordb-*.tgz # Remove index.node to test with dependency installed rm index.node - name: Test run: npm run test macos: timeout-minutes: 30 runs-on: "macos-13" defaults: run: shell: bash working-directory: node steps: - uses: actions/checkout@v4 with: fetch-depth: 0 lfs: true - uses: actions/setup-node@v3 with: node-version: 20 cache: 'npm' cache-dependency-path: node/package-lock.json - uses: Swatinem/rust-cache@v2 - name: Install dependencies run: brew install protobuf - name: Build run: | npm ci npm run build npm run pack-build npm install --no-save ./dist/lancedb-vectordb-*.tgz # Remove index.node to test with dependency installed rm index.node - name: Test run: | npm run test aws-integtest: timeout-minutes: 45 runs-on: "ubuntu-22.04" defaults: run: shell: bash working-directory: node env: AWS_ACCESS_KEY_ID: ACCESSKEY AWS_SECRET_ACCESS_KEY: SECRETKEY AWS_DEFAULT_REGION: us-west-2 # this one is for s3 AWS_ENDPOINT: http://localhost:4566 # this one is for dynamodb DYNAMODB_ENDPOINT: http://localhost:4566 ALLOW_HTTP: true steps: - uses: actions/checkout@v4 with: fetch-depth: 0 lfs: true - uses: actions/setup-node@v3 with: node-version: 20 cache: 'npm' cache-dependency-path: node/package-lock.json - name: start local stack run: docker compose -f ../docker-compose.yml up -d --wait - name: create s3 run: aws s3 mb s3://lancedb-integtest --endpoint $AWS_ENDPOINT - name: create ddb run: | aws dynamodb create-table \ --table-name lancedb-integtest \ --attribute-definitions '[{"AttributeName": "base_uri", "AttributeType": "S"}, {"AttributeName": "version", "AttributeType": "N"}]' \ --key-schema '[{"AttributeName": "base_uri", "KeyType": "HASH"}, {"AttributeName": "version", "KeyType": "RANGE"}]' \ --provisioned-throughput '{"ReadCapacityUnits": 10, "WriteCapacityUnits": 10}' \ --endpoint-url $DYNAMODB_ENDPOINT - uses: Swatinem/rust-cache@v2 - name: Install dependencies run: | sudo apt update sudo apt install -y protobuf-compiler libssl-dev - name: Build run: | npm ci npm run build npm run pack-build npm install --no-save ./dist/lancedb-vectordb-*.tgz # Remove index.node to test with dependency installed rm index.node - name: Test run: npm run integration-test