Skip to content

Commit 9ce48a9

Browse files
committed
feat: Add javascript bindings
1 parent fd28241 commit 9ce48a9

35 files changed

Lines changed: 4177 additions & 0 deletions

File tree

.github/workflows/build.yml

Lines changed: 205 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ jobs:
7979
- run: cargo fmt --all -- --check
8080
working-directory: ./bindings/c
8181

82+
- run: cargo fmt --all -- --check
83+
working-directory: ./bindings/javascript
84+
8285
- run: cargo fmt --all -- --check
8386
working-directory: ./bindings/python
8487

@@ -102,10 +105,12 @@ jobs:
102105
with:
103106
workspaces: |
104107
css-inline
108+
bindings/javascript
105109
bindings/python
106110
bindings/ruby
107111
bindings/wasm
108112
bindings/c
113+
bindings/profiler
109114
110115
- name: Rust
111116
run: cargo clippy -- -D warnings
@@ -119,6 +124,10 @@ jobs:
119124
run: cargo clippy -- -D warnings
120125
working-directory: ./bindings/python
121126

127+
- name: JavaScript
128+
run: cargo clippy -- -D warnings
129+
working-directory: ./bindings/javascript
130+
122131
- name: Ruby
123132
run: cargo clippy -- -D warnings
124133
working-directory: ./bindings/ruby
@@ -148,6 +157,202 @@ jobs:
148157
- run: cargo build
149158
working-directory: ./css-inline
150159

