Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: flight SQL sdk #29

Merged
merged 9 commits into from
Nov 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
208 changes: 184 additions & 24 deletions .github/workflows/build-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,53 +3,213 @@ on:
push:
branches: ["main"]
pull_request:
workflow_dispatch:
env:
CI: true
DEBUG: napi:*
APP_NAME: flight-sql-client
MACOSX_DEPLOYMENT_TARGET: '10.13'
CARGO_INCREMENTAL: '1'
FLIGHT_SQL_PATH: ./packages/flight-sql-client/
permissions:
contents: write
id-token: write
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: Build, lint, and test on Node ${{ matrix.node }} and ${{ matrix.os }}

runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
node: [20, 22]
os: [ubuntu-latest, macOS-latest]

settings:
- host: macos-13
target: x86_64-apple-darwin
build: pnpm build:rust --target x86_64-apple-darwin && pnpm build:js
- host: ubuntu-latest
target: x86_64-unknown-linux-gnu
# using vm instead of docker, but leaving in case we need this for other targets
# docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian
build: pnpm build:rust --target x86_64-unknown-linux-gnu && pnpm build:js
test: cd tests/c1-integration && pnpm run test
- host: macos-latest
target: aarch64-apple-darwin
build: pnpm build:rust --target aarch64-apple-darwin && pnpm build:js
name: stable - ${{ matrix.settings.target }} - node@20
runs-on: ${{ matrix.settings.host }}
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Use Node ${{ matrix.node }}
- name: Setup node
uses: actions/setup-node@v4
if: ${{ !matrix.settings.docker }}
with:
node-version: ${{ matrix.node }}

node-version: 20
- name: Install pnpm
id: pnpm-install
uses: pnpm/action-setup@v3
with:
version: 9.8.0
run_install: false

- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT

- uses: actions/cache@v4
name: Setup pnpm cache
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Setup pnpm cache
uses: actions/cache@v4
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
key: ${{ runner.os }}_${{ matrix.settings.target }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-

- name: Install dependencies and build
run: pnpm install --frozen-lockfile && pnpm build

${{ runner.os }}_${{ matrix.settings.target }}-pnpm-store-
- name: Cache cargo
uses: actions/cache@v4
with:
path: |
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
.cargo-cache
target/
key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }}
- name: Setup toolchain
run: ${{ matrix.settings.setup }}
if: ${{ matrix.settings.setup }}
shell: bash
- name: Install dependencies and buld
run: pnpm install --frozen-lockfile
- name: Lint
run: pnpm run lint:ci

- name: Test
run: pnpm run test:ci
- name: Build in docker
uses: addnab/docker-run-action@v3
if: ${{ matrix.settings.docker }}
with:
image: ${{ matrix.settings.docker }}
options: '--user 0:0 -v ${{ github.workspace }}/.cargo-cache/git/db:/usr/local/cargo/git/db -v ${{ github.workspace }}/.cargo/registry/cache:/usr/local/cargo/registry/cache -v ${{ github.workspace }}/.cargo/registry/index:/usr/local/cargo/registry/index -v ${{ github.workspace }}:/build -w /build'
run: ${{ matrix.settings.build }}
- name: Build
run: ${{ matrix.settings.build }}
if: ${{ !matrix.settings.docker }}
shell: bash
- name: Run unit tests
run: pnpm test:ci
if: ${{ !matrix.settings.docker }}
shell: bash
# we only run integration tests on linux vm where we have access to docker we can talk to
- name: Integration tests
run: ${{ matrix.settings.test }}
if: ${{ !matrix.settings.test }}
shell: bash
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: bindings-${{ matrix.settings.target }}
path: ${{ env.FLIGHT_SQL_PATH }}${{ env.APP_NAME }}.*.node
if-no-files-found: error
test-macOS-binding:
name: Test bindings on ${{ matrix.settings.target }} - node@${{ matrix.node }}
needs:
- build
strategy:
fail-fast: false
matrix:
settings:
- host: macos-latest
target: aarch64-apple-darwin
architecture: arm64
- host: macos-13
target: x86_64-apple-darwin
architecture: x64
node:
- '20'
- '22'
runs-on: ${{ matrix.settings.host }}
steps:
- uses: actions/checkout@v4
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
architecture: ${{ matrix.settings.architecture }}
- name: Install pnpm
id: pnpm-install
uses: pnpm/action-setup@v3
with:
version: 9.8.0
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Setup pnpm cache
uses: actions/cache@v4
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}_${{ matrix.settings.target }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}_${{ matrix.settings.target }}-pnpm-store-
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: bindings-${{ matrix.settings.target }}
path: ${{ env.FLIGHT_SQL_PATH }}
- name: List packages
working-directory: ${{ env.FLIGHT_SQL_PATH }}
run: ls -R .
shell: bash
- name: Test bindings
working-directory: ${{ env.FLIGHT_SQL_PATH }}
run: pnpm test
test-linux-x64-gnu-binding:
name: Test bindings on Linux-x64-gnu - node@${{ matrix.node }}
needs:
- build
strategy:
fail-fast: false
matrix:
node:
- '20'
- '22'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
- name: Install pnpm
id: pnpm-install
uses: pnpm/action-setup@v3
with:
version: 9.8.0
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Setup pnpm cache
uses: actions/cache@v4
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}_x86_64-unknown-linux-gnu-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}_x86_64-unknown-linux-gnu-pnpm-store-
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: bindings-x86_64-unknown-linux-gnu
path: ${{ env.FLIGHT_SQL_PATH }}
- name: List packages
working-directory: ${{ env.FLIGHT_SQL_PATH }}
run: ls -R .
shell: bash
- name: Test bindings
working-directory: ${{ env.FLIGHT_SQL_PATH }}
run: pnpm test
46 changes: 0 additions & 46 deletions .github/workflows/integration-test.yml

