From d4e7cd127c530dc5a7e42df6f12aa98ff2e27b3f Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Tue, 22 Sep 2020 17:36:13 +0200 Subject: [PATCH 1/3] chore: add back support for generating signable binaries Use `boxednode` to create binaries that are compiled in a way that should enable us to sign them. `pkg` is retained as a helper for local development, since it requires no native compilation. --- README.md | 10 +- config/build.conf.js | 1 + package-lock.json | 946 +++++------------- package.json | 2 +- .../build/src/compile-and-zip-executable.ts | 1 + packages/build/src/compile-exec.ts | 20 +- packages/build/src/config.ts | 1 + packages/build/src/signable-compiler.spec.ts | 48 +- packages/build/src/signable-compiler.ts | 41 +- scripts/compile-exec.js | 9 + 10 files changed, 270 insertions(+), 809 deletions(-) diff --git a/README.md b/README.md index 992ab89292..9584956c3d 100644 --- a/README.md +++ b/README.md @@ -161,7 +161,13 @@ Compile just the CLI: npm run compile-ts ``` -Compile the standalone executable: +Compile the standalone executable (fast, but not in release mode): + +```shell +npm run compile-exec -- --no-signable +``` + +Compile the standalone executable (slow, release mode): ```shell npm run compile-exec @@ -170,7 +176,7 @@ npm run compile-exec Compile a specific package, e.g. the `.deb` for Debian: ```shell -npm run release -- --dry --build-variant=Debian +npm run evergreen-release package -- --dry --build-variant=Debian ``` ## Contributing diff --git a/config/build.conf.js b/config/build.conf.js index cd78b7c9f3..5356301a8a 100644 --- a/config/build.conf.js +++ b/config/build.conf.js @@ -67,6 +67,7 @@ module.exports = { isCi: process.env.IS_CI === 'true', isPatch: process.env.IS_PATCH === 'true', platform: os.platform(), + signableBinary: true, buildVariant: process.env.BUILD_VARIANT, repo: { owner: 'mongodb-js', diff --git a/package-lock.json b/package-lock.json index 49bab6f295..d9c219c783 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1345,18 +1345,6 @@ "to-fast-properties": "^2.0.0" } }, - "@calebboyd/async": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@calebboyd/async/-/async-1.4.0.tgz", - "integrity": "sha512-Q5tSWP28OF1nGd9KD6qspJselIfrHqk5+1gLGNNuQiUy80LE4g4ZAb+r+P8MYe1/FS5ICbm+OXiIalC7xhde3A==", - "dev": true - }, - "@calebboyd/semaphore": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@calebboyd/semaphore/-/semaphore-1.3.1.tgz", - "integrity": "sha512-17z9me12RgAEcMhIgR7f+BiXKbzwF9p1VraI69OxrUUSWGuSMOyOTEHQNVtMKuVrkEDVD0/Av5uiGZPBMYZljw==", - "dev": true - }, "@evocateur/libnpmaccess": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz", @@ -3417,12 +3405,6 @@ "physical-cpu-count": "^2.0.0" } }, - "@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", - "dev": true - }, "@sinonjs/commons": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.7.2.tgz", @@ -3468,15 +3450,6 @@ "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", "dev": true }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, "@types/chai": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.11.tgz", @@ -3929,35 +3902,12 @@ "picomatch": "^2.0.4" } }, - "app-builder": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/app-builder/-/app-builder-6.2.2.tgz", - "integrity": "sha512-s6EXBTusX8D6mBCcW5kS/h+MgF/ykLQPtQK+8oNeIUCjRvSm9HqytSVhE5igyKCNcIdus7sW3T2mtMe7YbPvug==", - "dev": true - }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, - "archive-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", - "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", - "dev": true, - "requires": { - "file-type": "^4.2.0" - }, - "dependencies": { - "file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", - "dev": true - } - } - }, "are-we-there-yet": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", @@ -4584,6 +4534,197 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, + "boxednode": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/boxednode/-/boxednode-1.2.2.tgz", + "integrity": "sha512-2OaPTN2n8L7KgbFghksKHeQfZbHcAwWGViRUlRBBcQzJ878hXcy0ViwUB1PVn6TgwysMevlfL5LYqTy25mxbpw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "cli-progress": "^3.8.2", + "node-fetch": "^2.6.1", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.5", + "yargs": "^16.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "cliui": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.1.tgz", + "integrity": "sha512-rcvHOWyGyid6I1WjT/3NatKj2kDt9OdSHSXpyLXaMWFbKpGACNW8pRhhdPUq9MWUOdwn8Rz9AVETjF4105rZZQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tar": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", + "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "dev": true, + "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" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.1.tgz", + "integrity": "sha512-/jJ831jEs4vGDbYPQp4yGKDYPSCCEQ45uZWJHE1AoYBzqdZi8+LDWas0z4HrmJXmKdpFsTiowSHXdxyFhpmdMg==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-6+nLw8xa9uK1BOEOykaiYAJVh6/CjxWXK/q9b5FpRgNslt8s22F2xMBqVIKgCRjNgGvGPBy8Vog7WN7yh4amtA==", + "dev": true, + "requires": { + "cliui": "^7.0.0", + "escalade": "^3.0.2", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.1", + "yargs-parser": "^20.0.0" + } + }, + "yargs-parser": { + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.0.tgz", + "integrity": "sha512-2agPoRFPoIcFzOIp6656gcvsg2ohtscpw2OINr/q46+Sq41xz2OYLqx5HRHabmFU1OARIPAYH5uteICE7mn/5A==", + "dev": true + } + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -4961,52 +5102,6 @@ "unset-value": "^1.0.0" } }, - "cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", - "dev": true, - "requires": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true - }, - "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "dev": true, - "requires": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - } - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - } - } - }, "cached-path-relative": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", @@ -5178,12 +5273,6 @@ "lodash.some": "^4.4.0" } }, - "cherow": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/cherow/-/cherow-1.6.9.tgz", - "integrity": "sha512-pmmkpIQRcnDA7EawKcg9+ncSZNTYfXqDx+K3oqqYvpZlqVBChjTomTfw+hePnkqYR3Y013818c0R1Q5P/7PGrQ==", - "dev": true - }, "chokidar": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", @@ -5266,11 +5355,15 @@ "restore-cursor": "^3.1.0" } }, - "cli-spinners": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.3.0.tgz", - "integrity": "sha512-Xs2Hf2nzrvJMFKimOR7YR0QwZ8fc0u98kdtwN1eNAZzNQgH3vK2pXzff6GJtKh7S5hoJ87ECiAiZFS2fb5Ii2w==", - "dev": true + "cli-progress": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.8.2.tgz", + "integrity": "sha512-qRwBxLldMSfxB+YGFgNRaj5vyyHe1yMpVeDL79c+7puGujdKJHQHydgqXDcrkvQgJ5U/d3lpf6vffSoVVUftVQ==", + "dev": true, + "requires": { + "colors": "^1.1.2", + "string-width": "^4.2.0" + } }, "cli-width": { "version": "2.2.1", @@ -5331,15 +5424,6 @@ "shallow-clone": "^3.0.0" } }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, "clui": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/clui/-/clui-0.3.6.tgz", @@ -7005,12 +7089,6 @@ "clone": "^1.0.2" } }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -7953,17 +8031,6 @@ "has-binary2": "~1.0.2" } }, - "enhanced-resolve": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", - "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - } - }, "ent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", @@ -7994,15 +8061,6 @@ "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", "dev": true }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -8154,6 +8212,12 @@ } } }, + "escalade": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.0.tgz", + "integrity": "sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig==", + "dev": true + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -10862,16 +10926,6 @@ "side-channel": "^1.0.2" } }, - "into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", - "dev": true, - "requires": { - "from2": "^2.1.1", - "p-is-promise": "^1.1.0" - } - }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -11524,12 +11578,6 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -11949,15 +11997,6 @@ "integrity": "sha1-XqKa/CUppCWThDfWlVtxTOapeR8=", "dev": true }, - "keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -12470,16 +12509,6 @@ } } }, - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, "memory-pager": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", @@ -12520,12 +12549,6 @@ "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", "dev": true }, - "meriyah": { - "version": "1.9.12", - "resolved": "https://registry.npmjs.org/meriyah/-/meriyah-1.9.12.tgz", - "integrity": "sha512-EgnwghBfzhegstEg3GL17cyjXs/YZOzDGW4mDpiv+v4ZqZgfjNvjfjsAJ99IJMA3LyGvdC8nffZJRGX65FOqLQ==", - "dev": true - }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -13980,354 +14003,28 @@ "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, - "nexe": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/nexe/-/nexe-4.0.0-beta.6.tgz", - "integrity": "sha512-xqK2xzhEjOfFFYHgxr9EmE8Bxn3xyveSB5KlDz1qxMx2SejOIrWCshSruFysc7a8Ul4Pxv5KpauXFQtKjaPatg==", + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "nise": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz", + "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==", "dev": true, "requires": { - "@calebboyd/semaphore": "^1.3.1", - "app-builder": "^6.2.2", - "caw": "^2.0.1", - "chalk": "^2.4.2", - "cherow": "1.6.9", - "download": "^7.1.0", - "globby": "^10.0.1", - "got": "^9.6.0", - "minimist": "^1.2.5", - "mkdirp": "^1.0.4", - "multistream": "^4.0.0", - "ora": "^3.4.0", - "pify": "^4.0.1", - "resolve-dependencies": "^4.0.0", - "rimraf": "^3.0.0" - }, - "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "download": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", - "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", - "dev": true, - "requires": { - "archive-type": "^4.0.0", - "caw": "^2.0.1", - "content-disposition": "^0.5.2", - "decompress": "^4.2.0", - "ext-name": "^5.0.0", - "file-type": "^8.1.0", - "filenamify": "^2.0.0", - "get-stream": "^3.0.0", - "got": "^8.3.1", - "make-dir": "^1.2.0", - "p-event": "^2.1.0", - "pify": "^3.0.0" - }, - "dependencies": { - "got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "fast-glob": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", - "integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "file-type": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", - "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "dependencies": { - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - } - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true - } - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "ignore": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.6.tgz", - "integrity": "sha512-cgXgkypZBcCnOgSihyeqbo6gjIaIyDqPQB7Ra4vhE9m6kigdGoQDMHjviFhRZo3IMlRy6yElosoviMs5YxZXUA==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "multistream": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/multistream/-/multistream-4.0.0.tgz", - "integrity": "sha512-t0C8MAtH/d3Y+5nooEtUMWli92lVw9Jhx4uOhRl5GAwS5vc+YTmp/VXNJNsCBAMeEyK/6zhbk6x9JE3AiCvo4g==", - "dev": true, - "requires": { - "readable-stream": "^3.4.0" - } - }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", - "dev": true - }, - "p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", - "dev": true - }, - "p-event": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", - "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", - "dev": true, - "requires": { - "p-timeout": "^2.0.1" - } - }, - "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - } - } - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "nise": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz", - "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==", - "dev": true, - "requires": { - "@sinonjs/formatio": "^3.2.1", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "lolex": "^5.0.1", - "path-to-regexp": "^1.7.0" + "@sinonjs/formatio": "^3.2.1", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "lolex": "^5.0.1", + "path-to-regexp": "^1.7.0" }, "dependencies": { "lolex": { @@ -15088,56 +14785,6 @@ "word-wrap": "~1.2.3" } }, - "ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - } - } - }, "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -15195,12 +14842,6 @@ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, - "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "dev": true - }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -16919,12 +16560,6 @@ "genfun": "^5.0.0" } }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, "ps-node": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/ps-node/-/ps-node-0.1.6.tgz", @@ -17028,17 +16663,6 @@ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "dev": true }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -17558,97 +17182,6 @@ } } }, - "resolve-dependencies": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-dependencies/-/resolve-dependencies-4.0.0.tgz", - "integrity": "sha512-M5d5+5HSsei7JB9fLMcVh4F3Gn1xwYbo4W+pWNFUpDpd1+foJ7ruLpEy3VzG4O6dmkOrL7blTfoy15hJyGQXOw==", - "dev": true, - "requires": { - "@calebboyd/async": "^1.4.0", - "enhanced-resolve": "^4.1.1", - "globby": "^11.0.0", - "meriyah": "^1.9.12" - }, - "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "fast-glob": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", - "integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "globby": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.0.tgz", - "integrity": "sha512-iuehFnR3xu5wBBtm4xi0dMe92Ob87ufyu/dHwpDYfbcpYpIbrO5OnS8M1vWvrBhSGEJ3/Ecj7gnX76P8YxpPEg==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "ignore": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.6.tgz", - "integrity": "sha512-cgXgkypZBcCnOgSihyeqbo6gjIaIyDqPQB7Ra4vhE9m6kigdGoQDMHjviFhRZo3IMlRy6yElosoviMs5YxZXUA==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - } - } - }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -17661,15 +17194,6 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -18833,12 +18357,6 @@ } } }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true - }, "string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", @@ -19176,12 +18694,6 @@ "connected-domain": "^1.0.0" } }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, "tar": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.1.tgz", @@ -19489,12 +19001,6 @@ } } }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true - }, "to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", diff --git a/package.json b/package.json index 18cc5bf269..539d4b5f6b 100644 --- a/package.json +++ b/package.json @@ -73,6 +73,7 @@ "adm-zip": "^0.4.14", "aws-sdk": "^2.674.0", "axios": "^0.19.2", + "boxednode": "^1.2.2", "browserify": "^16.5.0", "chai": "^4.2.0", "command-exists": "^1.2.9", @@ -94,7 +95,6 @@ "mocha": "^7.1.2", "mongodb-js-precommit": "^2.0.0", "mongodb-runner": "^4.7.5", - "nexe": "^4.0.0-beta.6", "node-codesign": "durran/node-codesign", "parcel-bundler": "^1.12.4", "pkg": "^4.4.3", diff --git a/packages/build/src/compile-and-zip-executable.ts b/packages/build/src/compile-and-zip-executable.ts index bb3104209d..06223df663 100644 --- a/packages/build/src/compile-and-zip-executable.ts +++ b/packages/build/src/compile-and-zip-executable.ts @@ -8,6 +8,7 @@ export default async function compileAndZipExecutable(config: Config): Promise => { - // Nexe has a huge problem figuring out dependencies in this project, - // especially with all the lerna symlinking, so we use Parcel to bundle - // up everything into a single JS under cli-repl/dist/mongosh.js - // that Nexe can make an executable of. This JS also takes care of the - // analytics config file being written. + // We use Parcel to bundle up everything into a single JS under + // cli-repl/dist/mongosh.js that the executable generator can use as input. + // This JS also takes care of the analytics config file being written. await generateInput(input, execInput, analyticsConfig, segmentKey); const executable = executablePath(outputDir, platform); console.log('mongosh: creating binary:', executable); - if (platform === Platform.MacOs) { - const { exec } = require('pkg'); - await new UnsignableCompiler(input, executable, platform) - .compile(exec); + if (signable) { + const { compileJSFileAsBinary } = require('boxednode'); + await new SignableCompiler(execInput, executable, platform) + .compile(compileJSFileAsBinary); } else { + // pkg is faster than building from source and doesn't require build tools, + // so it can be nice to have it for local development. const { exec } = require('pkg'); await new UnsignableCompiler(input, executable, platform) .compile(exec); diff --git a/packages/build/src/config.ts b/packages/build/src/config.ts index 3e74ba898c..41846d9e18 100644 --- a/packages/build/src/config.ts +++ b/packages/build/src/config.ts @@ -23,6 +23,7 @@ export default interface Config { appleAppIdentity?: string; isCi?: boolean; platform?: string; + signableBinary?: boolean; buildVariant?: string; repo?: { owner: string; diff --git a/packages/build/src/signable-compiler.spec.ts b/packages/build/src/signable-compiler.spec.ts index dbc1c59ffa..216c8c8114 100644 --- a/packages/build/src/signable-compiler.spec.ts +++ b/packages/build/src/signable-compiler.spec.ts @@ -1,6 +1,7 @@ import { expect } from 'chai'; -import SignableCompiler, { Target } from './signable-compiler'; +import SignableCompiler from './signable-compiler'; import Platform from './platform'; +import semver from 'semver'; describe('signable compiler module', () => { describe('SignableCompiler', () => { @@ -9,48 +10,9 @@ describe('signable compiler module', () => { }); describe('#determineTarget', () => { - context('when the platform is windows', () => { - const compiler = new SignableCompiler('', '', Platform.Windows); - - it('returns win', () => { - expect(compiler.determineTarget()).to.equal(Target.Windows); - }); - }); - - context('when the platform is macos', () => { - const compiler = new SignableCompiler('', '', Platform.MacOs); - - it('returns macos', () => { - expect(compiler.determineTarget()).to.equal(Target.MacOs); - }); - }); - - context('when the platform is linux', () => { - const compiler = new SignableCompiler('', '', Platform.Linux); - - it('returns linux', () => { - expect(compiler.determineTarget()).to.equal(Target.Linux); - }); - }); - }); - }); - - describe('.Target', () => { - describe('Target.Windows', () => { - it('returns win', () => { - expect(Target.Windows).to.equal('win32-x86-12.4.0'); - }); - }); - - describe('Target.MacOs', () => { - it('returns macos', () => { - expect(Target.MacOs).to.equal('darwin-12.4.0'); - }); - }); - - describe('Target.Linux', () => { - it('returns linux', () => { - expect(Target.Linux).to.equal('linux-x86-12.4.0'); + it('returns a valid semver string', () => { + const target = new SignableCompiler('', '', Platform.Linux).determineTarget(); + expect(() => semver.minVersion(target)).to.not.throw; }); }); }); diff --git a/packages/build/src/signable-compiler.ts b/packages/build/src/signable-compiler.ts index ad92ca6d01..ea10c99f8a 100644 --- a/packages/build/src/signable-compiler.ts +++ b/packages/build/src/signable-compiler.ts @@ -3,15 +3,6 @@ import Platform from './platform'; import { cpus } from 'os'; import { promises as fs } from 'fs'; -/** - * Target enum. - */ -enum Target { - Windows = 'win32-x86-12.4.0', - MacOs = 'darwin-12.4.0', - Linux = 'linux-x86-12.4.0' -} - /** * A compiler that can produce an executable that is actually * code signable. @@ -21,7 +12,7 @@ class SignableCompiler extends Compiler { /** * Compile the executable with the library. * - * @param {Function} exec - The Nexe compile function. + * @param {Function} exec - The boxednode compile function. */ async compile(exec: Function) { const target = this.determineTarget(); @@ -30,24 +21,11 @@ class SignableCompiler extends Compiler { // Evergreen and XCode don't have up to date libraries to compile // open ssl with asm so we revert back to the slower version. await exec({ - build: true, - // XXX This is not set because otherwise no runnable executable is generated - // mangle: false, - configure: ['--openssl-no-asm'], - make: [`-j${cpus().length}`], - input: this.input, - output: this.output, - loglevel: 'verbose', - targets: [ target ], - patches: [ - async (compiler, next) => { - const source = await fs.readFile(this.input, 'utf8'); - await compiler.setFileContentsAsync( - 'lib/_third_party_main.js', - source); - return await next(); - } - ] + configureArgs: this.platform === Platform.Windows ? ['openssl-no-asm'] : ['--openssl-no-asm'], + sourceFile: this.input, + targetFile: this.output, + nodeVersionRange: target, + namespace: 'mongosh' }); } @@ -57,13 +35,8 @@ class SignableCompiler extends Compiler { * @returns {string} The target name. */ determineTarget(): string { - switch(this.platform) { - case Platform.Windows: return Target.Windows; - case Platform.MacOs: return Target.MacOs; - default: return Target.Linux; - } + return '^12.0.0'; }; } export default SignableCompiler; -export { Target }; diff --git a/scripts/compile-exec.js b/scripts/compile-exec.js index 1f1aad9df1..c6e6928dc7 100644 --- a/scripts/compile-exec.js +++ b/scripts/compile-exec.js @@ -6,11 +6,20 @@ const config = require(path.join(__dirname, '..', 'config', 'build.conf.js')); const run = async() => { console.log(`node --version ${process.version}`); + let { signableBinary } = config; + if (process.argv.includes('--no-signable')) { + signableBinary = false; + } + if (process.argv.includes('--signable')) { + signableBinary = true; + } + await compileExec( config.input, config.execInput, config.outputDir, os.platform(), + signableBinary, config.analyticsConfig, config.segmentKey ); From bf157380cf35c130cb89f7ad059cdc77b216d06d Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Wed, 23 Sep 2020 15:08:15 +0200 Subject: [PATCH 2/3] fixup! chore: add back support for generating signable binaries --- .evergreen/.install_node | 2 +- .evergreen/InstallNode.ps1 | 2 +- .evergreen/SetupEnv.ps1 | 3 +- README.md | 8 +-- config/build.conf.js | 2 +- package-lock.json | 6 +- package.json | 2 +- packages/build/src/compilable.ts | 26 --------- .../build/src/compile-and-zip-executable.ts | 5 +- packages/build/src/compile-exec.ts | 21 ++----- packages/build/src/compiler.ts | 28 --------- packages/build/src/config.ts | 1 + packages/build/src/signable-compiler.spec.ts | 19 ------- packages/build/src/signable-compiler.ts | 33 +++++------ .../build/src/unsignable-compiler.spec.ts | 57 ------------------- packages/build/src/unsignable-compiler.ts | 50 ---------------- packages/cli-repl/src/run.ts | 6 ++ scripts/compile-exec.js | 11 +--- 18 files changed, 41 insertions(+), 241 deletions(-) delete mode 100644 packages/build/src/compilable.ts delete mode 100644 packages/build/src/compiler.ts delete mode 100644 packages/build/src/signable-compiler.spec.ts delete mode 100644 packages/build/src/unsignable-compiler.spec.ts delete mode 100644 packages/build/src/unsignable-compiler.ts diff --git a/.evergreen/.install_node b/.evergreen/.install_node index 42fc8e53d9..f0e8f43e99 100644 --- a/.evergreen/.install_node +++ b/.evergreen/.install_node @@ -1,4 +1,4 @@ -export NODE_JS_VERSION='12.4.0' +export NODE_JS_VERSION='12.18.4' curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash export NVM_DIR="$HOME/.nvm" diff --git a/.evergreen/InstallNode.ps1 b/.evergreen/InstallNode.ps1 index 74999454a6..a001fd7cbd 100644 --- a/.evergreen/InstallNode.ps1 +++ b/.evergreen/InstallNode.ps1 @@ -1,4 +1,4 @@ -$version = "12.4.0" +$version = "12.18.4" $url = "https://nodejs.org/download/release/v$version/node-v$version-win-x64.zip" $filename = "node.zip" $node_zip = "$PSScriptRoot\$filename" diff --git a/.evergreen/SetupEnv.ps1 b/.evergreen/SetupEnv.ps1 index 15980e75aa..849161ba84 100644 --- a/.evergreen/SetupEnv.ps1 +++ b/.evergreen/SetupEnv.ps1 @@ -1,5 +1,6 @@ -$version = "12.4.0" +$version = "12.18.4" $Env:PATH = "$PSScriptRoot\node-v$version-win-x64;C:\Program Files\Git\mingw32\libexec\git-core;$Env:PATH" +$Env:NODE_JS_VERSION = "$version" echo "Using node version:" node --version diff --git a/README.md b/README.md index 9584956c3d..e8c8152690 100644 --- a/README.md +++ b/README.md @@ -161,13 +161,7 @@ Compile just the CLI: npm run compile-ts ``` -Compile the standalone executable (fast, but not in release mode): - -```shell -npm run compile-exec -- --no-signable -``` - -Compile the standalone executable (slow, release mode): +Compile the standalone executable (this may take some time): ```shell npm run compile-exec diff --git a/config/build.conf.js b/config/build.conf.js index 5356301a8a..2fbc2ade90 100644 --- a/config/build.conf.js +++ b/config/build.conf.js @@ -67,7 +67,7 @@ module.exports = { isCi: process.env.IS_CI === 'true', isPatch: process.env.IS_PATCH === 'true', platform: os.platform(), - signableBinary: true, + execNodeVersion: process.env.NODE_JS_VERSION || `^${process.version.slice(1)}`, buildVariant: process.env.BUILD_VARIANT, repo: { owner: 'mongodb-js', diff --git a/package-lock.json b/package-lock.json index d9c219c783..2e9f291f18 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4535,9 +4535,9 @@ "dev": true }, "boxednode": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/boxednode/-/boxednode-1.2.2.tgz", - "integrity": "sha512-2OaPTN2n8L7KgbFghksKHeQfZbHcAwWGViRUlRBBcQzJ878hXcy0ViwUB1PVn6TgwysMevlfL5LYqTy25mxbpw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/boxednode/-/boxednode-1.2.3.tgz", + "integrity": "sha512-Fi/ThgA1v2gqTJ2GWCHvsl7eN6SbY9B++U34U7xaN2jHqCtNi8vJqI9RFXF8woqejoQ/PRg1vtgmqgKlk0OQEQ==", "dev": true, "requires": { "chalk": "^4.1.0", diff --git a/package.json b/package.json index 539d4b5f6b..96b4051f61 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "adm-zip": "^0.4.14", "aws-sdk": "^2.674.0", "axios": "^0.19.2", - "boxednode": "^1.2.2", + "boxednode": "^1.2.3", "browserify": "^16.5.0", "chai": "^4.2.0", "command-exists": "^1.2.9", diff --git a/packages/build/src/compilable.ts b/packages/build/src/compilable.ts deleted file mode 100644 index b955c94177..0000000000 --- a/packages/build/src/compilable.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Compilers need to implement this interface. - */ -interface Compilable { - readonly input: string; - readonly output: string; - readonly platform: string; - - /** - * Compile the executaable. - * - * @param {Function} exec - The compilation function. - * - * @returns {Promise} The promise. - */ - compile(exec: Function): Promise; - - /** - * Determine the name of the target platform. - * - * @returns {string} The name. - */ - determineTarget(): string; -} - -export default Compilable; diff --git a/packages/build/src/compile-and-zip-executable.ts b/packages/build/src/compile-and-zip-executable.ts index 06223df663..20168f9aa7 100644 --- a/packages/build/src/compile-and-zip-executable.ts +++ b/packages/build/src/compile-and-zip-executable.ts @@ -7,10 +7,9 @@ export default async function compileAndZipExecutable(config: Config): Promise => { // We use Parcel to bundle up everything into a single JS under @@ -60,20 +59,12 @@ const compileExec = async( // This JS also takes care of the analytics config file being written. await generateInput(input, execInput, analyticsConfig, segmentKey); - const executable = executablePath(outputDir, platform); + const executable = executablePath(outputDir, os.platform()); console.log('mongosh: creating binary:', executable); - if (signable) { - const { compileJSFileAsBinary } = require('boxednode'); - await new SignableCompiler(execInput, executable, platform) - .compile(compileJSFileAsBinary); - } else { - // pkg is faster than building from source and doesn't require build tools, - // so it can be nice to have it for local development. - const { exec } = require('pkg'); - await new UnsignableCompiler(input, executable, platform) - .compile(exec); - } + const { compileJSFileAsBinary } = require('boxednode'); + await new SignableCompiler(execInput, executable, execNodeVersion) + .compile(compileJSFileAsBinary); return executable; }; diff --git a/packages/build/src/compiler.ts b/packages/build/src/compiler.ts deleted file mode 100644 index 751977915c..0000000000 --- a/packages/build/src/compiler.ts +++ /dev/null @@ -1,28 +0,0 @@ -import Compilable from './compilable'; - -/** - * Common class for compilers to extend from. - */ -abstract class Compiler implements Compilable { - readonly input: string; - readonly output: string; - readonly platform: string; - - /** - * Instantiate the compiler. - * - * @param {string} input - The input location. - * @param {string} output - The output location. - * @param {string} platform - The platform. - */ - constructor(input: string, output: string, platform: string) { - this.input = input; - this.output = output; - this.platform = platform; - } - - abstract compile(exec: Function): Promise; - abstract determineTarget(): string; -} - -export default Compiler; diff --git a/packages/build/src/config.ts b/packages/build/src/config.ts index 41846d9e18..328fe59df2 100644 --- a/packages/build/src/config.ts +++ b/packages/build/src/config.ts @@ -23,6 +23,7 @@ export default interface Config { appleAppIdentity?: string; isCi?: boolean; platform?: string; + execNodeVersion?: string; signableBinary?: boolean; buildVariant?: string; repo?: { diff --git a/packages/build/src/signable-compiler.spec.ts b/packages/build/src/signable-compiler.spec.ts deleted file mode 100644 index 216c8c8114..0000000000 --- a/packages/build/src/signable-compiler.spec.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { expect } from 'chai'; -import SignableCompiler from './signable-compiler'; -import Platform from './platform'; -import semver from 'semver'; - -describe('signable compiler module', () => { - describe('SignableCompiler', () => { - describe('#compile', () => { - - }); - - describe('#determineTarget', () => { - it('returns a valid semver string', () => { - const target = new SignableCompiler('', '', Platform.Linux).determineTarget(); - expect(() => semver.minVersion(target)).to.not.throw; - }); - }); - }); -}); diff --git a/packages/build/src/signable-compiler.ts b/packages/build/src/signable-compiler.ts index ea10c99f8a..638293348f 100644 --- a/packages/build/src/signable-compiler.ts +++ b/packages/build/src/signable-compiler.ts @@ -1,13 +1,21 @@ -import Compiler from './compiler'; import Platform from './platform'; -import { cpus } from 'os'; +import os from 'os'; import { promises as fs } from 'fs'; /** * A compiler that can produce an executable that is actually * code signable. */ -class SignableCompiler extends Compiler { +class SignableCompiler { + sourceFile: string; + targetFile: string; + nodeVersionRange: string; + + constructor(sourceFile: string, targetFile: string, nodeVersionRange: string) { + this.sourceFile = sourceFile; + this.targetFile = targetFile; + this.nodeVersionRange = nodeVersionRange; + } /** * Compile the executable with the library. @@ -15,28 +23,17 @@ class SignableCompiler extends Compiler { * @param {Function} exec - The boxednode compile function. */ async compile(exec: Function) { - const target = this.determineTarget(); - // This compiles the executable along with Node from source. // Evergreen and XCode don't have up to date libraries to compile // open ssl with asm so we revert back to the slower version. await exec({ - configureArgs: this.platform === Platform.Windows ? ['openssl-no-asm'] : ['--openssl-no-asm'], - sourceFile: this.input, - targetFile: this.output, - nodeVersionRange: target, + configureArgs: os.platform() === Platform.Windows ? ['openssl-no-asm'] : ['--openssl-no-asm'], + sourceFile: this.sourceFile, + targetFile: this.targetFile, + nodeVersionRange: this.nodeVersionRange, namespace: 'mongosh' }); } - - /** - * Determine the target name. - * - * @returns {string} The target name. - */ - determineTarget(): string { - return '^12.0.0'; - }; } export default SignableCompiler; diff --git a/packages/build/src/unsignable-compiler.spec.ts b/packages/build/src/unsignable-compiler.spec.ts deleted file mode 100644 index 9df1817afd..0000000000 --- a/packages/build/src/unsignable-compiler.spec.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { expect } from 'chai'; -import UnunsignableCompiler, { Target } from './unsignable-compiler'; -import Platform from './platform'; - -describe('unsignable compiler module', () => { - describe('UnunsignableCompiler', () => { - describe('#compile', () => { - - }); - - describe('#determineTarget', () => { - context('when the platform is windows', () => { - const compiler = new UnunsignableCompiler('', '', Platform.Windows); - - it('returns win', () => { - expect(compiler.determineTarget()).to.equal(Target.Windows); - }); - }); - - context('when the platform is macos', () => { - const compiler = new UnunsignableCompiler('', '', Platform.MacOs); - - it('returns macos', () => { - expect(compiler.determineTarget()).to.equal(Target.MacOs); - }); - }); - - context('when the platform is linux', () => { - const compiler = new UnunsignableCompiler('', '', Platform.Linux); - - it('returns linux', () => { - expect(compiler.determineTarget()).to.equal(Target.Linux); - }); - }); - }); - }); - - describe('.Target', () => { - describe('Target.Windows', () => { - it('returns win', () => { - expect(Target.Windows).to.equal('win'); - }); - }); - - describe('Target.MacOs', () => { - it('returns macos', () => { - expect(Target.MacOs).to.equal('macos'); - }); - }); - - describe('Target.Linux', () => { - it('returns linux', () => { - expect(Target.Linux).to.equal('linux'); - }); - }); - }); -}); diff --git a/packages/build/src/unsignable-compiler.ts b/packages/build/src/unsignable-compiler.ts deleted file mode 100644 index ce2c7a3f26..0000000000 --- a/packages/build/src/unsignable-compiler.ts +++ /dev/null @@ -1,50 +0,0 @@ -import Compiler from './compiler'; -import Platform from './platform'; - -/** - * Target enum. - */ -enum Target { - Windows = 'win', - MacOs = 'macos', - Linux = 'linux' -} - -/** - * A compiler that can produce an executable that is not - * code signable, but faster for dev environments. - */ -class UnsignableCompiler extends Compiler { - - /** - * Compile the executable with the library. - * - * @param {Function} exec - The pkg compile function. - */ - compile(exec: Function) { - const target = this.determineTarget(); - return exec([ - this.input, - '-o', - this.output, - '-t', - `node12-${target}-x64` - ]); - } - - /** - * Determine the target name. - * - * @returns {string} The target name. - */ - determineTarget(): string { - switch(this.platform) { - case Platform.Windows: return Target.Windows; - case Platform.MacOs: return Target.MacOs; - default: return Target.Linux; - } - }; -} - -export default UnsignableCompiler; -export { Target }; diff --git a/packages/cli-repl/src/run.ts b/packages/cli-repl/src/run.ts index feeacf3472..199b29fa1a 100644 --- a/packages/cli-repl/src/run.ts +++ b/packages/cli-repl/src/run.ts @@ -12,6 +12,12 @@ try { // eslint-disable-next-line no-console console.log(version); } else { + if (process.execPath === process.argv[1]) { + // Remove the built-in Node.js listener that prints e.g. deprecation + // warnings in single-binary release mode. + process.removeAllListeners('warning'); + } + process.title = 'mongosh'; const driverOptions = mapCliToDriver(options); const driverUri = generateUri(options); diff --git a/scripts/compile-exec.js b/scripts/compile-exec.js index c6e6928dc7..18495f2d76 100644 --- a/scripts/compile-exec.js +++ b/scripts/compile-exec.js @@ -6,20 +6,11 @@ const config = require(path.join(__dirname, '..', 'config', 'build.conf.js')); const run = async() => { console.log(`node --version ${process.version}`); - let { signableBinary } = config; - if (process.argv.includes('--no-signable')) { - signableBinary = false; - } - if (process.argv.includes('--signable')) { - signableBinary = true; - } - await compileExec( config.input, config.execInput, config.outputDir, - os.platform(), - signableBinary, + config.execNodeVersion, config.analyticsConfig, config.segmentKey ); From 12c19f8d79ae57572c99bb20cf3beed045b941cc Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Wed, 23 Sep 2020 20:33:44 +0200 Subject: [PATCH 3/3] Add dockerfile for build environment --- .evergreen.yml | 23 ++++++++++++++++----- packages/build/src/signable-compiler.ts | 4 +++- scripts/docker/ubuntu16.04-build.Dockerfile | 20 ++++++++++++++++++ 3 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 scripts/docker/ubuntu16.04-build.Dockerfile diff --git a/.evergreen.yml b/.evergreen.yml index db3b89efe2..56a63c66b3 100644 --- a/.evergreen.yml +++ b/.evergreen.yml @@ -17,7 +17,20 @@ variables: source .evergreen/.setup_env export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD="true" export EVERGREEN_EXPANSIONS_PATH="$(pwd)/../tmp/expansions.yaml" - npm run evergreen-release package + if [ `uname` == Linux ]; then + mkdir -p tmp + cp "$(pwd)/../tmp/expansions.yaml" tmp/expansions.yaml + (cd scripts/docker && docker build -t ubuntu16.04-build -f ubuntu16.04-build.Dockerfile .) + echo Starting Docker container build + docker run -e PUPPETEER_SKIP_CHROMIUM_DOWNLOAD \ + -e EVERGREEN_EXPANSIONS_PATH=/tmp/build/tmp/expansions.yaml \ + -e NODE_JS_VERSION \ + -e BUILD_VARIANT \ + --rm -v $PWD:/tmp/build --network host ubuntu16.04-build \ + -c 'cd /tmp/build && npm run evergreen-release package' + else + npm run evergreen-release package + fi RELEASE_MONGOSH if [ `uname` == Darwin ]; then @@ -273,8 +286,8 @@ buildvariants: - name: test - name: release_linux - name: rhel - display_name: "RHEL 8.0" - run_on: rhel80-large + display_name: "RHEL 8.0 (in Ubuntu docker)" + run_on: ubuntu1804-test tasks: - name: check - name: release_rhel @@ -286,8 +299,8 @@ buildvariants: - name: test_ps - name: release_win_ps - name: debian - display_name: "Debian 10" - run_on: debian10-large + display_name: "Debian 10 (in Ubuntu docker)" + run_on: ubuntu1804-test tasks: - name: check - name: release_debian diff --git a/packages/build/src/signable-compiler.ts b/packages/build/src/signable-compiler.ts index 638293348f..2adb01662b 100644 --- a/packages/build/src/signable-compiler.ts +++ b/packages/build/src/signable-compiler.ts @@ -27,7 +27,9 @@ class SignableCompiler { // Evergreen and XCode don't have up to date libraries to compile // open ssl with asm so we revert back to the slower version. await exec({ - configureArgs: os.platform() === Platform.Windows ? ['openssl-no-asm'] : ['--openssl-no-asm'], + configureArgs: + os.platform() === Platform.Windows ? ['openssl-no-asm'] : + os.platform() === Platform.MacOs ? ['--openssl-no-asm'] : [], sourceFile: this.sourceFile, targetFile: this.targetFile, nodeVersionRange: this.nodeVersionRange, diff --git a/scripts/docker/ubuntu16.04-build.Dockerfile b/scripts/docker/ubuntu16.04-build.Dockerfile new file mode 100644 index 0000000000..f574a2c283 --- /dev/null +++ b/scripts/docker/ubuntu16.04-build.Dockerfile @@ -0,0 +1,20 @@ +FROM ubuntu:16.04 + +RUN apt-get update +RUN apt-get -y -qq install build-essential python2.7 curl apt-transport-https ca-certificates apt-utils software-properties-common + +# Add Node.js +RUN curl -sSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - +RUN echo "deb https://deb.nodesource.com/node_12.x xenial main" | tee /etc/apt/sources.list.d/nodesource.list +RUN echo "deb-src https://deb.nodesource.com/node_12.x xenial main" | tee -a /etc/apt/sources.list.d/nodesource.list + +# Add sufficiently recent compiler toolchain +RUN add-apt-repository ppa:ubuntu-toolchain-r/test + +RUN apt-get update +RUN apt-get -y -qq install nodejs g++-9 rpm + +ENV CC=gcc-9 +ENV CXX=g++-9 + +ENTRYPOINT [ "bash" ]