From 4de3ed689ee035d185f7f662f32fa72668a775d5 Mon Sep 17 00:00:00 2001 From: Thom Nichols <95562+thom-nic@users.noreply.github.com> Date: Thu, 2 Sep 2021 23:07:38 -0400 Subject: [PATCH 01/12] Remove node-pre-gyp, use prebuildify Added Dockerfiles for cross-platform build. --- .dockerignore | 6 + .gitignore | 4 +- .npmignore | 3 + Dockerfile | 67 ++++ Dockerfile-arm | 43 +++ Dockerfile-arm64 | 44 +++ bcrypt.js | 4 +- binding.gyp | 11 - build-all.sh | 39 +++ package-lock.json | 822 ++++------------------------------------------ package.json | 7 +- 11 files changed, 281 insertions(+), 769 deletions(-) create mode 100644 .dockerignore create mode 100644 .npmignore create mode 100755 Dockerfile create mode 100755 Dockerfile-arm create mode 100755 Dockerfile-arm64 create mode 100755 build-all.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..01f4eb7 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +.git/ +.vscode/ +Dockerfile* +prebuilds/ +node_modules/ +build*/ diff --git a/.gitignore b/.gitignore index 2010742..bd6fab1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ .lock* -build* +build*/ *.node *.sw[a-z] node_modules .idea/ +prebuilds/ +*.tgz diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..61561eb --- /dev/null +++ b/.npmignore @@ -0,0 +1,3 @@ +.lock* +build*/ +*.sw[a-z] diff --git a/Dockerfile b/Dockerfile new file mode 100755 index 0000000..fd55fb4 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,67 @@ +#!/bin/echo docker build . -f +# -*- coding: utf-8 -*- +# SPDX-License-Identifier: ISC +# Copyright 2021 VoltServer Inc +#{ +# ISC License +# Copyright (c) 2004-2010 by Internet Systems Consortium, Inc. ("ISC") +# Copyright (c) 1995-2003 by Internet Software Consortium +# Permission to use, copy, modify, and /or distribute this software +# for any purpose with or without fee is hereby granted, +# provided that the above copyright notice +# and this permission notice appear in all copies. +# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS. +# IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +# OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +# WHETHER IN AN ACTION OF CONTRACT, +# NEGLIGENCE OR OTHER TORTIOUS ACTION, +# ARISING OUT OF OR IN CONNECTION WITH THE USE +# OR PERFORMANCE OF THIS SOFTWARE. +#} +# +# Usage: +# +# docker build -t voltserver/bcryptjs-linux-x64-builder . +# docker create --name donut voltserver/bcryptjs-linux-x64-builder +# # Then copy the artifact to your host: +# docker cp donut:/usr/local/opt/bcrypt-js/prebuilds . + +FROM node:14-bullseye + +ENV project bcrypt-js +ENV DEBIAN_FRONTEND noninteractive +ENV LC_ALL en_US.UTF-8 +ENV LANG ${LC_ALL} + +RUN echo "#log: ${project}: Setup system" \ + && set -x \ + && apt-get update -y \ + && apt-get install -y \ + build-essential \ + python3 \ + && apt-get clean \ + && update-alternatives --install /usr/local/bin/python python /usr/bin/python3 20 \ + && npm i -g prebuildify node-gyp \ + && sync + +ADD . /usr/local/opt/${project} +WORKDIR /usr/local/opt/${project} + +RUN echo "#log: ${project}: Running build" \ + && set -x \ + && npm i \ + && npm run build + +ARG RUN_TESTS=true + +RUN if "${RUN_TESTS}"; then \ + echo "#log ${project}: Running tests" \ + && npm test; \ + else \ + echo "#log ${project}: Tests were skipped!"; \ + fi + +CMD /bin/bash -l diff --git a/Dockerfile-arm b/Dockerfile-arm new file mode 100755 index 0000000..ecddc1c --- /dev/null +++ b/Dockerfile-arm @@ -0,0 +1,43 @@ +# Usage: +# +# docker build -t bcryptjs-linux-arm-builder -f Dockerfile-arm . +# docker create --name donut bcryptjs-linux-arm-builder +# # Then copy the artifact to your host: +# docker cp donut:/usr/local/opt/bcrypt-js/prebuilds . + +FROM arm32v7/node:14-bullseye + +ENV project bcrypt-js +ENV DEBIAN_FRONTEND noninteractive +ENV LC_ALL en_US.UTF-8 +ENV LANG ${LC_ALL} + +RUN echo "#log: ${project}: Setup system" \ + && set -x \ + && apt-get update -y \ + && apt-get install -y \ + build-essential \ + python3 \ + && apt-get clean \ + && update-alternatives --install /usr/local/bin/python python /usr/bin/python3 20 \ + && npm i -g prebuildify node-gyp \ + && sync + +ADD . /usr/local/opt/${project} +WORKDIR /usr/local/opt/${project} + +RUN echo "#log: ${project}: Running build" \ + && set -x \ + && npm i \ + && npm run build + +ARG RUN_TESTS=true + +RUN if "${RUN_TESTS}"; then \ + echo "#log ${project}: Running tests" \ + && npm test; \ + else \ + echo "#log ${project}: Tests were skipped!"; \ + fi + +CMD /bin/bash -l diff --git a/Dockerfile-arm64 b/Dockerfile-arm64 new file mode 100755 index 0000000..92256c5 --- /dev/null +++ b/Dockerfile-arm64 @@ -0,0 +1,44 @@ +# Usage: +# +# docker build -t bcryptjs-linux-arm64-builder -f Dockerfile-arm64 . +# docker create --name donut-arm64 bcryptjs-linux-arm64-builder +# # Then copy the artifact to your host: +# docker cp donut-arm64:/usr/local/opt/bcrypt-js/prebuilds . + +FROM arm64v8/node:14-bullseye + +ENV project bcrypt-js +ENV DEBIAN_FRONTEND noninteractive +ENV LC_ALL en_US.UTF-8 +ENV LANG ${LC_ALL} + +RUN echo "#log: ${project}: Setup system" \ + && set -x \ + && apt-get update -y \ + && apt-get install -y \ + build-essential \ + python3 \ + && apt-get clean \ + && update-alternatives --install /usr/local/bin/python python /usr/bin/python3 20 \ + && npm i -g prebuildify node-gyp \ + && sync + +ADD . /usr/local/opt/${project} +WORKDIR /usr/local/opt/${project} + +RUN echo "#log: ${project}: Running build" \ + && set -x \ + && npm i \ + && npm run build + +ARG RUN_TESTS=true + +RUN if "${RUN_TESTS}"; then \ + echo "#log ${project}: Running tests" \ + && npm test; \ + else \ + echo "#log ${project}: Tests were skipped!"; \ + fi + +CMD /bin/bash -l + diff --git a/bcrypt.js b/bcrypt.js index 612f9dc..923edca 100644 --- a/bcrypt.js +++ b/bcrypt.js @@ -1,9 +1,7 @@ 'use strict'; -var nodePreGyp = require('@mapbox/node-pre-gyp'); var path = require('path'); -var binding_path = nodePreGyp.find(path.resolve(path.join(__dirname, './package.json'))); -var bindings = require(binding_path); +var bindings = require('node-gyp-build')(path.resolve(__dirname)); var crypto = require('crypto'); diff --git a/binding.gyp b/binding.gyp index 181dca0..dacfd1e 100644 --- a/binding.gyp +++ b/binding.gyp @@ -46,16 +46,5 @@ }], ], }, - { - "target_name": "action_after_build", - "type": "none", - "dependencies": [ "<(module_name)" ], - "copies": [ - { - "files": [ "<(PRODUCT_DIR)/<(module_name).node" ], - "destination": "<(module_path)" - } - ] - } ] } diff --git a/build-all.sh b/build-all.sh new file mode 100755 index 0000000..b3194ea --- /dev/null +++ b/build-all.sh @@ -0,0 +1,39 @@ +#!/bin/bash -ue + +CLEAN=${CLEAN:-""} +RUN_TESTS=${RUN_TESTS:-false} # tests presently fail on arm :( + +if [ -n "$CLEAN" ]; then + rm -rf build build-tmp* + rm -rf prebuilds +fi + +npm i +npm i -g prebuildify node-gyp +npm run build + +# build for linux/x64: +if [ ! -d prebuilds/linux-x64 ]; then + docker build -t voltserver/bcryptjs-linux-x64-builder . + CONTAINER=$(docker create voltserver/bcryptjs-linux-x64-builder) + docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" . + docker rm "$CONTAINER" +fi + +# build for linux/arm32: +if [ ! -d prebuilds/linux-arm ]; then + docker build -t voltserver/bcryptjs-linux-arm-builder -f Dockerfile-arm --build-arg RUN_TESTS="$RUN_TESTS" . + CONTAINER=$(docker create --platform linux/arm/v7 voltserver/bcryptjs-linux-arm-builder) + docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" . + docker rm "$CONTAINER" +fi + +# build for linux/arm64: +if [ ! -d prebuilds/linux-arm64 ]; then + docker build -t voltserver/bcryptjs-linux-arm64-builder -f Dockerfile-arm64 --build-arg RUN_TESTS="$RUN_TESTS" . + CONTAINER=$(docker create --platform linux/arm64/v8 voltserver/bcryptjs-linux-arm64-builder) + docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" . + docker rm "$CONTAINER" +fi + +ls -lF prebuilds/ diff --git a/package-lock.json b/package-lock.json index 1bcd481..3ec5051 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,8 @@ "hasInstallScript": true, "license": "MIT", "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.11", - "node-addon-api": "^5.0.0" + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.3" }, "devDependencies": { "jest": "^29.6.2" @@ -949,91 +949,6 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -1159,22 +1074,6 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -1194,6 +1093,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -1226,44 +1126,6 @@ "node": ">= 8" } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/are-we-there-yet/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -1367,12 +1229,14 @@ "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1500,14 +1364,6 @@ "node": ">=10" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "engines": { - "node": ">=10" - } - }, "node_modules/ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", @@ -1577,23 +1433,11 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "bin": { - "color-support": "bin.js" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "node_modules/convert-source-map": { "version": "2.0.0", @@ -1619,6 +1463,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, "dependencies": { "ms": "^2.1.1" } @@ -1646,19 +1491,6 @@ "node": ">=0.10.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - }, - "node_modules/detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", - "engines": { - "node": ">=8" - } - }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -1824,37 +1656,11 @@ "node": ">=8" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.3.tgz", - "integrity": "sha512-N0BOsdFAlNRfmwMhjAsLVWOk7Ljmeb39iqFlsV1At+jqRhSUP9yeof8FyJu4imaJiSUp8vQebWD/guZwGQC8iA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs-minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "node_modules/fsevents": { "version": "2.3.2", @@ -1876,25 +1682,6 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -1938,6 +1725,7 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1989,29 +1777,12 @@ "node": ">=8" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -2053,6 +1824,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -2061,7 +1833,8 @@ "node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true }, "node_modules/is-arrayish": { "version": "0.2.1", @@ -2085,6 +1858,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -2962,6 +2736,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2969,38 +2744,11 @@ "node": "*" } }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.3.tgz", - "integrity": "sha512-N0BOsdFAlNRfmwMhjAsLVWOk7Ljmeb39iqFlsV1At+jqRhSUP9yeof8FyJu4imaJiSUp8vQebWD/guZwGQC8iA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/natural-compare": { "version": "1.4.0", @@ -3013,23 +2761,14 @@ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz", "integrity": "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==" }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "node_modules/node-gyp-build": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", + "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" } }, "node_modules/node-int64": { @@ -3044,20 +2783,6 @@ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -3079,29 +2804,11 @@ "node": ">=8" } }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "dependencies": { "wrappy": "1" } @@ -3203,6 +2910,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -3378,25 +3086,6 @@ "node": ">=10" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -3406,11 +3095,6 @@ "semver": "bin/semver.js" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -3435,7 +3119,8 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "node_modules/sisteransi": { "version": "1.0.5", @@ -3506,6 +3191,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3518,12 +3204,14 @@ "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -3585,49 +3273,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.3.tgz", - "integrity": "sha512-N0BOsdFAlNRfmwMhjAsLVWOk7Ljmeb39iqFlsV1At+jqRhSUP9yeof8FyJu4imaJiSUp8vQebWD/guZwGQC8iA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -3669,11 +3314,6 @@ "node": ">=8.0" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", @@ -3725,11 +3365,6 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, "node_modules/v8-to-istanbul": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", @@ -3759,20 +3394,6 @@ "makeerror": "1.0.12" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -3788,14 +3409,6 @@ "node": ">= 8" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -3816,7 +3429,8 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "node_modules/write-file-atomic": { "version": "4.0.2", @@ -4601,68 +4215,6 @@ } } }, - "@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "requires": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, "@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -4788,19 +4340,6 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -4813,7 +4352,8 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "ansi-styles": { "version": "4.3.0", @@ -4834,40 +4374,6 @@ "picomatch": "^2.0.4" } }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - }, - "are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -4950,12 +4456,14 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5031,11 +4539,6 @@ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - }, "ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", @@ -5086,20 +4589,11 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "convert-source-map": { "version": "2.0.0", @@ -5122,6 +4616,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, "requires": { "ms": "^2.1.1" } @@ -5139,16 +4634,6 @@ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - }, - "detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" - }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -5271,33 +4756,11 @@ "path-exists": "^4.0.0" } }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.3.tgz", - "integrity": "sha512-N0BOsdFAlNRfmwMhjAsLVWOk7Ljmeb39iqFlsV1At+jqRhSUP9yeof8FyJu4imaJiSUp8vQebWD/guZwGQC8iA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "2.3.2", @@ -5312,22 +4775,6 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - } - }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -5356,6 +4803,7 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5392,26 +4840,12 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -5438,6 +4872,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -5446,7 +4881,8 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true }, "is-arrayish": { "version": "0.2.1", @@ -5466,7 +4902,8 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "is-generator-fn": { "version": "2.1.0", @@ -6135,38 +5572,16 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.3.tgz", - "integrity": "sha512-N0BOsdFAlNRfmwMhjAsLVWOk7Ljmeb39iqFlsV1At+jqRhSUP9yeof8FyJu4imaJiSUp8vQebWD/guZwGQC8iA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "natural-compare": { "version": "1.4.0", @@ -6179,13 +5594,10 @@ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz", "integrity": "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==" }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } + "node-gyp-build": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", + "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==" }, "node-int64": { "version": "0.4.0", @@ -6199,14 +5611,6 @@ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "requires": { - "abbrev": "1" - } - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -6222,26 +5626,11 @@ "path-key": "^3.0.0" } }, - "npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "requires": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -6311,7 +5700,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-key": { "version": "3.1.1", @@ -6431,22 +5821,12 @@ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -6465,7 +5845,8 @@ "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "sisteransi": { "version": "1.0.5", @@ -6524,6 +5905,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6533,7 +5915,8 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true } } }, @@ -6541,6 +5924,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -6578,39 +5962,6 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.3.tgz", - "integrity": "sha512-N0BOsdFAlNRfmwMhjAsLVWOk7Ljmeb39iqFlsV1At+jqRhSUP9yeof8FyJu4imaJiSUp8vQebWD/guZwGQC8iA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -6643,11 +5994,6 @@ "is-number": "^7.0.0" } }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", @@ -6670,11 +6016,6 @@ "picocolors": "^1.0.0" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, "v8-to-istanbul": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", @@ -6703,20 +6044,6 @@ "makeerror": "1.0.12" } }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -6726,14 +6053,6 @@ "isexe": "^2.0.0" } }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -6748,7 +6067,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write-file-atomic": { "version": "4.0.2", diff --git a/package.json b/package.json index 16beb38..3aaa4cc 100644 --- a/package.json +++ b/package.json @@ -26,11 +26,12 @@ }, "scripts": { "test": "npm ci --build-from-source && jest", - "install": "node-pre-gyp install --fallback-to-build" + "install": "node-gyp-build", + "build": "prebuildify --napi" }, "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.11", - "node-addon-api": "^5.0.0" + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.3" }, "devDependencies": { "jest": "^29.6.2" From 0da2a15aaadd912cc411ade9fc7748ea0ef32500 Mon Sep 17 00:00:00 2001 From: Thom Nichols <95562+thom-nic@users.noreply.github.com> Date: Tue, 14 Sep 2021 09:48:25 -0400 Subject: [PATCH 02/12] updated CI scripts --- .travis.yml | 6 ++---- appveyor.yml | 12 ++++++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index ed78c27..d13f941 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,15 +33,13 @@ before_install: - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then export CXX=$LINUX_CXX; $CXX --version; fi; - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then c++ --version; fi; -- npm install -g npm@latest +- npm install -g npm@latest prebuildify node-gyp install: true script: - npm test -- "./node_modules/.bin/node-pre-gyp configure" -- "./node_modules/.bin/node-pre-gyp build" -- "./node_modules/.bin/node-pre-gyp package" +- npm run build - | if [[ "$TRAVIS_OS_NAME" == "linux" ]] then diff --git a/appveyor.yml b/appveyor.yml index d9b4ebb..51d10c1 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -15,25 +15,29 @@ install: - where npm - where node - ps: Install-Product node $env:nodejs_version $env:platform + - 'npm install -g npm@latest prebuildify node-gyp' build: off artifacts: - - path: 'build/stage/**/bcrypt*.tar.gz' + - path: './bcrypt*.tgz' test_script: - node --version - npm --version + - npm install --build-from-source - npm test after_test: - - .\node_modules\.bin\node-pre-gyp package + - npm run build + - npm run pack on_success: - ps: > if ($env:NODE_PRE_GYP_GITHUB_TOKEN -ne $null -and $env:APPVEYOR_REPO_TAG_NAME -match '^v(0|[1-9]+)\.(0|[1-9]+)\.(0|[1-9]+)(-\w)?$') { echo "Publishing $env:APPVEYOR_REPO_TAG_NAME" - npm install node-pre-gyp-github@1.4.3 - ./node_modules/.bin/node-pre-gyp-github publish --release + ## TODO CONFIGURE FOR GITHUB NPM REGISTRY ### + ## See https://docs.github.com/en/actions/guides/publishing-nodejs-packages#publishing-packages-to-github-packages + npm publish } From ea2a8fd256bc1682143841c9daed99436f92517e Mon Sep 17 00:00:00 2001 From: Thom Nichols <95562+thom-nic@users.noreply.github.com> Date: Tue, 14 Dec 2021 13:16:12 -0500 Subject: [PATCH 03/12] .github: added github actions --- .github/workflows/build-pack-publish.yml | 101 +++++++++++++++++++++++ .github/workflows/ci.yaml | 11 ++- .travis.yml | 1 + Dockerfile | 67 --------------- Dockerfile-arm | 4 +- Dockerfile-arm64 | 4 +- Dockerfile-x64 | 43 ++++++++++ appveyor.yml | 2 + build-all.sh | 14 ++-- 9 files changed, 163 insertions(+), 84 deletions(-) create mode 100644 .github/workflows/build-pack-publish.yml delete mode 100755 Dockerfile create mode 100755 Dockerfile-x64 diff --git a/.github/workflows/build-pack-publish.yml b/.github/workflows/build-pack-publish.yml new file mode 100644 index 0000000..88d6d58 --- /dev/null +++ b/.github/workflows/build-pack-publish.yml @@ -0,0 +1,101 @@ +name: Prebuildify, package, publish + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + release: + types: [ prereleased, released ] + +jobs: + + build: + runs-on: ubuntu-latest + strategy: + matrix: + arch: [x64, arm, arm64] + steps: + - uses: actions/checkout@v2 + - uses: docker/setup-qemu-action@v1 + with: + image: tonistiigi/binfmt:latest + platforms: arm,arm64 #all + - run: docker build . -f ./Dockerfile-${{ matrix.arch }} + --tag node-bcrypt-builder-${{ matrix.arch }} + - run: docker create --name node-bcryptjs-builder node-bcrypt-builder-${{ matrix.arch }} + - run: docker cp "node-bcryptjs-builder:/usr/local/opt/bcrypt-js/prebuilds" . + - run: find prebuilds + - uses: actions/upload-artifact@v2 + with: + name: prebuild-${{ matrix.arch }} + path: ./prebuilds + + pack: + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: 20 + registry-url: 'https://registry.npmjs.org' + - run: npm ci + - uses: actions/download-artifact@v2 + with: + path: /tmp/prebuilds/ + - name: Coalesce prebuilds from build matrix + run: | + mkdir prebuilds + for d in /tmp/prebuilds/*; do + mv $d/* prebuilds/ + done + - run: chmod a+x prebuilds/*/*.node && find prebuilds -executable -type f + - run: echo "PACK_FILE=$(npm pack)" >> $GITHUB_ENV + - uses: actions/upload-artifact@v2 + with: + name: package-tgz + path: ${{ env.PACK_FILE }} + + publish-npm: + needs: pack + if: github.event_name == 'release' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: 20 + registry-url: 'https://registry.npmjs.org' + - uses: actions/download-artifact@v2 + with: + name: package-tgz + path: /tmp/package/ + - run: npm publish /tmp/package/bcrypt*.tgz + env: + NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} + + publish-gpr: + needs: pack + if: github.event_name == 'release' + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: 20 + registry-url: https://npm.pkg.github.com/ + - uses: actions/download-artifact@v2 + with: + name: package-tgz + path: /tmp/package/ + - run: npm publish /tmp/package/bcrypt*.tgz + env: + NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}} + + + + diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index afc6a86..d5c0991 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -13,16 +13,14 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - node-version: [14.x, 16.x, 18.x] + node-version: [18, 20] steps: - uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 + uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }} - - name: Install dependencies - run: | - sudo apt-get install -y python3 make g++ + - run: npm ci - name: Test run: npm test @@ -30,7 +28,7 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - node-version: [14, 16, 18] + node-version: [18, 20] container: image: node:${{ matrix.node-version }}-alpine steps: @@ -38,6 +36,7 @@ jobs: - name: Install dependencies run: | apk add make g++ python3 + - run: npm ci - name: Test run: | npm test --unsafe-perm diff --git a/.travis.yml b/.travis.yml index d13f941..7c94bf9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,6 +19,7 @@ node_js: - '16' - '17' - '18' +- '18' addons: apt: diff --git a/Dockerfile b/Dockerfile deleted file mode 100755 index fd55fb4..0000000 --- a/Dockerfile +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/echo docker build . -f -# -*- coding: utf-8 -*- -# SPDX-License-Identifier: ISC -# Copyright 2021 VoltServer Inc -#{ -# ISC License -# Copyright (c) 2004-2010 by Internet Systems Consortium, Inc. ("ISC") -# Copyright (c) 1995-2003 by Internet Software Consortium -# Permission to use, copy, modify, and /or distribute this software -# for any purpose with or without fee is hereby granted, -# provided that the above copyright notice -# and this permission notice appear in all copies. -# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -# OF MERCHANTABILITY AND FITNESS. -# IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, -# OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -# WHETHER IN AN ACTION OF CONTRACT, -# NEGLIGENCE OR OTHER TORTIOUS ACTION, -# ARISING OUT OF OR IN CONNECTION WITH THE USE -# OR PERFORMANCE OF THIS SOFTWARE. -#} -# -# Usage: -# -# docker build -t voltserver/bcryptjs-linux-x64-builder . -# docker create --name donut voltserver/bcryptjs-linux-x64-builder -# # Then copy the artifact to your host: -# docker cp donut:/usr/local/opt/bcrypt-js/prebuilds . - -FROM node:14-bullseye - -ENV project bcrypt-js -ENV DEBIAN_FRONTEND noninteractive -ENV LC_ALL en_US.UTF-8 -ENV LANG ${LC_ALL} - -RUN echo "#log: ${project}: Setup system" \ - && set -x \ - && apt-get update -y \ - && apt-get install -y \ - build-essential \ - python3 \ - && apt-get clean \ - && update-alternatives --install /usr/local/bin/python python /usr/bin/python3 20 \ - && npm i -g prebuildify node-gyp \ - && sync - -ADD . /usr/local/opt/${project} -WORKDIR /usr/local/opt/${project} - -RUN echo "#log: ${project}: Running build" \ - && set -x \ - && npm i \ - && npm run build - -ARG RUN_TESTS=true - -RUN if "${RUN_TESTS}"; then \ - echo "#log ${project}: Running tests" \ - && npm test; \ - else \ - echo "#log ${project}: Tests were skipped!"; \ - fi - -CMD /bin/bash -l diff --git a/Dockerfile-arm b/Dockerfile-arm index ecddc1c..40a7703 100755 --- a/Dockerfile-arm +++ b/Dockerfile-arm @@ -20,7 +20,7 @@ RUN echo "#log: ${project}: Setup system" \ python3 \ && apt-get clean \ && update-alternatives --install /usr/local/bin/python python /usr/bin/python3 20 \ - && npm i -g prebuildify node-gyp \ + && npm i -g prebuildify node-gyp nodeunit \ && sync ADD . /usr/local/opt/${project} @@ -28,7 +28,7 @@ WORKDIR /usr/local/opt/${project} RUN echo "#log: ${project}: Running build" \ && set -x \ - && npm i \ + && npm ci \ && npm run build ARG RUN_TESTS=true diff --git a/Dockerfile-arm64 b/Dockerfile-arm64 index 92256c5..9ab11cc 100755 --- a/Dockerfile-arm64 +++ b/Dockerfile-arm64 @@ -20,7 +20,7 @@ RUN echo "#log: ${project}: Setup system" \ python3 \ && apt-get clean \ && update-alternatives --install /usr/local/bin/python python /usr/bin/python3 20 \ - && npm i -g prebuildify node-gyp \ + && npm i -g prebuildify node-gyp nodeunit \ && sync ADD . /usr/local/opt/${project} @@ -28,7 +28,7 @@ WORKDIR /usr/local/opt/${project} RUN echo "#log: ${project}: Running build" \ && set -x \ - && npm i \ + && npm ci \ && npm run build ARG RUN_TESTS=true diff --git a/Dockerfile-x64 b/Dockerfile-x64 new file mode 100755 index 0000000..02723f7 --- /dev/null +++ b/Dockerfile-x64 @@ -0,0 +1,43 @@ +# Usage: +# +# docker build -t bcryptjs-linux-x64-builder . +# docker create --name donut bcryptjs-linux-x64-builder +# # Then copy the artifact to your host: +# docker cp donut:/usr/local/opt/bcrypt-js/prebuilds . + +FROM node:14-bullseye + +ENV project bcrypt-js +ENV DEBIAN_FRONTEND noninteractive +ENV LC_ALL en_US.UTF-8 +ENV LANG ${LC_ALL} + +RUN echo "#log: ${project}: Setup system" \ + && set -x \ + && apt-get update -y \ + && apt-get install -y \ + build-essential \ + python3 \ + && apt-get clean \ + && update-alternatives --install /usr/local/bin/python python /usr/bin/python3 20 \ + && npm i -g prebuildify node-gyp nodeunit \ + && sync + +ADD . /usr/local/opt/${project} +WORKDIR /usr/local/opt/${project} + +RUN echo "#log: ${project}: Running build" \ + && set -x \ + && npm ci \ + && npm run build + +ARG RUN_TESTS=true + +RUN if "${RUN_TESTS}"; then \ + echo "#log ${project}: Running tests" \ + && npm test; \ + else \ + echo "#log ${project}: Tests were skipped!"; \ + fi + +CMD /bin/bash -l diff --git a/appveyor.yml b/appveyor.yml index 51d10c1..36b7b37 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -10,6 +10,8 @@ environment: platform: x86 - nodejs_version: "18" platform: x64 + - nodejs_version: "20" + platform: x64 install: - where npm diff --git a/build-all.sh b/build-all.sh index b3194ea..fcd89ab 100755 --- a/build-all.sh +++ b/build-all.sh @@ -1,7 +1,7 @@ #!/bin/bash -ue CLEAN=${CLEAN:-""} -RUN_TESTS=${RUN_TESTS:-false} # tests presently fail on arm :( +RUN_TESTS=${RUN_TESTS:-true} if [ -n "$CLEAN" ]; then rm -rf build build-tmp* @@ -14,24 +14,24 @@ npm run build # build for linux/x64: if [ ! -d prebuilds/linux-x64 ]; then - docker build -t voltserver/bcryptjs-linux-x64-builder . - CONTAINER=$(docker create voltserver/bcryptjs-linux-x64-builder) + docker build -t bcryptjs-linux-x64-builder -f Dockerfile-x64 --build-arg RUN_TESTS="$RUN_TESTS" . + CONTAINER=$(docker create bcryptjs-linux-x64-builder) docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" . docker rm "$CONTAINER" fi # build for linux/arm32: if [ ! -d prebuilds/linux-arm ]; then - docker build -t voltserver/bcryptjs-linux-arm-builder -f Dockerfile-arm --build-arg RUN_TESTS="$RUN_TESTS" . - CONTAINER=$(docker create --platform linux/arm/v7 voltserver/bcryptjs-linux-arm-builder) + docker build -t bcryptjs-linux-arm-builder -f Dockerfile-arm --build-arg RUN_TESTS="$RUN_TESTS" . + CONTAINER=$(docker create --platform linux/arm/v7 bcryptjs-linux-arm-builder) docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" . docker rm "$CONTAINER" fi # build for linux/arm64: if [ ! -d prebuilds/linux-arm64 ]; then - docker build -t voltserver/bcryptjs-linux-arm64-builder -f Dockerfile-arm64 --build-arg RUN_TESTS="$RUN_TESTS" . - CONTAINER=$(docker create --platform linux/arm64/v8 voltserver/bcryptjs-linux-arm64-builder) + docker build -t bcryptjs-linux-arm64-builder -f Dockerfile-arm64 --build-arg RUN_TESTS="$RUN_TESTS" . + CONTAINER=$(docker create --platform linux/arm64/v8 bcryptjs-linux-arm64-builder) docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" . docker rm "$CONTAINER" fi From 74ebe5a4e849427e457927ccd63a3fea7f630508 Mon Sep 17 00:00:00 2001 From: Thom Nichols <95562+thom-nic@users.noreply.github.com> Date: Wed, 15 Dec 2021 22:38:10 -0500 Subject: [PATCH 04/12] Dockerfile: added alpine builders --- .github/workflows/build-pack-publish.yml | 4 +-- Dockerfile-alpine | 39 ++++++++++++++++++++++++ Dockerfile-alpine-arm | 39 ++++++++++++++++++++++++ Dockerfile-alpine-arm64 | 39 ++++++++++++++++++++++++ Dockerfile-arm | 4 +-- Dockerfile-arm64 | 4 +-- Dockerfile-x64 | 4 +-- package.json | 2 +- 8 files changed, 126 insertions(+), 9 deletions(-) create mode 100755 Dockerfile-alpine create mode 100755 Dockerfile-alpine-arm create mode 100755 Dockerfile-alpine-arm64 diff --git a/.github/workflows/build-pack-publish.yml b/.github/workflows/build-pack-publish.yml index 88d6d58..a5ef4a0 100644 --- a/.github/workflows/build-pack-publish.yml +++ b/.github/workflows/build-pack-publish.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - arch: [x64, arm, arm64] + arch: [x64, arm, arm64, alpine, alpine-arm, alpine-arm64] steps: - uses: actions/checkout@v2 - uses: docker/setup-qemu-action@v1 @@ -48,7 +48,7 @@ jobs: run: | mkdir prebuilds for d in /tmp/prebuilds/*; do - mv $d/* prebuilds/ + cp -Rav $d/* prebuilds/ done - run: chmod a+x prebuilds/*/*.node && find prebuilds -executable -type f - run: echo "PACK_FILE=$(npm pack)" >> $GITHUB_ENV diff --git a/Dockerfile-alpine b/Dockerfile-alpine new file mode 100755 index 0000000..8d700ae --- /dev/null +++ b/Dockerfile-alpine @@ -0,0 +1,39 @@ +# Usage: +# +# docker build -t bcryptjs-linux-alpine-builder -f Dockerfile-alpine . +# CONTAINER=$(docker create bcryptjs-linux-alpine-builder) +# # Then copy the artifact to your host: +# docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" . +# docker rm "$CONTAINER" + +FROM node:16-alpine + +ENV project bcrypt-js +ENV DEBIAN_FRONTEND noninteractive +ENV LC_ALL en_US.UTF-8 +ENV LANG ${LC_ALL} + +RUN echo "#log: ${project}: Setup system" \ + && set -x \ + && apk add --update build-base python3 \ + && npm i -g prebuildify@5 node-gyp@9 \ + && sync + +ADD . /usr/local/opt/${project} +WORKDIR /usr/local/opt/${project} + +RUN echo "#log: ${project}: Running build" \ + && set -x \ + && npm ci \ + && npm run build + +ARG RUN_TESTS=true + +RUN if "${RUN_TESTS}"; then \ + echo "#log ${project}: Running tests" \ + && npm test; \ + else \ + echo "#log ${project}: Tests were skipped!"; \ + fi + +CMD /bin/bash -l diff --git a/Dockerfile-alpine-arm b/Dockerfile-alpine-arm new file mode 100755 index 0000000..8e1421e --- /dev/null +++ b/Dockerfile-alpine-arm @@ -0,0 +1,39 @@ +# Usage: +# +# docker build -t bcryptjs-alpine-arm-builder -f Dockerfile-arm . +# CONTAINER=$(docker create bcryptjs-alpine-arm-builder) +# # Then copy the artifact to your host: +# docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" . +# docker rm "$CONTAINER" + +FROM arm32v7/node:16-alpine + +ENV project bcrypt-js +ENV DEBIAN_FRONTEND noninteractive +ENV LC_ALL en_US.UTF-8 +ENV LANG ${LC_ALL} + +RUN echo "#log: ${project}: Setup system" \ + && set -x \ + && apk add --update build-base python3 \ + && npm i -g prebuildify@5 node-gyp@9 \ + && sync + +ADD . /usr/local/opt/${project} +WORKDIR /usr/local/opt/${project} + +RUN echo "#log: ${project}: Running build" \ + && set -x \ + && npm ci \ + && npm run build + +ARG RUN_TESTS=true + +RUN if "${RUN_TESTS}"; then \ + echo "#log ${project}: Running tests" \ + && npm test; \ + else \ + echo "#log ${project}: Tests were skipped!"; \ + fi + +CMD /bin/bash -l diff --git a/Dockerfile-alpine-arm64 b/Dockerfile-alpine-arm64 new file mode 100755 index 0000000..0ea04fe --- /dev/null +++ b/Dockerfile-alpine-arm64 @@ -0,0 +1,39 @@ +# Usage: +# +# docker build -t bcryptjs-alpine-arm-builder -f Dockerfile-arm . +# CONTAINER=$(docker create bcryptjs-alpine-arm-builder) +# # Then copy the artifact to your host: +# docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" . +# docker rm "$CONTAINER" + +FROM arm64v8/node:16-alpine + +ENV project bcrypt-js +ENV DEBIAN_FRONTEND noninteractive +ENV LC_ALL en_US.UTF-8 +ENV LANG ${LC_ALL} + +RUN echo "#log: ${project}: Setup system" \ + && set -x \ + && apk add --update build-base python3 \ + && npm i -g prebuildify@5 node-gyp@9 \ + && sync + +ADD . /usr/local/opt/${project} +WORKDIR /usr/local/opt/${project} + +RUN echo "#log: ${project}: Running build" \ + && set -x \ + && npm ci \ + && npm run build + +ARG RUN_TESTS=true + +RUN if "${RUN_TESTS}"; then \ + echo "#log ${project}: Running tests" \ + && npm test; \ + else \ + echo "#log ${project}: Tests were skipped!"; \ + fi + +CMD /bin/bash -l diff --git a/Dockerfile-arm b/Dockerfile-arm index 40a7703..3e13638 100755 --- a/Dockerfile-arm +++ b/Dockerfile-arm @@ -5,7 +5,7 @@ # # Then copy the artifact to your host: # docker cp donut:/usr/local/opt/bcrypt-js/prebuilds . -FROM arm32v7/node:14-bullseye +FROM arm32v7/node:16-bullseye ENV project bcrypt-js ENV DEBIAN_FRONTEND noninteractive @@ -20,7 +20,7 @@ RUN echo "#log: ${project}: Setup system" \ python3 \ && apt-get clean \ && update-alternatives --install /usr/local/bin/python python /usr/bin/python3 20 \ - && npm i -g prebuildify node-gyp nodeunit \ + && npm i -g prebuildify@5 node-gyp@9 \ && sync ADD . /usr/local/opt/${project} diff --git a/Dockerfile-arm64 b/Dockerfile-arm64 index 9ab11cc..8d356f1 100755 --- a/Dockerfile-arm64 +++ b/Dockerfile-arm64 @@ -5,7 +5,7 @@ # # Then copy the artifact to your host: # docker cp donut-arm64:/usr/local/opt/bcrypt-js/prebuilds . -FROM arm64v8/node:14-bullseye +FROM arm64v8/node:16-bullseye ENV project bcrypt-js ENV DEBIAN_FRONTEND noninteractive @@ -20,7 +20,7 @@ RUN echo "#log: ${project}: Setup system" \ python3 \ && apt-get clean \ && update-alternatives --install /usr/local/bin/python python /usr/bin/python3 20 \ - && npm i -g prebuildify node-gyp nodeunit \ + && npm i -g prebuildify@5 node-gyp@9 \ && sync ADD . /usr/local/opt/${project} diff --git a/Dockerfile-x64 b/Dockerfile-x64 index 02723f7..e6fc7a3 100755 --- a/Dockerfile-x64 +++ b/Dockerfile-x64 @@ -5,7 +5,7 @@ # # Then copy the artifact to your host: # docker cp donut:/usr/local/opt/bcrypt-js/prebuilds . -FROM node:14-bullseye +FROM node:16-bullseye ENV project bcrypt-js ENV DEBIAN_FRONTEND noninteractive @@ -20,7 +20,7 @@ RUN echo "#log: ${project}: Setup system" \ python3 \ && apt-get clean \ && update-alternatives --install /usr/local/bin/python python /usr/bin/python3 20 \ - && npm i -g prebuildify node-gyp nodeunit \ + && npm i -g prebuildify@5 node-gyp@9 \ && sync ADD . /usr/local/opt/${project} diff --git a/package.json b/package.json index 3aaa4cc..52742de 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "scripts": { "test": "npm ci --build-from-source && jest", "install": "node-gyp-build", - "build": "prebuildify --napi" + "build": "prebuildify --napi --tag-libc --strip" }, "dependencies": { "node-addon-api": "^5.0.0", From d321d0c56ee6e7ce24b2722eececf7a5cdb878e4 Mon Sep 17 00:00:00 2001 From: Thom Nichols <95562+thom-nic@users.noreply.github.com> Date: Fri, 27 Oct 2023 14:54:45 -0400 Subject: [PATCH 05/12] repetitions.test: increase timeout for ARM builds in CI --- test/repetitions.test.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/repetitions.test.js b/test/repetitions.test.js index 66807f3..7423c08 100644 --- a/test/repetitions.test.js +++ b/test/repetitions.test.js @@ -8,7 +8,7 @@ test('salt_length', () => { return Promise.all(Array.from({length: EXPECTED}, () => bcrypt.genSalt(10) .then(salt => expect(salt).toHaveLength(29)))); -}) +}, 10e3) test('test_hash_length', () => { expect.assertions(EXPECTED); @@ -16,7 +16,7 @@ test('test_hash_length', () => { return Promise.all(Array.from({length: EXPECTED}, () => bcrypt.hash('test', SALT) .then(hash => expect(hash).toHaveLength(60)))); -}) +}, 10e3) test('test_compare', () => { expect.assertions(EXPECTED); @@ -24,7 +24,7 @@ test('test_compare', () => { return Promise.all(Array.from({length: EXPECTED}, () => bcrypt.compare('test', HASH) .then(match => expect(match).toEqual(true)))); -}) +}, 10e3) test('test_hash_and_compare', () => { expect.assertions(EXPECTED * 3); @@ -42,5 +42,5 @@ test('test_hash_and_compare', () => { return Promise.all([goodCompare, badCompare]); }); })); -}, 10000); +}, 30e3); From 3c9e40d235f135fc2862fb723cfc9ea6ed9f24e9 Mon Sep 17 00:00:00 2001 From: Thom Nichols <95562+thom-nic@users.noreply.github.com> Date: Tue, 31 Oct 2023 00:04:10 -0400 Subject: [PATCH 06/12] package: remove unnecessary binary stuff do not do CI as part of test --- package.json | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 52742de..df837af 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "url": "https://github.com/kelektiv/node.bcrypt.js/issues" }, "scripts": { - "test": "npm ci --build-from-source && jest", + "test": "jest", "install": "node-gyp-build", "build": "prebuildify --napi --tag-libc --strip" }, @@ -56,13 +56,6 @@ "Nicola Del Gobbo (https://github.com/NickNaso)" ], "binary": { - "module_name": "bcrypt_lib", - "module_path": "./lib/binding/napi-v{napi_build_version}-{platform}-{arch}-{libc}", - "package_name": "{module_name}-v{version}-napi-v{napi_build_version}-{platform}-{arch}-{libc}.tar.gz", - "host": "https://github.com", - "remote_path": "kelektiv/node.bcrypt.js/releases/download/v{version}", - "napi_versions": [ - 3 - ] + "module_name": "bcrypt_lib" } } From a2855a41d39e3930ba9e2356228d98dbf61316ef Mon Sep 17 00:00:00 2001 From: Thom Nichols <95562+thom-nic@users.noreply.github.com> Date: Tue, 31 Oct 2023 00:07:54 -0400 Subject: [PATCH 07/12] test_alpine.sh remove outdated file Test by using the Alpine dockerfiles now --- test_alpine.sh | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100755 test_alpine.sh diff --git a/test_alpine.sh b/test_alpine.sh deleted file mode 100755 index f23af5c..0000000 --- a/test_alpine.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -set -xe - -echo "Running on $(node -v)" - -apk add make g++ python -npm test --unsafe-perm - -./node_modules/.bin/node-pre-gyp configure -./node_modules/.bin/node-pre-gyp build -./node_modules/.bin/node-pre-gyp package From 28a719899cddd225f52c5ee1403d4afd053f5ce1 Mon Sep 17 00:00:00 2001 From: Thom Nichols <95562+thom-nic@users.noreply.github.com> Date: Tue, 31 Oct 2023 00:08:32 -0400 Subject: [PATCH 08/12] fixed Makefile --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 0b49b3d..cb22252 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ compile: npm run install test: build - @./node_modules/nodeunit/bin/nodeunit \ + @./node_modules/.bin/jest \ $(TESTS) clean: From 96751d6c3fbdfb5780d83165758d6842e10e021e Mon Sep 17 00:00:00 2001 From: Thom Nichols <95562+thom-nic@users.noreply.github.com> Date: Tue, 31 Oct 2023 10:24:41 -0400 Subject: [PATCH 09/12] use --platform to consolidate dockerfiles --- .github/workflows/build-pack-publish.yml | 41 ++++++++++++++++------ Dockerfile-arm => Dockerfile | 21 ++++++++--- Dockerfile-alpine | 3 +- Dockerfile-alpine-arm | 39 --------------------- Dockerfile-alpine-arm64 | 39 --------------------- Dockerfile-arm64 | 44 ------------------------ Dockerfile-x64 | 43 ----------------------- build-all.sh | 38 ++++++++++---------- 8 files changed, 68 insertions(+), 200 deletions(-) rename Dockerfile-arm => Dockerfile (55%) delete mode 100755 Dockerfile-alpine-arm delete mode 100755 Dockerfile-alpine-arm64 delete mode 100755 Dockerfile-arm64 delete mode 100755 Dockerfile-x64 diff --git a/.github/workflows/build-pack-publish.yml b/.github/workflows/build-pack-publish.yml index a5ef4a0..c7f9a3b 100644 --- a/.github/workflows/build-pack-publish.yml +++ b/.github/workflows/build-pack-publish.yml @@ -11,29 +11,50 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 strategy: matrix: - arch: [x64, arm, arm64, alpine, alpine-arm, alpine-arm64] + os: [linux] + arch: [amd64, arm64, arm] steps: - uses: actions/checkout@v2 - uses: docker/setup-qemu-action@v1 with: image: tonistiigi/binfmt:latest - platforms: arm,arm64 #all - - run: docker build . -f ./Dockerfile-${{ matrix.arch }} - --tag node-bcrypt-builder-${{ matrix.arch }} - - run: docker create --name node-bcryptjs-builder node-bcrypt-builder-${{ matrix.arch }} + platforms: arm,arm64 + + - run: > + docker build . + --tag node-bcrypt-builder + --platform ${{ matrix.os }}/${{ matrix.arch }} + - run: > + docker create + --name node-bcryptjs-builder + --platform ${{ matrix.os }}/${{ matrix.arch }} + node-bcrypt-builder - run: docker cp "node-bcryptjs-builder:/usr/local/opt/bcrypt-js/prebuilds" . + + # build for Alpine: + - run: > + docker build -f Dockerfile-alpine . + --tag node-bcrypt-builder-alpine + --platform ${{ matrix.os }}/${{ matrix.arch }} + - run: > + docker create + --name node-bcryptjs-builder-alpine + --platform ${{ matrix.os }}/${{ matrix.arch }} + node-bcrypt-builder-alpine + - run: docker cp "node-bcryptjs-builder-alpine:/usr/local/opt/bcrypt-js/prebuilds" . + - run: find prebuilds - uses: actions/upload-artifact@v2 with: - name: prebuild-${{ matrix.arch }} + name: prebuild-${{ matrix.os }}-${{ matrix.arch }} path: ./prebuilds pack: needs: build - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 @@ -60,7 +81,7 @@ jobs: publish-npm: needs: pack if: github.event_name == 'release' - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 @@ -78,7 +99,7 @@ jobs: publish-gpr: needs: pack if: github.event_name == 'release' - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 permissions: contents: read packages: write diff --git a/Dockerfile-arm b/Dockerfile similarity index 55% rename from Dockerfile-arm rename to Dockerfile index 3e13638..da3b22f 100755 --- a/Dockerfile-arm +++ b/Dockerfile @@ -1,11 +1,24 @@ # Usage: # -# docker build -t bcryptjs-linux-arm-builder -f Dockerfile-arm . -# docker create --name donut bcryptjs-linux-arm-builder +# docker build -t bcryptjs-builder . +# CONTAINER=$(docker create bcryptjs-builder) # # Then copy the artifact to your host: -# docker cp donut:/usr/local/opt/bcrypt-js/prebuilds . +# docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" . +# docker rm "$CONTAINER" +# +# Use --platform to build cross-platform i.e. for ARM: +# +# docker build -t bcryptjs-builder --platform "linux/arm64/v8" . +# CONTAINER=$docker create --platform "linux/arm64/v8" bcryptjs-builder) +# # this copies the prebuilds/linux-arm artifacts +# docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" . +# docker rm "$CONTAINER" + -FROM arm32v7/node:16-bullseye +ARG FROM_IMAGE=node:18-bullseye +#ARG FROM_IMAGE=arm32v7/node:16-bullseye +#ARG FROM_IMAGE=arm64v8/node:16-bullseye +FROM ${FROM_IMAGE} ENV project bcrypt-js ENV DEBIAN_FRONTEND noninteractive diff --git a/Dockerfile-alpine b/Dockerfile-alpine index 8d700ae..7ee6206 100755 --- a/Dockerfile-alpine +++ b/Dockerfile-alpine @@ -6,7 +6,8 @@ # docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" . # docker rm "$CONTAINER" -FROM node:16-alpine +ARG FROM_IMAGE=node:18-alpine +FROM ${FROM_IMAGE} ENV project bcrypt-js ENV DEBIAN_FRONTEND noninteractive diff --git a/Dockerfile-alpine-arm b/Dockerfile-alpine-arm deleted file mode 100755 index 8e1421e..0000000 --- a/Dockerfile-alpine-arm +++ /dev/null @@ -1,39 +0,0 @@ -# Usage: -# -# docker build -t bcryptjs-alpine-arm-builder -f Dockerfile-arm . -# CONTAINER=$(docker create bcryptjs-alpine-arm-builder) -# # Then copy the artifact to your host: -# docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" . -# docker rm "$CONTAINER" - -FROM arm32v7/node:16-alpine - -ENV project bcrypt-js -ENV DEBIAN_FRONTEND noninteractive -ENV LC_ALL en_US.UTF-8 -ENV LANG ${LC_ALL} - -RUN echo "#log: ${project}: Setup system" \ - && set -x \ - && apk add --update build-base python3 \ - && npm i -g prebuildify@5 node-gyp@9 \ - && sync - -ADD . /usr/local/opt/${project} -WORKDIR /usr/local/opt/${project} - -RUN echo "#log: ${project}: Running build" \ - && set -x \ - && npm ci \ - && npm run build - -ARG RUN_TESTS=true - -RUN if "${RUN_TESTS}"; then \ - echo "#log ${project}: Running tests" \ - && npm test; \ - else \ - echo "#log ${project}: Tests were skipped!"; \ - fi - -CMD /bin/bash -l diff --git a/Dockerfile-alpine-arm64 b/Dockerfile-alpine-arm64 deleted file mode 100755 index 0ea04fe..0000000 --- a/Dockerfile-alpine-arm64 +++ /dev/null @@ -1,39 +0,0 @@ -# Usage: -# -# docker build -t bcryptjs-alpine-arm-builder -f Dockerfile-arm . -# CONTAINER=$(docker create bcryptjs-alpine-arm-builder) -# # Then copy the artifact to your host: -# docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" . -# docker rm "$CONTAINER" - -FROM arm64v8/node:16-alpine - -ENV project bcrypt-js -ENV DEBIAN_FRONTEND noninteractive -ENV LC_ALL en_US.UTF-8 -ENV LANG ${LC_ALL} - -RUN echo "#log: ${project}: Setup system" \ - && set -x \ - && apk add --update build-base python3 \ - && npm i -g prebuildify@5 node-gyp@9 \ - && sync - -ADD . /usr/local/opt/${project} -WORKDIR /usr/local/opt/${project} - -RUN echo "#log: ${project}: Running build" \ - && set -x \ - && npm ci \ - && npm run build - -ARG RUN_TESTS=true - -RUN if "${RUN_TESTS}"; then \ - echo "#log ${project}: Running tests" \ - && npm test; \ - else \ - echo "#log ${project}: Tests were skipped!"; \ - fi - -CMD /bin/bash -l diff --git a/Dockerfile-arm64 b/Dockerfile-arm64 deleted file mode 100755 index 8d356f1..0000000 --- a/Dockerfile-arm64 +++ /dev/null @@ -1,44 +0,0 @@ -# Usage: -# -# docker build -t bcryptjs-linux-arm64-builder -f Dockerfile-arm64 . -# docker create --name donut-arm64 bcryptjs-linux-arm64-builder -# # Then copy the artifact to your host: -# docker cp donut-arm64:/usr/local/opt/bcrypt-js/prebuilds . - -FROM arm64v8/node:16-bullseye - -ENV project bcrypt-js -ENV DEBIAN_FRONTEND noninteractive -ENV LC_ALL en_US.UTF-8 -ENV LANG ${LC_ALL} - -RUN echo "#log: ${project}: Setup system" \ - && set -x \ - && apt-get update -y \ - && apt-get install -y \ - build-essential \ - python3 \ - && apt-get clean \ - && update-alternatives --install /usr/local/bin/python python /usr/bin/python3 20 \ - && npm i -g prebuildify@5 node-gyp@9 \ - && sync - -ADD . /usr/local/opt/${project} -WORKDIR /usr/local/opt/${project} - -RUN echo "#log: ${project}: Running build" \ - && set -x \ - && npm ci \ - && npm run build - -ARG RUN_TESTS=true - -RUN if "${RUN_TESTS}"; then \ - echo "#log ${project}: Running tests" \ - && npm test; \ - else \ - echo "#log ${project}: Tests were skipped!"; \ - fi - -CMD /bin/bash -l - diff --git a/Dockerfile-x64 b/Dockerfile-x64 deleted file mode 100755 index e6fc7a3..0000000 --- a/Dockerfile-x64 +++ /dev/null @@ -1,43 +0,0 @@ -# Usage: -# -# docker build -t bcryptjs-linux-x64-builder . -# docker create --name donut bcryptjs-linux-x64-builder -# # Then copy the artifact to your host: -# docker cp donut:/usr/local/opt/bcrypt-js/prebuilds . - -FROM node:16-bullseye - -ENV project bcrypt-js -ENV DEBIAN_FRONTEND noninteractive -ENV LC_ALL en_US.UTF-8 -ENV LANG ${LC_ALL} - -RUN echo "#log: ${project}: Setup system" \ - && set -x \ - && apt-get update -y \ - && apt-get install -y \ - build-essential \ - python3 \ - && apt-get clean \ - && update-alternatives --install /usr/local/bin/python python /usr/bin/python3 20 \ - && npm i -g prebuildify@5 node-gyp@9 \ - && sync - -ADD . /usr/local/opt/${project} -WORKDIR /usr/local/opt/${project} - -RUN echo "#log: ${project}: Running build" \ - && set -x \ - && npm ci \ - && npm run build - -ARG RUN_TESTS=true - -RUN if "${RUN_TESTS}"; then \ - echo "#log ${project}: Running tests" \ - && npm test; \ - else \ - echo "#log ${project}: Tests were skipped!"; \ - fi - -CMD /bin/bash -l diff --git a/build-all.sh b/build-all.sh index fcd89ab..75bf498 100755 --- a/build-all.sh +++ b/build-all.sh @@ -5,35 +5,33 @@ RUN_TESTS=${RUN_TESTS:-true} if [ -n "$CLEAN" ]; then rm -rf build build-tmp* + rm -rf lib/binding rm -rf prebuilds fi -npm i -npm i -g prebuildify node-gyp -npm run build +npm i -g prebuildify@5 node-gyp@9 +npm ci +#npm run build -# build for linux/x64: -if [ ! -d prebuilds/linux-x64 ]; then - docker build -t bcryptjs-linux-x64-builder -f Dockerfile-x64 --build-arg RUN_TESTS="$RUN_TESTS" . - CONTAINER=$(docker create bcryptjs-linux-x64-builder) +for PLATFORM in linux/amd64 linux/arm64/v8 linux/arm/v7; do + echo -- build for $PLATFORM -- + BUILDER_NAME="bcryptjs-${PLATFORM//\/-}-builder" + docker build -t "$BUILDER_NAME" \ + --build-arg RUN_TESTS="$RUN_TESTS" \ + --platform "$PLATFORM" . + CONTAINER=$(docker create --platform "$PLATFORM" "$BUILDER_NAME") docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" . docker rm "$CONTAINER" -fi -# build for linux/arm32: -if [ ! -d prebuilds/linux-arm ]; then - docker build -t bcryptjs-linux-arm-builder -f Dockerfile-arm --build-arg RUN_TESTS="$RUN_TESTS" . - CONTAINER=$(docker create --platform linux/arm/v7 bcryptjs-linux-arm-builder) + echo -- build for $PLATFORM Alpine -- + BUILDER_NAME="bcryptjs-${PLATFORM//\/-}-alpine-builder" + docker build -t "$BUILDER_NAME" -f Dockerfile-alpine \ + --build-arg RUN_TESTS="$RUN_TESTS" \ + --platform "$PLATFORM" . + CONTAINER=$(docker create --platform "$PLATFORM" "$BUILDER_NAME") docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" . docker rm "$CONTAINER" -fi -# build for linux/arm64: -if [ ! -d prebuilds/linux-arm64 ]; then - docker build -t bcryptjs-linux-arm64-builder -f Dockerfile-arm64 --build-arg RUN_TESTS="$RUN_TESTS" . - CONTAINER=$(docker create --platform linux/arm64/v8 bcryptjs-linux-arm64-builder) - docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" . - docker rm "$CONTAINER" -fi +done ls -lF prebuilds/ From 123a7cecf6902a8632876cb566b0429d1486ae66 Mon Sep 17 00:00:00 2001 From: Thom Nichols <95562+thom-nic@users.noreply.github.com> Date: Tue, 31 Oct 2023 10:54:14 -0400 Subject: [PATCH 10/12] remove appveyor and travis CI --- .travis.yml | 61 ---------------------------------------------------- appveyor.yml | 45 -------------------------------------- 2 files changed, 106 deletions(-) delete mode 100644 .travis.yml delete mode 100644 appveyor.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 7c94bf9..0000000 --- a/.travis.yml +++ /dev/null @@ -1,61 +0,0 @@ -language: node_js - -services: -- docker - -env: -- LINUX_CXX=g++-4.8 - -os: -- linux -- osx - -arch: -- amd64 -- arm64 - -node_js: -- '14' -- '16' -- '17' -- '18' -- '18' - -addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-4.8 - - bc - -before_install: -- echo Building for Node $TRAVIS_NODE_VERSION -- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then export CXX=$LINUX_CXX; $CXX --version; - fi; -- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then c++ --version; fi; -- npm install -g npm@latest prebuildify node-gyp - -install: true - -script: -- npm test -- npm run build -- | - if [[ "$TRAVIS_OS_NAME" == "linux" ]] - then - docker image pull public.ecr.aws/docker/library/node:${TRAVIS_NODE_VERSION}-alpine - docker run -w /src --entrypoint /bin/sh -v`pwd`:/src "node:${TRAVIS_NODE_VERSION}-alpine" test_alpine.sh - fi - -deploy: - provider: releases - skip_cleanup: true - api_key: - secure: j4gQ+m02izaw56EOd0gEStHAjCRfSCkohDWvpABiPzh1YPM9MvfEMSIvzzjV/0oMqi3Sy7eGyFv47EgQHZvouW0I8BIUzxuTCE5wP8z2SjABXCa/rz4WTppTc9d9ABq8JSdz80JxEwjmuwnYeMwWgOd7sT/VDiMxLYaXj0JWO7w= - file_glob: true - file: build/stage/kelektiv/node.bcrypt.js/releases/download/*/* - on: - node_js: '14' - repo: kelektiv/node.bcrypt.js - tags: true diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 36b7b37..0000000 --- a/appveyor.yml +++ /dev/null @@ -1,45 +0,0 @@ -environment: - matrix: - - nodejs_version: "14" - platform: x64 - - nodejs_version: "14" - platform: x86 - - nodejs_version: "16" - platform: x64 - - nodejs_version: "16" - platform: x86 - - nodejs_version: "18" - platform: x64 - - nodejs_version: "20" - platform: x64 - -install: - - where npm - - where node - - ps: Install-Product node $env:nodejs_version $env:platform - - 'npm install -g npm@latest prebuildify node-gyp' - -build: off - -artifacts: - - path: './bcrypt*.tgz' - -test_script: - - node --version - - npm --version - - npm install --build-from-source - - npm test - -after_test: - - npm run build - - npm run pack - -on_success: - - ps: > - if ($env:NODE_PRE_GYP_GITHUB_TOKEN -ne $null -and $env:APPVEYOR_REPO_TAG_NAME -match '^v(0|[1-9]+)\.(0|[1-9]+)\.(0|[1-9]+)(-\w)?$') { - echo "Publishing $env:APPVEYOR_REPO_TAG_NAME" - ## TODO CONFIGURE FOR GITHUB NPM REGISTRY ### - ## See https://docs.github.com/en/actions/guides/publishing-nodejs-packages#publishing-packages-to-github-packages - npm publish - } - From 1f1b08f687f379c20f447d769255391ecaeaa706 Mon Sep 17 00:00:00 2001 From: Thom Nichols <95562+thom-nic@users.noreply.github.com> Date: Tue, 31 Oct 2023 13:31:38 -0400 Subject: [PATCH 11/12] .github: updated action versions --- .github/workflows/build-pack-publish.yml | 20 ++++++++++---------- .github/workflows/ci.yaml | 6 +++--- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build-pack-publish.yml b/.github/workflows/build-pack-publish.yml index c7f9a3b..3317e66 100644 --- a/.github/workflows/build-pack-publish.yml +++ b/.github/workflows/build-pack-publish.yml @@ -17,8 +17,8 @@ jobs: os: [linux] arch: [amd64, arm64, arm] steps: - - uses: actions/checkout@v2 - - uses: docker/setup-qemu-action@v1 + - uses: actions/checkout@v4 + - uses: docker/setup-qemu-action@v3 with: image: tonistiigi/binfmt:latest platforms: arm,arm64 @@ -47,7 +47,7 @@ jobs: - run: docker cp "node-bcryptjs-builder-alpine:/usr/local/opt/bcrypt-js/prebuilds" . - run: find prebuilds - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: prebuild-${{ matrix.os }}-${{ matrix.arch }} path: ./prebuilds @@ -56,8 +56,8 @@ jobs: needs: build runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v3 with: node-version: 20 registry-url: 'https://registry.npmjs.org' @@ -73,7 +73,7 @@ jobs: done - run: chmod a+x prebuilds/*/*.node && find prebuilds -executable -type f - run: echo "PACK_FILE=$(npm pack)" >> $GITHUB_ENV - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: package-tgz path: ${{ env.PACK_FILE }} @@ -83,8 +83,8 @@ jobs: if: github.event_name == 'release' runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v3 with: node-version: 20 registry-url: 'https://registry.npmjs.org' @@ -104,8 +104,8 @@ jobs: contents: read packages: write steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v3 with: node-version: 20 registry-url: https://npm.pkg.github.com/ diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index d5c0991..7d2f747 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -15,9 +15,9 @@ jobs: matrix: node-version: [18, 20] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - run: npm ci @@ -32,7 +32,7 @@ jobs: container: image: node:${{ matrix.node-version }}-alpine steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Install dependencies run: | apk add make g++ python3 From ae21bf1e06d0111242d16df3d1405abfbad1cfff Mon Sep 17 00:00:00 2001 From: Thom Nichols <95562+thom-nic@users.noreply.github.com> Date: Wed, 1 Nov 2023 22:44:12 -0400 Subject: [PATCH 12/12] increase test timeout during (slow xplatform emulated) docker builds --- .github/workflows/build-pack-publish.yml | 2 ++ Dockerfile | 1 + Dockerfile-alpine | 1 + test/repetitions.test.js | 17 +++++++++++++---- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-pack-publish.yml b/.github/workflows/build-pack-publish.yml index 3317e66..2e6147c 100644 --- a/.github/workflows/build-pack-publish.yml +++ b/.github/workflows/build-pack-publish.yml @@ -25,6 +25,7 @@ jobs: - run: > docker build . + --build-arg TEST_TIMEOUT_SECONDS=30 --tag node-bcrypt-builder --platform ${{ matrix.os }}/${{ matrix.arch }} - run: > @@ -37,6 +38,7 @@ jobs: # build for Alpine: - run: > docker build -f Dockerfile-alpine . + --build-arg TEST_TIMEOUT_SECONDS=30 --tag node-bcrypt-builder-alpine --platform ${{ matrix.os }}/${{ matrix.arch }} - run: > diff --git a/Dockerfile b/Dockerfile index da3b22f..2802baf 100755 --- a/Dockerfile +++ b/Dockerfile @@ -45,6 +45,7 @@ RUN echo "#log: ${project}: Running build" \ && npm run build ARG RUN_TESTS=true +ARG TEST_TIMEOUT_SECONDS= RUN if "${RUN_TESTS}"; then \ echo "#log ${project}: Running tests" \ diff --git a/Dockerfile-alpine b/Dockerfile-alpine index 7ee6206..7570cfe 100755 --- a/Dockerfile-alpine +++ b/Dockerfile-alpine @@ -29,6 +29,7 @@ RUN echo "#log: ${project}: Running build" \ && npm run build ARG RUN_TESTS=true +ARG TEST_TIMEOUT_SECONDS= RUN if "${RUN_TESTS}"; then \ echo "#log ${project}: Running tests" \ diff --git a/test/repetitions.test.js b/test/repetitions.test.js index 7423c08..63ff407 100644 --- a/test/repetitions.test.js +++ b/test/repetitions.test.js @@ -1,6 +1,15 @@ const bcrypt = require('../bcrypt'); const EXPECTED = 2500; //number of times to iterate these tests.) +const { TEST_TIMEOUT_SECONDS } = process.env; +let timeout = 5e3; // default test timeout + +// it is necessary to increase the test timeout when emulating cross-architecture +// environments (i.e. arm64 from x86-64 host) which have significantly reduced performance: +if ( TEST_TIMEOUT_SECONDS ) + timeout = Number.parseInt(TEST_TIMEOUT_SECONDS, 10) * 1e3; + +jest.setTimeout(timeout); test('salt_length', () => { expect.assertions(EXPECTED); @@ -8,7 +17,7 @@ test('salt_length', () => { return Promise.all(Array.from({length: EXPECTED}, () => bcrypt.genSalt(10) .then(salt => expect(salt).toHaveLength(29)))); -}, 10e3) +}) test('test_hash_length', () => { expect.assertions(EXPECTED); @@ -16,7 +25,7 @@ test('test_hash_length', () => { return Promise.all(Array.from({length: EXPECTED}, () => bcrypt.hash('test', SALT) .then(hash => expect(hash).toHaveLength(60)))); -}, 10e3) +}) test('test_compare', () => { expect.assertions(EXPECTED); @@ -24,7 +33,7 @@ test('test_compare', () => { return Promise.all(Array.from({length: EXPECTED}, () => bcrypt.compare('test', HASH) .then(match => expect(match).toEqual(true)))); -}, 10e3) +}) test('test_hash_and_compare', () => { expect.assertions(EXPECTED * 3); @@ -42,5 +51,5 @@ test('test_hash_and_compare', () => { return Promise.all([goodCompare, badCompare]); }); })); -}, 30e3); +}, timeout * 3);