diff --git a/.evergreen/compass_package.sh b/.evergreen/compass_package.sh index 0bbe9de3c44..8134bc92cd8 100755 --- a/.evergreen/compass_package.sh +++ b/.evergreen/compass_package.sh @@ -1,22 +1,5 @@ #! /usr/bin/env bash if [[ "$OSTYPE" == "cygwin" ]]; then - # If not possible to remove this hack, we should find a better way - # to do this instead of directly referencing node_module paths, - # but first figure out what exactly was changed in our fork of - # electron-wix-msi - # - # TODO: https://jira.mongodb.org/browse/COMPASS-4888 - - echo "Fetching signtool -> notary-service hack..." - curl -fs \ - -o "signtool.exe" \ - --url "https://s3.amazonaws.com/boxes.10gen.com/build/signtool.exe" - rm -f node_modules/electron-winstaller/vendor/signtool.exe - rm -f node_modules/@mongodb-js/electron-wix-msi/vendor/signtool.exe - chmod +x signtool.exe - cp signtool.exe node_modules/@mongodb-js/electron-wix-msi/vendor/signtool.exe - cp signtool.exe node_modules/electron-winstaller/vendor/signtool.exe - echo "Starting Installer Service..." net start MSIServer fi diff --git a/.evergreen/functions.yml b/.evergreen/functions.yml index 0335231bc97..9d67350cb9f 100644 --- a/.evergreen/functions.yml +++ b/.evergreen/functions.yml @@ -75,7 +75,7 @@ post: params: local_files_include_filter: - src/.deps/.npm/_logs/*.log - remote_file: ${project}/${revision}/${build_variant}/${task_name} + remote_file: ${project}/${build_id}/${build_variant}/${task_name} content_type: text/plain - <<: *save-diagnostic-file params: @@ -291,7 +291,7 @@ functions: - <<: *get-artifact params: local_file: src/packages/compass/dist/${app_archive_name} - remote_file: ${project}/${revision}/${app_archive_name} + remote_file: ${project}/${build_id}/${app_archive_name} - command: shell.exec params: working_dir: src @@ -410,104 +410,104 @@ functions: - <<: *save-artifact params: local_file: src/packages/compass/dist/${windows_setup_filename} - remote_file: ${project}/${revision}/${windows_setup_filename} + remote_file: ${project}/${build_id}/${windows_setup_filename} - <<: *save-artifact params: local_file: src/packages/compass/dist/${windows_msi_filename} - remote_file: ${project}/${revision}/${windows_msi_filename} + remote_file: ${project}/${build_id}/${windows_msi_filename} - <<: *save-artifact params: local_file: src/packages/compass/dist/${windows_zip_filename} - remote_file: ${project}/${revision}/${windows_zip_filename} + remote_file: ${project}/${build_id}/${windows_zip_filename} content_type: application/zip - <<: *save-artifact params: local_file: src/packages/compass/dist/${windows_nupkg_full_filename} - remote_file: ${project}/${revision}/${windows_nupkg_full_filename} + remote_file: ${project}/${build_id}/${windows_nupkg_full_filename} - <<: *save-artifact params: local_file: src/packages/compass/dist/${windows_releases_filename} - remote_file: ${project}/${revision}/${windows_releases_filename} + remote_file: ${project}/${build_id}/${windows_releases_filename} save-macos-artifacts: - <<: *save-artifact params: local_file: src/packages/compass/dist/${osx_dmg_filename} - remote_file: ${project}/${revision}/${osx_dmg_filename} + remote_file: ${project}/${build_id}/${osx_dmg_filename} content_type: application/x-apple-diskimage - <<: *save-artifact params: local_file: src/packages/compass/dist/${osx_zip_filename} - remote_file: ${project}/${revision}/${osx_zip_filename} + remote_file: ${project}/${build_id}/${osx_zip_filename} content_type: application/zip save-rhel-artifacts: - <<: *save-artifact params: local_file: src/packages/compass/dist/${linux_rpm_filename} - remote_file: ${project}/${revision}/${linux_rpm_filename} + remote_file: ${project}/${build_id}/${linux_rpm_filename} content_type: application/x-redhat-package-manager - <<: *save-artifact params: local_file: src/packages/compass/dist/${linux_tar_filename} - remote_file: ${project}/${revision}/${linux_tar_filename} + remote_file: ${project}/${build_id}/${linux_tar_filename} content_type: application/x-gzip save-ubuntu-artifacts: - <<: *save-artifact params: local_file: src/packages/compass/dist/${linux_deb_filename} - remote_file: ${project}/${revision}/${linux_deb_filename} + remote_file: ${project}/${build_id}/${linux_deb_filename} content_type: application/vnd.debian.binary-package - <<: *save-artifact params: local_file: src/packages/compass/dist/${linux_tar_filename} - remote_file: ${project}/${revision}/${linux_tar_filename} + remote_file: ${project}/${build_id}/${linux_tar_filename} content_type: application/x-gzip get-artifacts: - <<: *get-artifact params: local_file: src/packages/compass/dist/${windows_setup_filename} - remote_file: ${project}/${revision}/${windows_setup_filename} + remote_file: ${project}/${build_id}/${windows_setup_filename} - <<: *get-artifact params: local_file: src/packages/compass/dist/${windows_msi_filename} - remote_file: ${project}/${revision}/${windows_msi_filename} + remote_file: ${project}/${build_id}/${windows_msi_filename} - <<: *get-artifact params: local_file: src/packages/compass/dist/${windows_zip_filename} - remote_file: ${project}/${revision}/${windows_zip_filename} + remote_file: ${project}/${build_id}/${windows_zip_filename} - <<: *get-artifact params: local_file: src/packages/compass/dist/${windows_nupkg_full_filename} - remote_file: ${project}/${revision}/${windows_nupkg_full_filename} + remote_file: ${project}/${build_id}/${windows_nupkg_full_filename} - <<: *get-artifact params: local_file: src/packages/compass/dist/${windows_releases_filename} - remote_file: ${project}/${revision}/${windows_releases_filename} + remote_file: ${project}/${build_id}/${windows_releases_filename} - <<: *get-artifact params: local_file: src/packages/compass/dist/${osx_dmg_filename} - remote_file: ${project}/${revision}/${osx_dmg_filename} + remote_file: ${project}/${build_id}/${osx_dmg_filename} - <<: *get-artifact params: local_file: src/packages/compass/dist/${osx_zip_filename} - remote_file: ${project}/${revision}/${osx_zip_filename} + remote_file: ${project}/${build_id}/${osx_zip_filename} - <<: *get-artifact params: local_file: src/packages/compass/dist/${linux_rpm_filename} - remote_file: ${project}/${revision}/${linux_rpm_filename} + remote_file: ${project}/${build_id}/${linux_rpm_filename} - <<: *get-artifact params: local_file: src/packages/compass/dist/${linux_deb_filename} - remote_file: ${project}/${revision}/${linux_deb_filename} + remote_file: ${project}/${build_id}/${linux_deb_filename} - <<: *get-artifact params: local_file: src/packages/compass/dist/${linux_tar_filename} - remote_file: ${project}/${revision}/${linux_tar_filename} + remote_file: ${project}/${build_id}/${linux_tar_filename} generate-tasks: - command: generate.tasks diff --git a/package-lock.json b/package-lock.json index 563ec8b20e6..b9477b16da2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14054,19 +14054,6 @@ "node": "*" } }, - "node_modules/binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "optional": true, - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - }, - "engines": { - "node": "*" - } - }, "node_modules/binary-extensions": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", @@ -14473,15 +14460,6 @@ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "node_modules/buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", - "optional": true, - "engines": { - "node": ">=0.2.0" - } - }, "node_modules/build": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/build/-/build-0.1.4.tgz", @@ -14902,18 +14880,6 @@ "node": ">=4" } }, - "node_modules/chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "optional": true, - "dependencies": { - "traverse": ">=0.3.0 <0.4" - }, - "engines": { - "node": "*" - } - }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -17262,63 +17228,6 @@ "node": ">=0.10.0" } }, - "node_modules/decompress-zip": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.3.3.tgz", - "integrity": "sha512-/fy1L4s+4jujqj3kNptWjilFw3E6De8U6XUFvqmh4npN3Vsypm3oT2V0bXcmbBWS+5j5tr4okYaFrOmyZkszEg==", - "optional": true, - "dependencies": { - "binary": "^0.3.0", - "graceful-fs": "^4.1.3", - "mkpath": "^0.1.0", - "nopt": "^3.0.1", - "q": "^1.1.2", - "readable-stream": "^1.1.8", - "touch": "0.0.3" - }, - "bin": { - "decompress-zip": "bin/decompress-zip" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress-zip/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "optional": true - }, - "node_modules/decompress-zip/node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "optional": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/decompress-zip/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "optional": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/decompress-zip/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "optional": true - }, "node_modules/decompress/node_modules/make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", @@ -20074,124 +19983,85 @@ } }, "node_modules/electron-winstaller": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-2.5.1.tgz", - "integrity": "sha1-p1n7gn2B2w9GV8P+o6c6plsWmbY=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.0.0.tgz", + "integrity": "sha512-V+jFda7aVAm0htCG8Q95buPUpmXZW9ujh1HdhSlWY6y4QnJnw4TfrmxTlQWV4p2ioF/71JMI/1YF+/qbSICogA==", + "hasInstallScript": true, "optional": true, "dependencies": { - "asar": "^0.11.0", - "bluebird": "^3.3.4", - "debug": "^2.2.0", - "fs-extra": "^0.26.7", + "asar": "^2.0.1", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", "lodash.template": "^4.2.2", - "temp": "^0.8.3" + "temp": "^0.9.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=8.0.0" } }, "node_modules/electron-winstaller/node_modules/asar": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/asar/-/asar-0.11.0.tgz", - "integrity": "sha1-uSbnksMV+MBIxDNx4yWwnJenZGQ=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/asar/-/asar-2.1.0.tgz", + "integrity": "sha512-d2Ovma+bfqNpvBzY/KU8oPY67ZworixTpkjSx0PCXnQi67c2cXmssaTxpFDUM0ttopXoGx/KRxNg/GDThYbXQA==", "optional": true, "dependencies": { - "chromium-pickle-js": "^0.1.0", - "commander": "^2.9.0", - "cuint": "^0.2.1", - "glob": "^6.0.4", - "minimatch": "^3.0.0", - "mkdirp": "^0.5.0", - "mksnapshot": "^0.3.0" + "chromium-pickle-js": "^0.2.0", + "commander": "^2.20.0", + "cuint": "^0.2.2", + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "tmp-promise": "^1.0.5" }, "bin": { - "asar": "bin/asar" - } - }, - "node_modules/electron-winstaller/node_modules/chromium-pickle-js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.1.0.tgz", - "integrity": "sha1-HUixB9ghJqLz4hHC6iX4A7pVGyE=", - "optional": true - }, - "node_modules/electron-winstaller/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "optional": true, - "dependencies": { - "ms": "2.0.0" + "asar": "bin/asar.js" + }, + "engines": { + "node": ">=8.0" + }, + "optionalDependencies": { + "@types/glob": "^7.1.1" } }, "node_modules/electron-winstaller/node_modules/fs-extra": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", - "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "optional": true, "dependencies": { "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "node_modules/electron-winstaller/node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "optional": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": "*" + "node": ">=6 <7 || >=8" } }, "node_modules/electron-winstaller/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "optional": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, - "node_modules/electron-winstaller/node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "optional": true, - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, "node_modules/electron-winstaller/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "optional": true, "dependencies": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" } }, - "node_modules/electron-winstaller/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "optional": true - }, "node_modules/electron-winstaller/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "optional": true, "dependencies": { "glob": "^7.1.3" @@ -20200,24 +20070,48 @@ "rimraf": "bin.js" } }, - "node_modules/electron-winstaller/node_modules/rimraf/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "node_modules/electron-winstaller/node_modules/temp": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", + "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", "optional": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "mkdirp": "^0.5.1", + "rimraf": "~2.6.2" }, "engines": { - "node": "*" + "node": ">=6.0.0" + } + }, + "node_modules/electron-winstaller/node_modules/tmp": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", + "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", + "optional": true, + "dependencies": { + "rimraf": "^2.6.3" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=6" + } + }, + "node_modules/electron-winstaller/node_modules/tmp-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-1.1.0.tgz", + "integrity": "sha512-8+Ah9aB1IRXCnIOxXZ0uFozV1nMU5xiu7hhFVUSxZ3bYu+psD4TzagCzVbexUCgNNGJnsmNDQlS4nG3mTyoNkw==", + "optional": true, + "dependencies": { + "bluebird": "^3.5.0", + "tmp": "0.1.0" + } + }, + "node_modules/electron-winstaller/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "optional": true, + "engines": { + "node": ">= 4.0.0" } }, "node_modules/electron/node_modules/@types/node": { @@ -36558,9 +36452,9 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "node_modules/minimist-options": { "version": "4.1.0", @@ -36845,66 +36739,6 @@ "node": ">=10" } }, - "node_modules/mkpath": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/mkpath/-/mkpath-0.1.0.tgz", - "integrity": "sha1-dVSm+Nhxg0zJe1RisSLEwSTW3pE=", - "optional": true - }, - "node_modules/mksnapshot": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/mksnapshot/-/mksnapshot-0.3.5.tgz", - "integrity": "sha512-PSBoZaj9h9myC3uRRW62RxmX8mrN3XbOkMEyURUD7v5CeJgtYTar50XU738t7Q0LtG1pBPtp5n5QwDGggRnEvw==", - "optional": true, - "dependencies": { - "decompress-zip": "0.3.x", - "fs-extra": "0.26.7", - "request": "2.x" - } - }, - "node_modules/mksnapshot/node_modules/fs-extra": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", - "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "node_modules/mksnapshot/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "optional": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/mksnapshot/node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "optional": true, - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/mksnapshot/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "optional": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/mocha": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", @@ -44687,7 +44521,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "devOptional": true, + "dev": true, "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" @@ -49505,7 +49339,7 @@ "version": "0.8.4", "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", - "devOptional": true, + "dev": true, "dependencies": { "rimraf": "~2.6.2" }, @@ -49542,7 +49376,7 @@ "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "devOptional": true, + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -50091,33 +49925,6 @@ "node": ">=6" } }, - "node_modules/touch": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/touch/-/touch-0.0.3.tgz", - "integrity": "sha1-Ua7z1ElXHU8oel2Hyci0kYGg2x0=", - "optional": true, - "dependencies": { - "nopt": "~1.0.10" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/touch/node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "optional": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, "node_modules/tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -50141,15 +49948,6 @@ "node": ">=8" } }, - "node_modules/traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", - "optional": true, - "engines": { - "node": "*" - } - }, "node_modules/trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", @@ -56360,7 +56158,7 @@ }, "packages/compass": { "name": "mongodb-compass", - "version": "0.0.0-dev.0", + "version": "0.0.1-dev.0", "hasInstallScript": true, "license": "SSPL", "dependencies": { @@ -64718,7 +64516,7 @@ "packages/compass-e2e-tests": { "version": "1.0.0", "dependencies": { - "mongodb-compass": "^0.0.0-dev.0" + "mongodb-compass": "^0.0.1-dev.0" }, "devDependencies": { "@mongodb-js/eslint-config-compass": "^0.8.0", @@ -97558,6 +97356,7 @@ }, "packages/hadron-build": { "version": "24.16.0", + "hasInstallScript": true, "license": "SSPL", "dependencies": { "@mongodb-js/devtools-github-repo": "^1.1.0", @@ -97617,7 +97416,7 @@ "electron-installer-debian": "^3.0.0", "electron-installer-dmg": "^3.0.0", "electron-installer-redhat": "^2.0.0", - "electron-winstaller": "2.5.1" + "electron-winstaller": "^5.0.0" } }, "packages/hadron-build/node_modules/camelcase": { @@ -143127,16 +142926,6 @@ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, - "binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "optional": true, - "requires": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - } - }, "binary-extensions": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", @@ -144286,12 +144075,6 @@ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", - "optional": true - }, "build": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/build/-/build-0.1.4.tgz", @@ -144607,15 +144390,6 @@ "integrity": "sha1-pdDKFOMpp5WW7XAFi2ZGvWmIz+k=", "dev": true }, - "chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "optional": true, - "requires": { - "traverse": ">=0.3.0 <0.4" - } - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -145341,7 +145115,7 @@ "lodash": "^4.17.21", "mocha": "*", "mongodb": "^4.4.0", - "mongodb-compass": "^0.0.0-dev.0", + "mongodb-compass": "^0.0.1-dev.0", "mongodb-connection-string-url": "^2.5.2", "mongodb-log-writer": "^1.1.4", "mongodb-runner": "^4.9.0", @@ -149492,56 +149266,6 @@ } } }, - "decompress-zip": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.3.3.tgz", - "integrity": "sha512-/fy1L4s+4jujqj3kNptWjilFw3E6De8U6XUFvqmh4npN3Vsypm3oT2V0bXcmbBWS+5j5tr4okYaFrOmyZkszEg==", - "optional": true, - "requires": { - "binary": "^0.3.0", - "graceful-fs": "^4.1.3", - "mkpath": "^0.1.0", - "nopt": "^3.0.1", - "q": "^1.1.2", - "readable-stream": "^1.1.8", - "touch": "0.0.3" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "optional": true - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "optional": true, - "requires": { - "abbrev": "1" - } - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "optional": true - } - } - }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -152413,132 +152137,106 @@ } }, "electron-winstaller": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-2.5.1.tgz", - "integrity": "sha1-p1n7gn2B2w9GV8P+o6c6plsWmbY=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.0.0.tgz", + "integrity": "sha512-V+jFda7aVAm0htCG8Q95buPUpmXZW9ujh1HdhSlWY6y4QnJnw4TfrmxTlQWV4p2ioF/71JMI/1YF+/qbSICogA==", "optional": true, "requires": { - "asar": "^0.11.0", - "bluebird": "^3.3.4", - "debug": "^2.2.0", - "fs-extra": "^0.26.7", + "asar": "^2.0.1", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", "lodash.template": "^4.2.2", - "temp": "^0.8.3" + "temp": "^0.9.0" }, "dependencies": { "asar": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/asar/-/asar-0.11.0.tgz", - "integrity": "sha1-uSbnksMV+MBIxDNx4yWwnJenZGQ=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/asar/-/asar-2.1.0.tgz", + "integrity": "sha512-d2Ovma+bfqNpvBzY/KU8oPY67ZworixTpkjSx0PCXnQi67c2cXmssaTxpFDUM0ttopXoGx/KRxNg/GDThYbXQA==", "optional": true, "requires": { - "chromium-pickle-js": "^0.1.0", - "commander": "^2.9.0", - "cuint": "^0.2.1", - "glob": "^6.0.4", - "minimatch": "^3.0.0", - "mkdirp": "^0.5.0", - "mksnapshot": "^0.3.0" + "@types/glob": "^7.1.1", + "chromium-pickle-js": "^0.2.0", + "commander": "^2.20.0", + "cuint": "^0.2.2", + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "tmp-promise": "^1.0.5" } }, - "chromium-pickle-js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.1.0.tgz", - "integrity": "sha1-HUixB9ghJqLz4hHC6iX4A7pVGyE=", - "optional": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "optional": true, "requires": { - "ms": "2.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "fs-extra": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", - "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "optional": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" + "graceful-fs": "^4.1.6" } }, - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "optional": true, "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimist": "^1.2.6" } }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "optional": true, "requires": { - "graceful-fs": "^4.1.6" + "glob": "^7.1.3" } }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "temp": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", + "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", "optional": true, "requires": { - "graceful-fs": "^4.1.9" + "mkdirp": "^0.5.1", + "rimraf": "~2.6.2" } }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "tmp": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", + "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", "optional": true, "requires": { - "minimist": "^1.2.5" + "rimraf": "^2.6.3" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "optional": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "tmp-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-1.1.0.tgz", + "integrity": "sha512-8+Ah9aB1IRXCnIOxXZ0uFozV1nMU5xiu7hhFVUSxZ3bYu+psD4TzagCzVbexUCgNNGJnsmNDQlS4nG3mTyoNkw==", "optional": true, "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } + "bluebird": "^3.5.0", + "tmp": "0.1.0" } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "optional": true } } }, @@ -157438,7 +157136,7 @@ "electron-packager": "^14.2.0", "electron-packager-plugin-non-proprietary-codecs-ffmpeg": "^1.0.2", "electron-rebuild": "^3.2.7", - "electron-winstaller": "2.5.1", + "electron-winstaller": "^5.0.0", "eslint": "^7.25.0", "eslint-config-mongodb-js": "^5.0.3", "eslint-plugin-mocha": "^8.0.0", @@ -167633,9 +167331,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "minimist-options": { "version": "4.1.0", @@ -167870,65 +167568,6 @@ "mkdirp": "^1.0.3" } }, - "mkpath": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/mkpath/-/mkpath-0.1.0.tgz", - "integrity": "sha1-dVSm+Nhxg0zJe1RisSLEwSTW3pE=", - "optional": true - }, - "mksnapshot": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/mksnapshot/-/mksnapshot-0.3.5.tgz", - "integrity": "sha512-PSBoZaj9h9myC3uRRW62RxmX8mrN3XbOkMEyURUD7v5CeJgtYTar50XU738t7Q0LtG1pBPtp5n5QwDGggRnEvw==", - "optional": true, - "requires": { - "decompress-zip": "0.3.x", - "fs-extra": "0.26.7", - "request": "2.x" - }, - "dependencies": { - "fs-extra": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", - "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", - "optional": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "optional": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "optional": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "optional": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, "mocha": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", @@ -176059,7 +175698,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "devOptional": true + "dev": true }, "qjobs": { "version": "1.2.0", @@ -179997,7 +179636,7 @@ "version": "0.8.4", "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", - "devOptional": true, + "dev": true, "requires": { "rimraf": "~2.6.2" }, @@ -180006,7 +179645,7 @@ "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "devOptional": true, + "dev": true, "requires": { "glob": "^7.1.3" } @@ -180478,26 +180117,6 @@ "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==" }, - "touch": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/touch/-/touch-0.0.3.tgz", - "integrity": "sha1-Ua7z1ElXHU8oel2Hyci0kYGg2x0=", - "optional": true, - "requires": { - "nopt": "~1.0.10" - }, - "dependencies": { - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "optional": true, - "requires": { - "abbrev": "1" - } - } - } - }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -180515,12 +180134,6 @@ "punycode": "^2.1.1" } }, - "traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", - "optional": true - }, "trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", diff --git a/packages/compass-e2e-tests/package.json b/packages/compass-e2e-tests/package.json index 26533958b3b..be1d393005e 100644 --- a/packages/compass-e2e-tests/package.json +++ b/packages/compass-e2e-tests/package.json @@ -30,7 +30,7 @@ "puppeteer": "*" }, "dependencies": { - "mongodb-compass": "^0.0.0-dev.0" + "mongodb-compass": "^0.0.1-dev.0" }, "devDependencies": { "@mongodb-js/eslint-config-compass": "^0.8.0", diff --git a/packages/compass/package.json b/packages/compass/package.json index c7dd7c486d1..aa3a2a8c07e 100644 --- a/packages/compass/package.json +++ b/packages/compass/package.json @@ -4,7 +4,7 @@ "productName": "MongoDB Compass", "description": "The MongoDB GUI", "homepage": "https://compass.mongodb.com", - "version": "0.0.0-dev.0", + "version": "0.0.1-dev.0", "apiVersion": "3.0.0", "main": "build/main.js", "author": { diff --git a/packages/hadron-build/commands/release.js b/packages/hadron-build/commands/release.js index 19594ac6252..e84733eaa5f 100644 --- a/packages/hadron-build/commands/release.js +++ b/packages/hadron-build/commands/release.js @@ -11,6 +11,7 @@ * and include in assets. * @see [Atom's dump-symbols-task.coffee](https://git.io/va3fG) */ + const Target = require('../lib/target'); const verifyDistro = require('../lib/distro'); const cli = require('mongodb-js-cli')('hadron-build:release'); diff --git a/packages/hadron-build/lib/signtool.js b/packages/hadron-build/lib/signtool.js new file mode 100644 index 00000000000..4746b00e864 --- /dev/null +++ b/packages/hadron-build/lib/signtool.js @@ -0,0 +1,22 @@ +const debug = require('debug')('hadron-build:signtool'); +const { execFileSync } = require('child_process'); +const path = require('path'); + +async function signtool(fileToSign) { + const signtoolPath = path.resolve(__dirname, '..', 'signtool/signtool.exe'); + + const execArgs = [signtoolPath, [path.resolve(fileToSign)], { stdio: 'inherit' }]; + debug(`Running signtool.exe to sign '${signtoolPath}'`, { + execArgs: execArgs, + env: { + NOTARY_SIGNING_COMMENT: process.env.NOTARY_SIGNING_COMMENT, + NOTARY_URL: process.env.NOTARY_URL, + NOTARY_SIGNING_KEY: process.env.NOTARY_SIGNING_KEY, + } + }); + + // eslint-disable-next-line no-sync + await execFileSync(...execArgs); +} + +module.exports = { signtool }; diff --git a/packages/hadron-build/lib/target.js b/packages/hadron-build/lib/target.js index f356a7ed735..8911ff4edec 100644 --- a/packages/hadron-build/lib/target.js +++ b/packages/hadron-build/lib/target.js @@ -10,21 +10,26 @@ const path = require('path'); const { promisify } = require('util'); const normalizePkg = require('normalize-package-data'); const parseGitHubRepoURL = require('parse-github-repo-url'); -const ffmpegAfterExtract = require('electron-packager-plugin-non-proprietary-codecs-ffmpeg') - .default; +const ffmpegAfterExtract = require('electron-packager-plugin-non-proprietary-codecs-ffmpeg').default; const windowsInstallerVersion = require('./windows-installer-version'); const debug = require('debug')('hadron-build:target'); const execFile = promisify(childProcess.execFile); +const mongodbNotaryServiceClient = require('@mongodb-js/mongodb-notary-service-client'); +const tarPack = require('tar-pack').pack; +const which = require('which'); +const { signtool } = require('./signtool'); -const notary = require('@mongodb-js/mongodb-notary-service-client'); - -function sign(src) { - notary(src) - .then((res) => res && debug(':dancers: successfully signed %s', src)) - .catch((nerr) => debug('Notary failed!', nerr)); +async function signLinuxPackage(src) { + debug('Signing ... %s', src); + await mongodbNotaryServiceClient(src); + debug('Successfully signed %s', src); } -const tarPack = require('tar-pack').pack; +async function signWindowsPackage(src) { + debug('Signing ... %s', src); + await signtool(src); + debug('Successfully signed %s', src); +} function tar(srcDirectory, dest) { return new Promise(function(resolve, reject) { @@ -39,8 +44,6 @@ function tar(srcDirectory, dest) { }); } -const which = require('which'); - function _canBuildInstaller(ext) { var bin = null; var help = null; @@ -365,6 +368,20 @@ class Target { version: this.version, exe: `${this.packagerOptions.name}.exe`, setupExe: this.windows_setup_filename, + + // This setting will prompt winstaller to try to sign files + // for the installer with signtool.exe + // + // The intended use is to pass custom flags for the signtool.exe bundled + // inside winstaller. + // + // We replace signtool.exe with an "emulated version" that is signing files + // via notary service in the postinstall script. + // + // Here we just set any parameter so that signtool.exe is invoked. + // + // @see https://jira/mongodb.org/browse/BUILD-920 + signWithParams: 'sign', title: this.productName, productName: this.productName, description: this.description, @@ -375,10 +392,6 @@ class Target { /** * @see https://jira/mongodb.org/browse/BUILD-920 */ - const signWithParams = process.env.NOTARY_AUTH_TOKEN - ? 'yes' - : process.env.SIGNTOOL_PARAMS; - this.installerOptions.signWithParams = signWithParams; /** * The ICO file to use as the icon for the generated Setup.exe. @@ -388,8 +401,11 @@ class Target { } this.createInstaller = async() => { - const electronWinstaller = require('electron-winstaller'); + // sign the main application .exe + await signWindowsPackage( + path.join(this.installerOptions.appDirectory, this.installerOptions.exe)); + const electronWinstaller = require('electron-winstaller'); await electronWinstaller.createWindowsInstaller(this.installerOptions); await fs.promises.rename( @@ -407,7 +423,6 @@ class Target { description: this.description, manufacturer: this.author, version: windowsInstallerVersion(this.installerVersion || this.version), - signWithParams: signWithParams, shortcutFolderName: this.shortcutFolderName || this.author, programFilesFolderName: this.programFilesFolderName || this.productName, appUserModelId: this.bundleId, @@ -425,6 +440,9 @@ class Target { await msiCreator.create(); await msiCreator.compile(); + + // sign the MSI + await signWindowsPackage(this.dest(this.packagerOptions.name + '.msi')); }; } @@ -702,7 +720,7 @@ class Target { const createRpm = require('electron-installer-redhat'); debug('creating rpm...', this.installerOptions.rpm); return createRpm(this.installerOptions.rpm).then(() => { - return sign(this.dest(this.linux_rpm_filename)); + return signLinuxPackage(this.dest(this.linux_rpm_filename)); }); }); }; diff --git a/packages/hadron-build/package.json b/packages/hadron-build/package.json index 03ced3983e6..2675b4a9c08 100644 --- a/packages/hadron-build/package.json +++ b/packages/hadron-build/package.json @@ -7,7 +7,8 @@ "test": "mocha -R spec", "lint": "eslint \"./{src,lib,test,bin}/**/*.{js,jsx,ts,tsx}\" \"./*.js\" --no-error-on-unmatched-pattern", "depcheck": "depcheck", - "test-ci": "npm run test" + "test-ci": "npm run test", + "postinstall": "node signtool/install.js" }, "bin": { "hadron-build": "cli.js" @@ -72,7 +73,7 @@ "electron-installer-debian": "^3.0.0", "electron-installer-dmg": "^3.0.0", "electron-installer-redhat": "^2.0.0", - "electron-winstaller": "2.5.1" + "electron-winstaller": "^5.0.0" }, "license": "SSPL", "bugs": { diff --git a/packages/hadron-build/signtool/build.sh b/packages/hadron-build/signtool/build.sh new file mode 100644 index 00000000000..888e8a075c5 --- /dev/null +++ b/packages/hadron-build/signtool/build.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +set -e + +GOOS=windows GOARCH=amd64 go build -o signtool.exe diff --git a/packages/hadron-build/signtool/go.mod b/packages/hadron-build/signtool/go.mod new file mode 100644 index 00000000000..bf7e2641850 --- /dev/null +++ b/packages/hadron-build/signtool/go.mod @@ -0,0 +1,5 @@ +module mongodb.com/signtool + +go 1.15 + +require golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 diff --git a/packages/hadron-build/signtool/go.sum b/packages/hadron-build/signtool/go.sum new file mode 100644 index 00000000000..4cbc8bb2614 --- /dev/null +++ b/packages/hadron-build/signtool/go.sum @@ -0,0 +1,9 @@ +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/packages/hadron-build/signtool/install.js b/packages/hadron-build/signtool/install.js new file mode 100644 index 00000000000..aed4d8e8a8a --- /dev/null +++ b/packages/hadron-build/signtool/install.js @@ -0,0 +1,22 @@ +/* eslint-disable no-console */ +/* eslint-disable no-sync */ + +// Replaces signtool.exe in electron-winstaller with the emulated version +// that uses the notary service. + +const fs = require('fs'); +const path = require('path'); + +if (process.platform !== 'win32') { + console.info('Skip installing signtool.exe, not running on windows'); + process.exit(0); +} + +const originalSigntool = require.resolve('electron-winstaller/vendor/signtool.exe'); + +if (!fs.existsSync(originalSigntool)) { + throw new Error('Original signtool.exe to be replaced not found'); +} + +fs.renameSync(originalSigntool, originalSigntool + '.bkp'); +fs.copyFileSync(path.resolve(__dirname, 'signtool.exe'), originalSigntool); diff --git a/packages/hadron-build/signtool/signtool.exe b/packages/hadron-build/signtool/signtool.exe new file mode 100755 index 00000000000..efb467efac9 Binary files /dev/null and b/packages/hadron-build/signtool/signtool.exe differ diff --git a/packages/hadron-build/signtool/signtool.go b/packages/hadron-build/signtool/signtool.go new file mode 100644 index 00000000000..223d16beeef --- /dev/null +++ b/packages/hadron-build/signtool/signtool.go @@ -0,0 +1,201 @@ +// signtool.exe emulator +// +// This tool emulates the signtool.exe tool from Microsoft for signing windows +// binaries: https://msdn.microsoft.com/en-us/library/windows/desktop/aa387764(v=vs.85).aspx +// +// It only uses the last argument on the command-line, which is the path to the file to sign. +// If signing is successful, it will replace the file with the newly-signed file from the +// notary service. +// +// Parameters for the notary service are passed in as environment variables. +// NOTARY_SIGNING_KEY - The name of the key to use for signing +// NOTARY_SIGNING_COMMENT - The comment to enter into the notary log for this signing operation +// NOTARY_AUTH_TOKEN - The password for using the selected signing key +// NOTARY_URL - The URL of the notary service +// + +package main + +import ( + "bytes" + "crypto/hmac" + "crypto/sha1" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "log" + "mime/multipart" + "net/http" + "os" + "path/filepath" + "strings" + "time" + + "golang.org/x/crypto/pbkdf2" +) + +func generateAuthToken(authTokenPassword string) string { + // In one of my more foolish moments, the salt is just the password in reverse. + // We should fix this, but for compatibility this is here for now. + var salt []byte = []byte(authTokenPassword) + for i := len(salt)/2 - 1; i >= 0; i-- { + opp := len(salt) - 1 - i + salt[i], salt[opp] = salt[opp], salt[i] + } + + authKey := pbkdf2.Key([]byte(authTokenPassword), salt, 1000, 16, sha1.New) + dateStr := time.Now().String() + signedData := hmac.New(sha1.New, authKey) + signedData.Write([]byte(dateStr)) + rawSignature := signedData.Sum(nil) + return fmt.Sprintf("%x%s", rawSignature, dateStr) +} + +func submitFileForSigning(fileToSignPath string) string { + localFile, err := os.Open(fileToSignPath) + if err != nil { + log.Fatal(err) + } + + body := &bytes.Buffer{} + writer := multipart.NewWriter(body) + fileToSignName := filepath.Base(fileToSignPath) + + // The notary service does not support filenames with spaces, so we + // strip those in the form data + formFileName := strings.ReplaceAll(fileToSignName, " ", "") + + part, err := writer.CreateFormFile("file", formFileName) + if err != nil { + log.Fatal(err) + } + + _, err = io.Copy(part, localFile) + localFile.Close() + signingKey := os.Getenv("NOTARY_SIGNING_KEY") + writer.WriteField("key", signingKey) + writer.WriteField("comment", os.Getenv("NOTARY_SIGNING_COMMENT")) + writer.WriteField("auth_token", generateAuthToken(os.Getenv("NOTARY_AUTH_TOKEN"))) + err = writer.Close() + if err != nil { + log.Fatal(err) + } + + signingURL := fmt.Sprintf("%s/api/sign", os.Getenv("NOTARY_URL")) + req, err := http.NewRequest("POST", signingURL, body) + if err != nil { + log.Fatal(err) + } + req.Header.Add("Content-Type", writer.FormDataContentType()) + + log.Printf("Sending sign request for '%s' to '%s' with key '%s'", fileToSignName, signingURL, signingKey) + + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + log.Fatal(err) + } + + respBody, err := ioutil.ReadAll(resp.Body) + resp.Body.Close() + if err != nil { + log.Fatal(err) + } + + if resp.StatusCode >= 400 { + log.Fatalf("Signing failed: %s - %s", resp.Status, string(respBody)) + } + + var signingResponse map[string]interface{} + err = json.Unmarshal(respBody, &signingResponse) + if err != nil { + log.Fatal(err) + } + + if _, ok := signingResponse["permalink"]; !ok { + log.Fatal("Signing service didn't return a permalink") + } + + log.Printf("Signed artifact ready at %s", signingResponse["permalink"].(string)) + + return signingResponse["permalink"].(string) +} + +func downloadArtifact(permaLink, localPath string) { + tempFile, err := ioutil.TempFile("", "signtool-download-") + if err != nil { + log.Fatal(err) + } + + defer tempFile.Close() + defer os.Remove(tempFile.Name()) + + if !strings.HasPrefix(permaLink, "/") { + permaLink = "/" + permaLink + } + + downloadURL := fmt.Sprintf("%s%s", os.Getenv("NOTARY_URL"), permaLink) + + log.Printf("Downloading signed file from '%s' to '%s'", downloadURL, tempFile.Name()) + + resp, err := http.Get(downloadURL) + if err != nil { + log.Fatal(err) + } + + if resp.StatusCode >= 400 { + log.Fatalf("Download failed: %s", resp.Status) + } + + defer resp.Body.Close() + _, err = io.Copy(tempFile, resp.Body) + if err != nil { + log.Fatal(err) + } + + localFile, err := os.Create(localPath) + if err != nil { + log.Fatal(err) + } + defer localFile.Close() + + log.Printf("Copying signed file back from '%s' to '%s'", tempFile.Name(), localFile.Name()) + + tempFile.Seek(0, 0) + io.Copy(localFile, tempFile) + + log.Printf("Done.") +} + +func main() { + if len(os.Args) == 1 { + log.Fatal("Must have at least one argument (the file to sign) on the command line") + } + + allowedExtensions := []string{ + "NOTARY_SIGNING_KEY", + "NOTARY_SIGNING_COMMENT", + "NOTARY_AUTH_TOKEN", + "NOTARY_URL", + } + for _, k := range allowedExtensions { + if os.Getenv(k) == "" { + log.Fatal(fmt.Sprintf("Must set %s environment variable", k)) + } + } + + // The last argument is always the path of the file to sign + fileToSignPath := os.Args[len(os.Args)-1] + + if !strings.HasSuffix(fileToSignPath, ".exe") && + !strings.HasSuffix(fileToSignPath, ".msi") && + !strings.HasSuffix(fileToSignPath, ".rpm") { + + fmt.Printf("Skipping %s signature, extension is not supported", fileToSignPath) + return + } + + permaLink := submitFileForSigning(fileToSignPath) + downloadArtifact(permaLink, fileToSignPath) +}