160+
test-javascript:
161+
strategy:
162+
fail-fast: false
163+
matrix:
164+
settings:
165+
- host: macos-12
166+
target: x86_64-apple-darwin
167+
build: |
168+
yarn build
169+
strip -x *.node
170+
- host: windows-2022
171+
build: yarn build
172+
target: x86_64-pc-windows-msvc
173+
- host: ubuntu-22.04
174+
target: x86_64-unknown-linux-gnu
175+
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian
176+
build: |-
177+
set -e &&
178+
yarn build --target x86_64-unknown-linux-gnu &&
179+
strip *.node
180+
- host: ubuntu-22.04
181+
target: x86_64-unknown-linux-musl
182+
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
183+
build: set -e && yarn build && strip *.node
184+
- host: ubuntu-22.04
185+
target: aarch64-unknown-linux-gnu
186+
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64
187+
build: |-
188+
set -e &&
189+
yarn build --target aarch64-unknown-linux-gnu &&
190+
aarch64-unknown-linux-gnu-strip *.node
191+
- host: ubuntu-22.04
192+
target: armv7-unknown-linux-gnueabihf
193+
setup: |
194+
sudo apt-get update
195+
sudo apt-get install gcc-arm-linux-gnueabihf -y
196+
build: |
197+
yarn build --target armv7-unknown-linux-gnueabihf
198+
arm-linux-gnueabihf-strip *.node
199+
- host: ubuntu-22.04
200+
target: aarch64-unknown-linux-musl
201+
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
202+
build: |-
203+
set -e &&
204+
rustup target add aarch64-unknown-linux-musl &&
205+
yarn build --target aarch64-unknown-linux-musl &&
206+
/aarch64-linux-musl-cross/bin/aarch64-linux-musl-strip *.node
207+
node:
208+
- '18'
209+
- '20'
210+
211+
name: NodeJS ${{ matrix.node }} on ${{ matrix.settings.target }}
212+
runs-on: ${{ matrix.settings.host }}
213+
env:
214+
DEBUG: napi:*
215+
APP_NAME: css-inline
216+
MACOSX_DEPLOYMENT_TARGET: '10.13'
217+
steps:
218+
- uses: actions/checkout@v4
219+
220+
- name: Setup node
221+
uses: actions/setup-node@v4
222+
if: ${{ !matrix.settings.docker }}
223+
with:
224+
node-version: ${{ matrix.node }}
225+
cache: yarn
226+
cache-dependency-path: bindings/javascript/yarn.lock
227+
228+
- name: Install Rust
229+
uses: dtolnay/rust-toolchain@stable
230+
if: ${{ !matrix.settings.docker }}
231+
with:
232+
toolchain: stable
233+
targets: ${{ matrix.settings.target }}
234+
235+
- name: Cache cargo
236+
uses: actions/cache@v3
237+
with:
238+
path: |
239+
~/.cargo/registry/index/
240+
~/.cargo/registry/cache/
241+
~/.cargo/git/db/
242+
.cargo-cache
243+
target/
244+
key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }}
245+
246+
- uses: goto-bus-stop/setup-zig@v2
247+
if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }}
248+
with:
249+
version: 0.11.0
250+
251+
- name: Setup toolchain
252+
run: ${{ matrix.settings.setup }}
253+
if: ${{ matrix.settings.setup }}
254+
shell: bash
255+
256+
- name: Config yarn (x86_64-unknown-linux-musl)
257+
if: matrix.settings.target == 'x86_64-unknown-linux-musl'
258+
run: yarn config set supportedArchitectures.libc "musl"
259+
working-directory: bindings/javascript
260+
261+
- name: Config yarn (aarch64-unknown-linux-gnu)
262+
if: matrix.settings.target == 'aarch64-unknown-linux-gnu'
263+
run: |
264+
yarn config set supportedArchitectures.cpu "arm64"
265+
yarn config set supportedArchitectures.libc "glibc"
266+
working-directory: bindings/javascript
267+
268+
- name: Config yarn (aarch64-unknown-linux-musl)
269+
if: matrix.settings.target == 'aarch64-unknown-linux-musl'
270+
run: |
271+
yarn config set supportedArchitectures.cpu "arm64"
272+
yarn config set supportedArchitectures.libc "musl"
273+
working-directory: bindings/javascript
274+
275+
- name: Config yarn (armv7-unknown-linux-gnueabihf)
276+
if: matrix.settings.target == 'armv7-unknown-linux-gnueabihf'
277+
run: yarn config set supportedArchitectures.cpu "arm"
278+
working-directory: bindings/javascript
279+
280+
- name: Install dependencies
281+
run: yarn install
282+
working-directory: bindings/javascript
283+
284+
- name: Build in docker
285+
uses: addnab/docker-run-action@v3
286+
if: ${{ matrix.settings.docker }}
287+
with:
288+
image: ${{ matrix.settings.docker }}
289+
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/bindings/javascript'
290+
run: ${{ matrix.settings.build }}
291+
292+
- name: Build
293+
run: ${{ matrix.settings.build }}
294+
if: ${{ !matrix.settings.docker }}
295+
shell: bash
296+
working-directory: bindings/javascript
297+
298+
- name: Set up QEMU (aarch64)
299+
uses: docker/setup-qemu-action@v3
300+
if: ${{ contains(fromJson('["aarch64-unknown-linux-gnu", "aarch64-unknown-linux-musl"]'), matrix.settings.target) }}
301+
with:
302+
platforms: arm64
303+
304+
- name: Set up QEMU (armv7-unknown-linux-gnueabihf)
305+
uses: docker/setup-qemu-action@v3
306+
if: matrix.settings.target == 'armv7-unknown-linux-gnueabihf'
307+
with:
308+
platforms: arm
309+
310+
- run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
311+
if: ${{ contains(fromJson('["aarch64-unknown-linux-gnu", "aarch64-unknown-linux-musl", "armv7-unknown-linux-gnueabihf"]'), matrix.settings.target) }}
312+
313+
- name: Test (x86_64-apple-darwin & x86_64-pc-windows-msvc)
314+
if: ${{ contains(fromJson('["x86_64-apple-darwin", "x86_64-pc-windows-msvc"]'), matrix.settings.target) }}
315+
run: yarn test
316+
working-directory: bindings/javascript
317+
318+
- name: Test (x86_64-unknown-linux-gnu)
319+
if: matrix.settings.target == 'x86_64-unknown-linux-gnu'
320+
run: docker run --rm -v $(pwd):/build -w /build/bindings/javascript node:${{ matrix.node }}-slim yarn test
321+
322+
- name: Test (x86_64-unknown-linux-musl)
323+
if: matrix.settings.target == 'x86_64-unknown-linux-musl'
324+
run: docker run --rm -v $(pwd):/build -w /build/bindings/javascript node:${{ matrix.node }}-alpine yarn test
325+
326+
- name: Test (aarch64-unknown-linux-gnu)
327+
if: matrix.settings.target == 'aarch64-unknown-linux-gnu'
328+
uses: addnab/docker-run-action@v3
329+
with:
330+
image: node:${{ matrix.node }}-slim
331+
options: '--platform linux/arm64 -v ${{ github.workspace }}:/build -w /build/bindings/javascript'
332+
run: |
333+
set -e
334+
yarn test
335+
336+
- name: Test in docker (aarch64-unknown-linux-musl)
337+
if: matrix.settings.target == 'aarch64-unknown-linux-musl'
338+
uses: addnab/docker-run-action@v3
339+
with:
340+
image: node:${{ matrix.node }}-alpine
341+
options: '--platform linux/arm64 -v ${{ github.workspace }}:/build -w /build/bindings/javascript'
342+
run: |
343+
set -e
344+
yarn test
345+
346+
- name: Test in docker (armv7-unknown-linux-gnueabihf)
347+
if: matrix.settings.target == 'armv7-unknown-linux-gnueabihf'
348+
uses: addnab/docker-run-action@v3
349+
with:
350+
image: node:${{ matrix.node }}-bullseye-slim
351+
options: '--platform linux/arm/v7 -v ${{ github.workspace }}:/build -w /build/bindings/javascript'
352+
run: |
353+
set -e
354+
yarn test
355+
151356
test-python:
152357
strategy:
153358
fail-fast: false

0 commit comments

Comments
 (0)