This file was deleted.

6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,9 @@ coverage
.vscode
.turbo
.ceramic-one

# rust
target
Cargo.lock
# napi binaries
*.node
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ TypeScript client and utilities for [Ceramic One](https://github.com/ceramicnetw
| Name | Description | Version |
| ------------------------------------------------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------- |
| [events](./packages/events) | Events encoding, signing and other utilities | ![npm version](https://img.shields.io/npm/v/@ceramic-sdk/events.svg) |
| [flight-sql-client](./packages/flight-sql-client) | Flight SQL client for ceramic one using WASM | ![npm version](https://img.shields.io/npm/v/@ceramic-sdk/flight-sql-client.svg) |
| [http-client](./packages/http-client) | HTTP client for Ceramic One | ![npm version](https://img.shields.io/npm/v/@ceramic-sdk/http-client.svg) |
| [identifiers](./packages/identifiers) | Ceramic streams and commits identifiers | ![npm version](https://img.shields.io/npm/v/@ceramic-sdk/identifiers.svg) |
| [model-protocol](./packages/model-protocol) | Model streams protocol | ![npm version](https://img.shields.io/npm/v/@ceramic-sdk/model-protocol.svg) |
Expand All @@ -27,6 +28,10 @@ pnpm test # run all tests (unit and integration, requires docker to be running)
pnpm test:ci # run only unit tests
```

## CI

In order to specify targets for WASM builds on CI, the build script is split into `pnpm build:rust` which allows passing `--target TARGET_TRIPLE` and `pnpm build:js`.

## License

Dual licensed under MIT and Apache 2
Dual licensed under MIT and Apache 2
13 changes: 10 additions & 3 deletions biome.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@
"formatter": {
"enabled": true,
"formatWithErrors": false,
"ignore": [],
"ignore": [
"./packages/flight-sql-client/index.d.ts",
"./packages/flight-sql-client/index.js"
],
"indentStyle": "space",
"lineWidth": 80
},
Expand All @@ -23,7 +26,11 @@
},
"linter": {
"enabled": true,
"ignore": ["*.gen.ts"],
"ignore": [
"*.gen.ts",
"./packages/flight-sql-client/index.d.ts",
"./packages/flight-sql-client/index.js"
],
"rules": {
"recommended": true
}
Expand All @@ -33,4 +40,4 @@
"clientKind": "git",
"useIgnoreFile": true
}
}
}
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
"packageManager": "[email protected]",
"scripts": {
"build": "pnpm --filter \"@ceramic-sdk/*\" build && turbo run build:js",
"build:rust": "pnpm --filter \"@ceramic-sdk/flight-sql-client\" build",
"build:js": "pnpm --filter \"@ceramic-sdk/*\" --filter !@ceramic-sdk/flight-sql-client build && turbo run build:js",
"docs": "typedoc",
"lint": "biome check --write apps/* packages/* tests/*",
"lint:ci": "biome ci packages/* tests/*",
Expand Down
3 changes: 3 additions & 0 deletions packages/flight-sql-client/.cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[target.aarch64-unknown-linux-musl]
linker = "aarch64-linux-musl-gcc"
rustflags = ["-C", "target-feature=-crt-static"]
Loading