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