From 062dc9d7a1b278ca4ceb0a83a5f74d7f0789f83c Mon Sep 17 00:00:00 2001 From: Andrew Stein Date: Thu, 4 Mar 2021 04:35:37 -0500 Subject: [PATCH 01/11] Replace `emsdk-npm` with simple script --- .gitignore | 1 + cpp/perspective/package.json | 4 ++-- package.json | 1 - scripts/install_emsdk.js | 34 ++++++++++++++++++++++++++++------ scripts/run_emsdk.js | 21 +++++++++++++++++++++ yarn.lock | 4 ---- 6 files changed, 52 insertions(+), 13 deletions(-) create mode 100644 scripts/run_emsdk.js diff --git a/.gitignore b/.gitignore index 399fe25f30..2edf31f086 100644 --- a/.gitignore +++ b/.gitignore @@ -176,3 +176,4 @@ rust/perspective-vieux/pkg rust/perspective-vieux/target rust/perspective-vieux/target2 +.emsdk diff --git a/cpp/perspective/package.json b/cpp/perspective/package.json index 1768b37730..edbf884ec7 100644 --- a/cpp/perspective/package.json +++ b/cpp/perspective/package.json @@ -10,10 +10,10 @@ "dist/cjs/**/*" ], "scripts": { - "build": "yarn emsdk-run node ./build.js", + "build": "node ../../scripts/run_emsdk.js node ./build.js", "clean": "rimraf dist/cpp/build", "test": ":", "test:run": ":", "test:build": ":" } -} +} \ No newline at end of file diff --git a/package.json b/package.json index 8fa2faf885..336f082707 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,6 @@ "cssnano": "^4.1.10", "cssnano-preset-lite": "^1.0.1", "dotenv": "^8.1.0", - "emsdk-npm": "https://github.com/texodus/emsdk-npm.git#bash-sub-fix", "eslint": "^6.6.0", "eslint-config-prettier": "^3.0.1", "eslint-plugin-markdown": "^1.0.2", diff --git a/scripts/install_emsdk.js b/scripts/install_emsdk.js index bb297ce484..e59e4d1e68 100644 --- a/scripts/install_emsdk.js +++ b/scripts/install_emsdk.js @@ -9,23 +9,45 @@ require("dotenv").config({path: "./.perspectiverc"}); -const {execute, execute_throw} = require("./script_utils.js"); +const {execute_throw} = require("./script_utils.js"); const {emscripten} = require("../package.json"); +const path = require("path"); +const os = require("os"); +const fs = require("fs"); + +function base() { + return path.join(__dirname, "..", ".emsdk"); +} + +function emsdk_checkout() { + function git(args) { + execute_throw`git ${args.join(" ")}`; + } + + git(["clone", "https://github.com/emscripten-core/emsdk.git", base()]); +} + +function emsdk(...args) { + const basedir = base(); + const suffix = os.type() == "Windows_NT" ? ".bat" : ""; + const emsdk = path.join(basedir, "emsdk" + suffix); + execute_throw`${emsdk} ${args.join(" ")}`; +} function upgrade() { console.log(`-- Emscripten not found, installing ${emscripten}`); - execute`yarn emsdk-checkout`; - execute`yarn emsdk install ${emscripten}`; - execute`yarn emsdk activate ${emscripten}`; + emsdk_checkout(); + emsdk("install", emscripten); + emsdk("activate", emscripten); console.log(`-- Emscripten ${emscripten} installed`); } function check() { try { - execute_throw`yarn emsdk-run command -v emcc`; + execute_throw`emcc --version`; return true; } catch (e) { - return false; + return fs.existsSync(path.join(__dirname, "..", ".emsdk")); } } diff --git a/scripts/run_emsdk.js b/scripts/run_emsdk.js new file mode 100644 index 0000000000..4217d3801d --- /dev/null +++ b/scripts/run_emsdk.js @@ -0,0 +1,21 @@ +/****************************************************************************** + * + * Copyright (c) 2017, the Perspective Authors. + * + * This file is part of the Perspective library, distributed under the terms of + * the Apache License 2.0. The full license can be found in the LICENSE file. + * + */ + +const {execute_throw} = require("./script_utils.js"); +const path = require("path"); + +try { + const cwd = process.cwd(); + const cmd = process.argv.slice(2).join(" "); + const emsdkdir = path.join(__dirname, "..", ".emsdk"); + execute_throw`cd ${emsdkdir} && . ./emsdk_env.sh && cd ${cwd} && ${cmd}`; +} catch (e) { + console.log(e.message); + process.exit(1); +} diff --git a/yarn.lock b/yarn.lock index 1e7a5a29a9..a5a068b606 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7105,10 +7105,6 @@ emojis-list@^3.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== -"emsdk-npm@https://github.com/texodus/emsdk-npm.git#bash-sub-fix": - version "0.2.2" - resolved "https://github.com/texodus/emsdk-npm.git#19ecbaa3fb2572bd00a87173273815cf5e382fef" - encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" From 26a4c3fce838045c2a57b763454b8e8592209441 Mon Sep 17 00:00:00 2001 From: Tim Paine Date: Wed, 3 Mar 2021 17:53:31 -0500 Subject: [PATCH 02/11] fix binder --- README.md | 2 +- binder/postBuild | 18 +++--------------- binder/requirements.txt | 5 ++--- 3 files changed, 6 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 2d19c6a96a..82363f210b 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ data or streaming updates via [Apache Arrow](https://arrow.apache.org/). |Editable|Streaming|CSV| |[![Editable](https://bl.ocks.org/texodus/raw/45b868833c9f456bd39a51e606412c5d/e590d237a5237790694946018680719c9fef56cb/thumbnail.png)](https://bl.ocks.org/texodus/45b868833c9f456bd39a51e606412c5d)|[![Streaming](https://bl.ocks.org/texodus/raw/9bec2f8041471bafc2c56db2272a9381/c69c2cfacb23015f3aaeab3555a0035702ffdb1c/thumbnail.png)](https://bl.ocks.org/texodus/9bec2f8041471bafc2c56db2272a9381)|[![CSV](https://bl.ocks.org/texodus/raw/02d8fd10aef21b19d6165cf92e43e668/5e78be024893aa651fcdfac816841d54777ccdec/thumbnail.png)](https://bl.ocks.org/texodus/02d8fd10aef21b19d6165cf92e43e668)| |IEX Cloud|NYC Citibike|JupyterLab Plugin| -|[![IEX Cloud](https://bl.ocks.org/texodus/raw/eb151fdd9f98bde987538cbc20e003f6/79d409006f50b24f1607758945144b392e4921a2/thumbnail.png)](https://bl.ocks.org/texodus/eb151fdd9f98bde987538cbc20e003f6)|[![NYC Citibike](https://bl.ocks.org/texodus/raw/bc8d7e6f72e09c9dbd7424b4332cacad/f704ce53a3f453f8fe66bd9ff4ead831786384ea/thumbnail.png)](https://bl.ocks.org/texodus/bc8d7e6f72e09c9dbd7424b4332cacad)|[![JupyterLab Plugin](https://perspective.finos.org/img/jupyterlab.png)](http://beta.mybinder.org/v2/gh/finos/perspective/master?urlpath=lab/tree/examples/jupyter-notebooks)| +|[![IEX Cloud](https://bl.ocks.org/texodus/raw/eb151fdd9f98bde987538cbc20e003f6/79d409006f50b24f1607758945144b392e4921a2/thumbnail.png)](https://bl.ocks.org/texodus/eb151fdd9f98bde987538cbc20e003f6)|[![NYC Citibike](https://bl.ocks.org/texodus/raw/bc8d7e6f72e09c9dbd7424b4332cacad/f704ce53a3f453f8fe66bd9ff4ead831786384ea/thumbnail.png)](https://bl.ocks.org/texodus/bc8d7e6f72e09c9dbd7424b4332cacad)|[![JupyterLab Plugin](https://perspective.finos.org/img/jupyterlab.png)](http://beta.mybinder.org/v2/gh/finos/perspective/binder?urlpath=lab/tree/examples/jupyter-notebooks)| diff --git a/binder/postBuild b/binder/postBuild index 22ba431a12..c20c7bccbb 100644 --- a/binder/postBuild +++ b/binder/postBuild @@ -6,21 +6,9 @@ python3 -m pip install -U perspective-python export NODE_OPTIONS=--max-old-space-size=32768 -EXTENSIONS=" -@jupyter-widgets/jupyterlab-manager@2.0.0 -@finos/perspective-jupyterlab -@jupyter-voila/jupyterlab-preview@1.1.0 -" +EXTENSIONS="@jupyter-widgets/jupyterlab-manager @finos/perspective-jupyterlab" -until jupyter labextension install $EXTENSIONS --no-build -do - echo "Extension failed to install" -done - -until jupyter lab build --dev-build=False --minimize=False -do - echo "Extension failed to install" -done - +jupyter labextension install $EXTENSIONS --no-build +jupyter lab build --dev-build=False --minimize=False jupyter serverextension enable --py jupyterlab diff --git a/binder/requirements.txt b/binder/requirements.txt index 54b02f8dee..5c6c6bebc0 100644 --- a/binder/requirements.txt +++ b/binder/requirements.txt @@ -1,5 +1,4 @@ ipywidgets==7.5.1 -jupyterlab==2.2.8 +jupyterlab==3.0.9 pandas==0.25.3 -pyarrow==2.0.0 -voila==0.2.3 \ No newline at end of file +pyarrow==3.0.0 \ No newline at end of file From 37ad2d829d726aba8a75c7f5cf410ae2009114e2 Mon Sep 17 00:00:00 2001 From: Tim Paine Date: Wed, 3 Mar 2021 17:58:41 -0500 Subject: [PATCH 03/11] remap back to master --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 82363f210b..2d19c6a96a 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ data or streaming updates via [Apache Arrow](https://arrow.apache.org/). |Editable|Streaming|CSV| |[![Editable](https://bl.ocks.org/texodus/raw/45b868833c9f456bd39a51e606412c5d/e590d237a5237790694946018680719c9fef56cb/thumbnail.png)](https://bl.ocks.org/texodus/45b868833c9f456bd39a51e606412c5d)|[![Streaming](https://bl.ocks.org/texodus/raw/9bec2f8041471bafc2c56db2272a9381/c69c2cfacb23015f3aaeab3555a0035702ffdb1c/thumbnail.png)](https://bl.ocks.org/texodus/9bec2f8041471bafc2c56db2272a9381)|[![CSV](https://bl.ocks.org/texodus/raw/02d8fd10aef21b19d6165cf92e43e668/5e78be024893aa651fcdfac816841d54777ccdec/thumbnail.png)](https://bl.ocks.org/texodus/02d8fd10aef21b19d6165cf92e43e668)| |IEX Cloud|NYC Citibike|JupyterLab Plugin| -|[![IEX Cloud](https://bl.ocks.org/texodus/raw/eb151fdd9f98bde987538cbc20e003f6/79d409006f50b24f1607758945144b392e4921a2/thumbnail.png)](https://bl.ocks.org/texodus/eb151fdd9f98bde987538cbc20e003f6)|[![NYC Citibike](https://bl.ocks.org/texodus/raw/bc8d7e6f72e09c9dbd7424b4332cacad/f704ce53a3f453f8fe66bd9ff4ead831786384ea/thumbnail.png)](https://bl.ocks.org/texodus/bc8d7e6f72e09c9dbd7424b4332cacad)|[![JupyterLab Plugin](https://perspective.finos.org/img/jupyterlab.png)](http://beta.mybinder.org/v2/gh/finos/perspective/binder?urlpath=lab/tree/examples/jupyter-notebooks)| +|[![IEX Cloud](https://bl.ocks.org/texodus/raw/eb151fdd9f98bde987538cbc20e003f6/79d409006f50b24f1607758945144b392e4921a2/thumbnail.png)](https://bl.ocks.org/texodus/eb151fdd9f98bde987538cbc20e003f6)|[![NYC Citibike](https://bl.ocks.org/texodus/raw/bc8d7e6f72e09c9dbd7424b4332cacad/f704ce53a3f453f8fe66bd9ff4ead831786384ea/thumbnail.png)](https://bl.ocks.org/texodus/bc8d7e6f72e09c9dbd7424b4332cacad)|[![JupyterLab Plugin](https://perspective.finos.org/img/jupyterlab.png)](http://beta.mybinder.org/v2/gh/finos/perspective/master?urlpath=lab/tree/examples/jupyter-notebooks)| From 3576efe1b762498681e42f85c239cc802344a104 Mon Sep 17 00:00:00 2001 From: Tim Paine Date: Mon, 1 Mar 2021 19:02:57 -0500 Subject: [PATCH 04/11] Add nightly complete builds --- azure-pipelines.yml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 8f62c90586..62be87c7e9 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -11,6 +11,13 @@ pr: include: - '*' # must quote since "*" is a YAML reserved character; we want a string +schedules: +- cron: "0 0 * * *" + displayName: Daily midnight build + branches: + include: + - master + always: true variables: YARN_CACHE_FOLDER: $(Pipeline.Workspace)/.yarn @@ -77,7 +84,7 @@ jobs: manylinux_flag: '--manylinux2010' artifact_name: 'cp37-cp37m-manylinux2010_x86_64' - ${{ if startsWith(variables['build.sourceBranch'], 'refs/tags/v') }}: + ${{ if or(startsWith(variables['build.sourceBranch'], 'refs/tags/v'), eq(variables['Build.Reason'], 'Schedule')) }}: Python36ManyLinux2010: python.version: '3.6' python_flag: '--python36' @@ -169,7 +176,7 @@ jobs: Python37: python.version: '3.7' python_flag: '' - ${{ if startsWith(variables['build.sourceBranch'], 'refs/tags/v') }}: + ${{ if or(startsWith(variables['build.sourceBranch'], 'refs/tags/v'), eq(variables['Build.Reason'], 'Schedule')) }}: Python36: python.version: '3.6' python_flag: '--python36' @@ -240,7 +247,7 @@ jobs: python_flag: '' artifact_name: 'cp37-cp37m-macosx_10_15_x86_64' - ${{ if startsWith(variables['build.sourceBranch'], 'refs/tags/v') }}: + ${{ if or(startsWith(variables['build.sourceBranch'], 'refs/tags/v'), eq(variables['Build.Reason'], 'Schedule')) }}: Python36: python.version: '3.6' python_flag: '--python36' From 4636ff66e9e6409573f6f0878ee0926c77bbd7ee Mon Sep 17 00:00:00 2001 From: Andrew Stein Date: Thu, 4 Mar 2021 05:47:49 -0500 Subject: [PATCH 05/11] Start with once-a-week total builds --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 62be87c7e9..92401481ab 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -12,7 +12,7 @@ pr: - '*' # must quote since "*" is a YAML reserved character; we want a string schedules: -- cron: "0 0 * * *" +- cron: "0 0 * * 6" displayName: Daily midnight build branches: include: From 89e823f0385a7ea197f3a5658e218667cb3e4e56 Mon Sep 17 00:00:00 2001 From: Andrew Stein Date: Thu, 4 Mar 2021 17:34:42 -0500 Subject: [PATCH 06/11] Fix trivial CSS bug --- packages/perspective-viewer-d3fc/src/less/chart.less | 6 ++++-- packages/perspective-viewer/src/themes/material.less | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/perspective-viewer-d3fc/src/less/chart.less b/packages/perspective-viewer-d3fc/src/less/chart.less index 6a16af68f9..4dbd6f2b8f 100644 --- a/packages/perspective-viewer-d3fc/src/less/chart.less +++ b/packages/perspective-viewer-d3fc/src/less/chart.less @@ -240,11 +240,13 @@ } & .y-label-container .splitter-label::after { - content: "\1f847"; + font-family: var(--d3fc-y1-label--font-family, inherit); + content: var(--d3fc-y1-label--content, "\1f847"); } & .y2-label-container .splitter-label::after { - content: "\1f845"; + font-family: var(--d3fc-y2-label--font-family, inherit); + content: var(--d3fc-y2-label--content, "\1f845"); } &.d3_y_bar .y-axis path, diff --git a/packages/perspective-viewer/src/themes/material.less b/packages/perspective-viewer/src/themes/material.less index 703ef754a6..56ec9956a4 100644 --- a/packages/perspective-viewer/src/themes/material.less +++ b/packages/perspective-viewer/src/themes/material.less @@ -87,4 +87,10 @@ perspective-viewer, .perspective-viewer-material { --top-panel-row--display: inline-flex; --d3fc-treedata-axis--lines: none; + + --d3fc-y1-label--font-family: "Material Icons"; + --d3fc-y1-label--content: "arrow_upward"; + + --d3fc-y2-label--font-family: "Material Icons"; + --d3fc-y2-label--content: "arrow_downward"; } \ No newline at end of file From 039fafee08ba3ec4cf1ea88be4f4c630f2685fb6 Mon Sep 17 00:00:00 2001 From: Jun Tan Date: Tue, 16 Mar 2021 12:01:08 -0400 Subject: [PATCH 07/11] Fix datetime tests for DST --- .../perspective/test/js/timezone/timezone.spec.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/perspective/test/js/timezone/timezone.spec.js b/packages/perspective/test/js/timezone/timezone.spec.js index a1595fefa2..24236fcaee 100644 --- a/packages/perspective/test/js/timezone/timezone.spec.js +++ b/packages/perspective/test/js/timezone/timezone.spec.js @@ -64,7 +64,17 @@ const check_datetime = (output, expected) => { describe("Timezone Tests", () => { beforeAll(() => { expect(process.env.TZ).toBe("America/New_York"); - expect(new Date().getTimezoneOffset()).toBe(300); + const now = new Date(); + + // offset is 240 during DST and 300 during non-DST, since we manually + // set the timezone here just assert the timezone string + + if (now.toString().includes("GMT-0400") || now.toString().includes("Eastern Daylight Time")) { + expect(new Date().getTimezoneOffset()).toBe(240); + } else { + expect(new Date().getTimezoneOffset()).toBe(300); + } + console.log("Timezone set to", process.env.TZ); }); From 348794cf9dcff2fb23a429adaf03f5ba131b23cd Mon Sep 17 00:00:00 2001 From: Tim Paine Date: Sun, 21 Mar 2021 18:09:16 -0400 Subject: [PATCH 08/11] install boost via choco --- azure-pipelines.yml | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 92401481ab..7fac3d8181 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -126,7 +126,7 @@ jobs: displayName: "Install Yarn" - bash: yarn - displayName: 'Install Deps' + displayName: 'Install JS Deps' - bash: python -m pip install -U "black==20.8b1" flake8-black pip condition: and(succeeded(), ne(variables['python.version'], '2.7')) @@ -210,25 +210,13 @@ jobs: displayName: "Install Yarn" - script: yarn - displayName: 'Install Deps' + displayName: 'Install JS Deps' - - script: choco install flatc - displayName: "Install Flatbuffers" + - script: choco install boost flatc + displayName: "System deps" - script: yarn build_python --ci $(python_flag) displayName: 'build' - env: - # Set `BOOST_ROOT` manually, as `BOOST_ROOT` is removed in the VM: - # https://github.com/actions/virtual-environments/issues/687 - # - # 06/18/2020 - seems like boost got moved to `x86_64` inside - # the boost folder, which broke builds for a bit. - # - # 11/24/2020 - boost 1.69 was removed, so update to 1.72: - # https://github.com/actions/virtual-environments/issues/1847 - BOOST_ROOT: "C:/hostedtoolcache/windows/Boost/1.72.0/x86_64/" - BOOST_INCLUDEDIR: "C:/hostedtoolcache/windows/Boost/1.72.0/x86_64/include" - BOOST_LIBRARYDIR: "C:/hostedtoolcache/windows/Boost/1.72.0/x86_64/libs" - job: 'MacOS_Catalina' pool: @@ -237,11 +225,6 @@ jobs: strategy: matrix: - # Python27: - # python.version: '2.7' - # python_flag: '--python2' - # artifact_name: 'cp27-cp27m-macosx_10_15_x86_64' - Python37: python.version: '3.7' python_flag: '' @@ -293,7 +276,7 @@ jobs: displayName: "Install Yarn" - script: yarn --network-timeout 600000 - displayName: 'Install Deps' + displayName: 'Install JS Deps' - script: yarn build_python --ci $(python_flag) displayName: 'build' From a1ce3dff92877cb78b4899c92646258f5037b898 Mon Sep 17 00:00:00 2001 From: Tim Paine Date: Sun, 21 Mar 2021 18:10:20 -0400 Subject: [PATCH 09/11] drop py2 from mac --- azure-pipelines.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 7fac3d8181..15f5d69437 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -263,15 +263,9 @@ jobs: - script: | python -m pip install -U delocate wheel numpy "pyarrow>=2" pip - displayName: "Python 3 deps" + displayName: "Python deps" condition: eq(variables['python_flag'], '') - # Last released PyArrow version on Python 2 is 0.16.0 - - script: | - python -m pip install -U delocate wheel numpy "pyarrow==0.16.0" pip - displayName: "Python 2 deps" - condition: eq(variables['python_flag'], '--python2') - - script: npm install -g yarn displayName: "Install Yarn" From 049394193f9c0022396b49ec8579cd6fd41278fc Mon Sep 17 00:00:00 2001 From: Tim Paine Date: Sun, 21 Mar 2021 18:23:42 -0400 Subject: [PATCH 10/11] enumerate compiler version --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 15f5d69437..7491c9d214 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -252,7 +252,7 @@ jobs: versionSpec: '12.x' - script: | - brew install boost flatbuffers + brew install boost-msvc-14.1 flatbuffers displayName: "System deps" - script: | From b5f5da723e242dec35f1b2d15dc4bc772497d930 Mon Sep 17 00:00:00 2001 From: Tim Paine Date: Sun, 21 Mar 2021 18:49:27 -0400 Subject: [PATCH 11/11] copypasta --- azure-pipelines.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 7491c9d214..1a88c743bc 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -212,7 +212,7 @@ jobs: - script: yarn displayName: 'Install JS Deps' - - script: choco install boost flatc + - script: choco install boost-msvc-14.1 flatc displayName: "System deps" - script: yarn build_python --ci $(python_flag) @@ -252,7 +252,7 @@ jobs: versionSpec: '12.x' - script: | - brew install boost-msvc-14.1 flatbuffers + brew install boost flatbuffers displayName: "System deps" - script: |