Revive JavaScript Bindings (#1177)
Summary: Yoga's JavaScript bindings do not work past Node 10, or on recent versions of Ubuntu even using it. This is due to a reliance on `nbind`, a library which is no longer maintained. `nbind` itself abstracts over `embind` running Emscripten to generate an asm.js build, along with building Node native modules. In the meantime, [yoga-layout-prebuilt](https://www.npmjs.com/package/yoga-layout-prebuilt) has been used by the community instead of the official package. https://github.com/facebook/yoga/pull/1177 was contributed as a conversion of bindings created using `nbind` to instead use `embind` directly. I continued building on this to add more: 1. WebAssembly support (required to be async in browsers) 2. CMake + Ninja Build for the 4 flavors 3. TypeScript typings (partially generated) 4. yarn scripts to build (working on macOS, Ubuntu, Windows) 5. A README with some usage and contribution instructions 6. Updated tests to work with Jest, and updated general infra 7. ESLint and clang-format scripts 8. More GitHub actions (and now testing Windows) 9. Probably more I kinda got carried away here lol The plan is to eventually publish this to NPM, but there is a little bit of work after this before that happens. Pull Request resolved: https://github.com/facebook/yoga/pull/1177 Test Plan: The bindings pass Jest tests (both manual and generated). GitHub actions added for the different yarn scripts. Did some manual checks on using the library as TS. Reviewed By: christophpurrer Differential Revision: D42207782 Pulled By: NickGerleman fbshipit-source-id: 1dc5ce440f1c2b9705a005bbdcc86f952785d94e
This commit is contained in:
committed by
Facebook GitHub Bot
parent
8035456330
commit
1813748eaa
25
.github/actions/black/action.yml
vendored
Normal file
25
.github/actions/black/action.yml
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
name: Black Formatter
|
||||
inputs:
|
||||
directory:
|
||||
description: Directory to Lint
|
||||
required: true
|
||||
version:
|
||||
description: pypi version of "black" to use
|
||||
required: false
|
||||
default: 22.3.0
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Ensure supported Python selected
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '>=3.6.2'
|
||||
|
||||
- name: pip install
|
||||
shell: bash
|
||||
run: pip install black==${{ inputs.version }}
|
||||
|
||||
- name: black
|
||||
shell: bash
|
||||
run: black --check ${{ inputs.directory }}
|
7
.github/actions/clang-format/action.yml
vendored
7
.github/actions/clang-format/action.yml
vendored
@@ -18,7 +18,6 @@ runs:
|
||||
- name: clang-format
|
||||
working-directory: ${{ inputs.directory }}
|
||||
shell: bash
|
||||
run: |
|
||||
shopt -s globstar
|
||||
shopt -s nullglob
|
||||
clang-format-${{ inputs.version }} --dry-run --Werror **/*.cpp **/*.h **/*.m **/*.mm
|
||||
env:
|
||||
BASHOPTS: extglob:nullglob
|
||||
run: clang-format-${{ inputs.version }} --dry-run --Werror **/*.{h,hh,hpp,c,cpp,cc,m,mm}
|
||||
|
23
.github/actions/install-emsdk/action.yml
vendored
Normal file
23
.github/actions/install-emsdk/action.yml
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
name: Install emsdk (including emcc)
|
||||
inputs:
|
||||
version:
|
||||
description: EMCC Version to install
|
||||
required: false
|
||||
default: 3.1.28
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Clone emsdk repo
|
||||
working-directory: ${{ runner.temp }}
|
||||
shell: bash
|
||||
run: git clone https://github.com/emscripten-core/emsdk.git
|
||||
|
||||
- name: emdsk install
|
||||
working-directory: ${{ runner.temp }}/emsdk
|
||||
shell: bash
|
||||
run: |
|
||||
./emsdk install ${{ inputs.version }}
|
||||
./emsdk activate ${{ inputs.version }}
|
||||
echo $RUNNER_TEMP/emsdk >> $GITHUB_PATH
|
||||
echo $RUNNER_TEMP/emsdk/upstream/emscripten >> $GITHUB_PATH
|
11
.github/actions/setup-android/action.yml
vendored
11
.github/actions/setup-android/action.yml
vendored
@@ -3,11 +3,8 @@ name: Setup Android envirionment
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Install JDK 1.8
|
||||
uses: actions/setup-java@v1
|
||||
- name: Select Java Version
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: 1.8
|
||||
|
||||
- name: Install NDK 21
|
||||
shell: bash
|
||||
run: echo "y" | /usr/local/lib/android/sdk/tools/bin/sdkmanager --install "ndk;21.3.6528147" --sdk_root=${ANDROID_SDK_ROOT}
|
||||
distribution: temurin
|
||||
java-version: 8
|
||||
|
27
.github/actions/setup-js/action.yml
vendored
Normal file
27
.github/actions/setup-js/action.yml
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
name: Setup JavaScript envirionment
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Install Node
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 18.x
|
||||
|
||||
- name: Install emsdk
|
||||
uses: ./.github/actions/install-emsdk
|
||||
|
||||
- name: Install ninja (Linux)
|
||||
if: ${{ runner.os == 'Linux' }}
|
||||
shell: bash
|
||||
run: sudo apt-get install -y ninja-build
|
||||
|
||||
- name: Install ninja (Windows)
|
||||
if: ${{ runner.os == 'Windows' }}
|
||||
shell: powershell
|
||||
run: choco install ninja
|
||||
|
||||
- name: yarn install
|
||||
shell: bash
|
||||
run: yarn install --frozen-lockfile
|
||||
working-directory: javascript
|
6
.github/actions/setup-website/action.yml
vendored
6
.github/actions/setup-website/action.yml
vendored
@@ -3,11 +3,15 @@ name: Setup Website envirionment
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Install NodeJS 12
|
||||
# TODO: Update to latest when website is moved to the workspace version of
|
||||
# yoga-layout
|
||||
- name: Install Node
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 12.x
|
||||
|
||||
# TODO: the website should be in a yarn workspace with the library, but the
|
||||
# current version of gatsby is incompatible with hoisting.
|
||||
- name: yarn install
|
||||
shell: bash
|
||||
run: yarn install --frozen-lockfile
|
||||
|
5
.github/workflows/validate-android.yml
vendored
5
.github/workflows/validate-android.yml
vendored
@@ -9,11 +9,12 @@ on:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build (${{ matrix.mode }})
|
||||
runs-on: ubuntu-latest
|
||||
name: Build [${{ matrix.os }}][${{ matrix.mode }}]
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
mode: [Debug, Release]
|
||||
os: [ubuntu-latest, windows-latest]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
8
.github/workflows/validate-apple.yml
vendored
8
.github/workflows/validate-apple.yml
vendored
@@ -10,7 +10,6 @@ on:
|
||||
jobs:
|
||||
lint-pods:
|
||||
name: Lint
|
||||
if: ${{ false }} # Apple Build is Broken
|
||||
runs-on: macos-latest
|
||||
|
||||
steps:
|
||||
@@ -21,10 +20,10 @@ jobs:
|
||||
|
||||
- name: pod spec lint
|
||||
run: pod spec lint --verbose
|
||||
continue-on-error: true # Apple Build is Broken
|
||||
|
||||
build-sample:
|
||||
name: Build (${{ matrix.mode }})
|
||||
if: ${{ false }} # Apple Build is Broken
|
||||
name: Build [${{ matrix.mode }}]
|
||||
runs-on: macos-latest
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -37,8 +36,9 @@ jobs:
|
||||
uses: ./.github/actions/setup-apple
|
||||
|
||||
- name: pod install
|
||||
working-directory: ./YogaKit/YogaKitSample
|
||||
run: pod install
|
||||
working-directory: ./YogaKit/YogaKitSample
|
||||
continue-on-error: true # Apple Build is Broken
|
||||
|
||||
# TODO: xcodebuild
|
||||
|
||||
|
74
.github/workflows/validate-js.yml
vendored
Normal file
74
.github/workflows/validate-js.yml
vendored
Normal file
@@ -0,0 +1,74 @@
|
||||
name: JavaScript
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
FORCE_COLOR: 3
|
||||
|
||||
jobs:
|
||||
benchmark:
|
||||
name: Benchmark [${{ matrix.os }}]
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Setup
|
||||
uses: ./.github/actions/setup-js
|
||||
|
||||
- name: yarn benchmark
|
||||
run: yarn benchmark
|
||||
working-directory: javascript
|
||||
|
||||
build:
|
||||
name: Build [${{ matrix.os }}]
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Setup
|
||||
uses: ./.github/actions/setup-js
|
||||
|
||||
- name: yarn build
|
||||
run: yarn build
|
||||
working-directory: javascript
|
||||
|
||||
test:
|
||||
name: Test [${{ matrix.os }}]
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Setup
|
||||
uses: ./.github/actions/setup-js
|
||||
|
||||
- name: yarn test
|
||||
run: yarn test
|
||||
working-directory: javascript
|
||||
|
||||
lint:
|
||||
name: Lint
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: yarn install
|
||||
run: yarn install --frozen-lockfile
|
||||
working-directory: javascript
|
||||
|
||||
- name: yarn lint
|
||||
run: yarn lint
|
||||
working-directory: javascript
|
21
.github/workflows/validate-python.yml
vendored
Normal file
21
.github/workflows/validate-python.yml
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
name: Python
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
format:
|
||||
name: Format
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: black --check
|
||||
uses: ./.github/actions/black
|
||||
with:
|
||||
directory: ${{ github.workspace }}
|
Reference in New Issue
Block a user