diff --git a/gui/.github/workflows/docs.yml b/gui/.github/workflows/docs.yml new file mode 100644 index 00000000000..96e747ee1d7 --- /dev/null +++ b/gui/.github/workflows/docs.yml @@ -0,0 +1,38 @@ +name: Publish Developer Docs + +on: + push: + branches: + - develop + paths: + - 'docs/**' + +jobs: + checkout: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + repository: 'enso-org/enso-org.github.io' + ref: 'sources' + token: ${{ secrets.ENSO_PAT }} + - name: set identity email + run: git config --global user.email "actions@github.com" + - name: set identity name + run: git config --global user.name "GitHub Actions" + - name: Checkout submodules + run: git submodule update --init + - name: Update submodules + id: status + run: | + git submodule update --init + git submodule update --remote --merge + if [ -n "$(git status --porcelain)" ]; then + echo "::set-output name=has_changes::1" + fi + - name: Push changes + run: | + git add . + git commit -m "Update submodules" + git push origin sources + if: steps.status.outputs.has_changes == '1' diff --git a/gui/.github/workflows/gui-ci.yml b/gui/.github/workflows/gui-ci.yml index b7b01906c66..0650feed870 100644 --- a/gui/.github/workflows/gui-ci.yml +++ b/gui/.github/workflows/gui-ci.yml @@ -8,7 +8,7 @@ name: GUI CI - push jobs: version_assertions: - name: Version Assertions + name: Assertions runs-on: ${{ matrix.os }} strategy: matrix: @@ -16,7 +16,7 @@ jobs: - macOS-latest fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v1 - name: Read changelog info id: changelog run: |2- @@ -42,6 +42,23 @@ jobs: run: >- if [[ ${{ steps.checkCurrentReleaseTag.outputs.exists }} == true ]]; then exit 1; fi + - name: Get list of changed files + id: changed_files + run: |2- + + list=`git diff --name-only origin/develop HEAD | tr '\n' ' '` + echo $list + echo "::set-output name=list::'$list'" + + shell: bash + - name: Assert if CHANGELOG.md was updated + run: >- + if [[ ${{ contains(steps.changed_files.outputs.list,'CHANGELOG.md') || + contains(github.event.head_commit.message,'[ci no changelog needed]') + }} == false ]]; then exit 1; fi + if: >- + github.ref != 'refs/heads/develop' && github.ref != + 'refs/heads/stable' && github.ref != 'refs/heads/unstable' lint: name: Linter runs-on: ${{ matrix.os }} @@ -51,7 +68,7 @@ jobs: - macOS-latest fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v1 - name: Install Node uses: actions/setup-node@v1 with: @@ -78,7 +95,7 @@ jobs: - macOS-latest fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v1 - name: Install Node uses: actions/setup-node@v1 with: @@ -99,7 +116,7 @@ jobs: - macOS-latest fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v1 - name: Install Node uses: actions/setup-node@v1 with: @@ -153,7 +170,7 @@ jobs: - macOS-latest fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v1 - name: Install Node uses: actions/setup-node@v1 with: @@ -214,7 +231,7 @@ jobs: - ubuntu-latest fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v1 - name: Read changelog info id: changelog run: |2- @@ -281,6 +298,36 @@ jobs: name: content path: dist/content if: matrix.os == 'macOS-latest' + - name: Upload Artifacts (macOS, dmg) + uses: actions/upload-artifact@v1 + with: + name: enso-mac-${{fromJson(steps.changelog.outputs.content).version}}.dmg + path: >- + dist/client/enso-mac-${{fromJson(steps.changelog.outputs.content).version}}.dmg + if: matrix.os == 'macos-latest' + - name: Upload Artifacts (macOS, dmg.sha256) + uses: actions/upload-artifact@v1 + with: + name: >- + enso-mac-${{fromJson(steps.changelog.outputs.content).version}}.dmg.sha256 + path: >- + dist/client/enso-mac-${{fromJson(steps.changelog.outputs.content).version}}.dmg.sha256 + if: matrix.os == 'macos-latest' + - name: Upload Artifacts (Windows, exe) + uses: actions/upload-artifact@v1 + with: + name: enso-win-${{fromJson(steps.changelog.outputs.content).version}}.exe + path: >- + dist/client/enso-win-${{fromJson(steps.changelog.outputs.content).version}}.exe + if: matrix.os == 'windows-latest' + - name: Upload Artifacts (Windows, exe.sha256) + uses: actions/upload-artifact@v1 + with: + name: >- + enso-win-${{fromJson(steps.changelog.outputs.content).version}}.exe.sha256 + path: >- + dist/client/enso-win-${{fromJson(steps.changelog.outputs.content).version}}.exe.sha256 + if: matrix.os == 'windows-latest' - name: Upload Artifacts (Linux, AppImage) uses: actions/upload-artifact@v1 with: @@ -289,20 +336,14 @@ jobs: path: >- dist/client/enso-linux-${{fromJson(steps.changelog.outputs.content).version}}.AppImage if: matrix.os == 'ubuntu-latest' - - name: Upload Artifacts (Windows, exe) + - name: Upload Artifacts (Linux, AppImage.sha256) uses: actions/upload-artifact@v1 with: - name: enso-win-${{fromJson(steps.changelog.outputs.content).version}}.exe + name: >- + enso-linux-${{fromJson(steps.changelog.outputs.content).version}}.AppImage.sha256 path: >- - dist/client/enso-win-${{fromJson(steps.changelog.outputs.content).version}}.exe - if: matrix.os == 'windows-latest' - - name: Upload Artifacts (macOS, dmg) - uses: actions/upload-artifact@v1 - with: - name: enso-mac-${{fromJson(steps.changelog.outputs.content).version}}.dmg - path: >- - dist/client/enso-mac-${{fromJson(steps.changelog.outputs.content).version}}.dmg - if: matrix.os == 'macos-latest' + dist/client/enso-linux-${{fromJson(steps.changelog.outputs.content).version}}.AppImage.sha256 + if: matrix.os == 'ubuntu-latest' if: >- contains(github.event.head_commit.message,'[ci build]') || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' || github.ref == @@ -316,7 +357,7 @@ jobs: - macOS-latest fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v1 - name: Download artifacts uses: actions/download-artifact@v2 with: @@ -366,7 +407,7 @@ jobs: - ubuntu-latest fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v1 - name: Download artifacts uses: actions/download-artifact@v2 with: diff --git a/gui/.gitignore b/gui/.gitignore index 67dddd1c305..2cd15595c19 100644 --- a/gui/.gitignore +++ b/gui/.gitignore @@ -1,3 +1,4 @@ +# Outputs dist # Rust @@ -17,3 +18,6 @@ wasm-pack.log # JavaScript node_modules .nvmrc + +# MacOS +.DS_Store diff --git a/gui/build/run.js b/gui/build/run.js index 98947021a3f..12b955e1c27 100755 --- a/gui/build/run.js +++ b/gui/build/run.js @@ -171,7 +171,7 @@ commands.build.rust = async function(argv) { console.log('Checking the resulting WASM size.') let stats = fss.statSync(paths.dist.wasm.mainOptGz) - let limit = 4.28 + let limit = 4.29 let size = Math.round(100 * stats.size / 1024 / 1024) / 100 if (size > limit) { throw(`Output file size exceeds the limit (${size}MB > ${limit}MB).`) diff --git a/gui/build/workflow.js b/gui/build/workflow.js index 0e5f7d2657e..756ca923b22 100644 --- a/gui/build/workflow.js +++ b/gui/build/workflow.js @@ -13,9 +13,11 @@ const yaml = require('js-yaml') // === Constants === // ================= -const NODE_VERSION = '14.15.0' -const RUST_VERSION = 'nightly-2019-11-04' -const WASM_PACK_VERSION = '0.9.1' +const NODE_VERSION = '14.15.0' +const RUST_VERSION = 'nightly-2019-11-04' +const WASM_PACK_VERSION = '0.9.1' +const FLAG_NO_CHANGELOG_NEEDED = '[ci no changelog needed]' +const FLAG_FORCE_CI_BUILD = '[ci build]' @@ -34,7 +36,10 @@ function job(platforms,name,steps,cfg) { }, "fail-fast": false }, - steps : list({uses:"actions/checkout@v2"}, ...steps), + // WARNING! + // Do not update to `checkout@v2` because it is broken: + // https://github.com/actions/checkout/issues/438 + steps : list({uses:"actions/checkout@v1"}, ...steps), ...cfg } } @@ -186,9 +191,16 @@ function uploadBinArtifactsFor(name,sys,ext,os) { } } -uploadBinArtifactsForMacOS = uploadBinArtifactsFor('Linux','ubuntu','AppImage','linux') -uploadBinArtifactsForWindows = uploadBinArtifactsFor('Windows','windows','exe','win') -uploadBinArtifactsForLinux = uploadBinArtifactsFor('macOS','macos','dmg','mac') +function uploadBinArtifactsWithChecksumsFor(name,sys,ext,os) { + return [ + uploadBinArtifactsFor(name,sys,ext,os), + uploadBinArtifactsFor(name,sys,ext+'.sha256',os) + ] +} + +uploadBinArtifactsForMacOS = uploadBinArtifactsWithChecksumsFor('macOS','macos','dmg','mac') +uploadBinArtifactsForLinux = uploadBinArtifactsWithChecksumsFor('Linux','ubuntu','AppImage','linux') +uploadBinArtifactsForWindows = uploadBinArtifactsWithChecksumsFor('Windows','windows','exe','win') let downloadArtifacts = { name: "Download artifacts", @@ -200,9 +212,27 @@ let downloadArtifacts = { -// ====================== -// === GitHub Release === -// ====================== +// =========== +// === Git === +// =========== + +/// Gets a space-separated list of changed files between this commit and the `develop` branch. +let getListOfChangedFiles = { + name: 'Get list of changed files', + id: 'changed_files', + run: ` + list=\`git diff --name-only origin/develop HEAD | tr '\\n' ' '\` + echo $list + echo "::set-output name=list::'$list'" + `, + shell: 'bash' +} + + + +// ================= +// === Changelog === +// ================= let getCurrentReleaseChangelogInfo = { name: 'Read changelog info', @@ -215,6 +245,21 @@ let getCurrentReleaseChangelogInfo = { shell: 'bash' } +let assertChangelogWasUpdated = [ + getListOfChangedFiles, + { + name: 'Assert if CHANGELOG.md was updated', + run: `if [[ \${{ contains(steps.changed_files.outputs.list,'CHANGELOG.md') || contains(github.event.head_commit.message,'${FLAG_NO_CHANGELOG_NEEDED}') }} == false ]]; then exit 1; fi`, + if: `github.ref != 'refs/heads/develop' && github.ref != 'refs/heads/stable' && github.ref != 'refs/heads/unstable'` + } +] + + + +// ====================== +// === GitHub Release === +// ====================== + let uploadGitHubRelease = { name: `Upload GitHub Release`, uses: "softprops/action-gh-release@v1", @@ -301,7 +346,8 @@ let assertReleaseDoNotExists = [ let assertions = list( assertVersionUnstable, assertVersionStable, - assertReleaseDoNotExists + assertReleaseDoNotExists, + assertChangelogWasUpdated ) @@ -311,13 +357,13 @@ let assertions = list( // ================ let releaseCondition = `github.ref == 'refs/heads/unstable' || github.ref == 'refs/heads/stable'` -let buildCondition = `contains(github.event.head_commit.message,'[ci build]') || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' || ${releaseCondition}` +let buildCondition = `contains(github.event.head_commit.message,'${FLAG_FORCE_CI_BUILD}') || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' || ${releaseCondition}` let workflow = { name : "GUI CI", on: ['push'], jobs: { - version_assertions: job_on_macos("Version Assertions", [ + version_assertions: job_on_macos("Assertions", [ getCurrentReleaseChangelogInfo, assertions ]), diff --git a/gui/docs/CONTRIBUTING.md b/gui/docs/CONTRIBUTING.md index ff55225bb04..345e3b166b6 100644 --- a/gui/docs/CONTRIBUTING.md +++ b/gui/docs/CONTRIBUTING.md @@ -261,6 +261,12 @@ By default, CI would not build artifacts from `wip` and `develop` branches in or resources. If you want the artifacts to be build for your commit, simply add `[ci build]` anywhere in your commit message. + +### Skipping CHANGELOG.md change assertions +By default, CI would fail if the `CHANGELOG.md` file does not need to be updated. However, sometimes +there are PRs that does not change anything significant in the final product. You can then simply +add `[ci no changelog needed]` anywhere in your commit message to skip this assertion. + ### Publishing Results All new changes should be proposed in the form of Pull Requests (PRs) to this repository. Each PR diff --git a/gui/src/js/lib/client/package.js b/gui/src/js/lib/client/package.js index a4bd4c29e95..ce9c66cfc29 100644 --- a/gui/src/js/lib/client/package.js +++ b/gui/src/js/lib/client/package.js @@ -30,7 +30,8 @@ let config = { "copy-webpack-plugin": "^5.1.1", "devtron": "^1.4.0", "electron": "11.1.1", - "electron-builder": "^22.9.1" + "electron-builder": "^22.9.1", + "crypto-js": "4.0.0" }, scripts: { @@ -46,15 +47,21 @@ config.build = { copyright: 'Copyright © 2021 ${author}.', artifactName: 'enso-${os}-${version}.${ext}', mac: { + // We do not use compression as the build time is huge and file size saving is almost zero. + target: ['dmg'], icon: `${paths.dist.root}/icons/icon.icns`, category: 'public.app-category.developer-tools', darkModeSupport: true, type: 'distribution', }, win: { + // We do not use compression as the build time is huge and file size saving is almost zero. + target: ['nsis'], icon: `${paths.dist.root}/icons/icon.ico`, }, linux: { + // We do not use compression as the build time is huge and file size saving is almost zero. + target: ['AppImage'], icon: `${paths.dist.root}/icons/png`, category: 'Development', }, @@ -95,6 +102,7 @@ config.build = { writeUpdateInfo: false }, publish: [], + afterAllArtifactBuild: 'tasks/computeHashes.js' } module.exports = {config} diff --git a/gui/src/js/lib/client/tasks/computeHashes.js b/gui/src/js/lib/client/tasks/computeHashes.js new file mode 100644 index 00000000000..f03ad662155 --- /dev/null +++ b/gui/src/js/lib/client/tasks/computeHashes.js @@ -0,0 +1,56 @@ +const crypto = require('crypto'); +const fs = require('fs'); +const glob = require('glob'); +const paths = require('../../../../../build/paths') + + + +// ================= +// === Constants === +// ================= + +const CHECKSUM_TYPE = 'sha256' + + + +// ================ +// === Checksum === +// ================ + +/// The `type` argument can be one of `md5`, `sha1`, or `sha256`. +function getChecksum(path,type) { + return new Promise(function (resolve, reject) { + const hash = crypto.createHash(type); + const input = fs.createReadStream(path); + input.on('error', reject); + input.on('data', function (chunk) { + hash.update(chunk); + }); + input.on('close', function () { + resolve(hash.digest('hex')); + }); + }); +} + +async function writeFileChecksum(path,type) { + let checksum = await getChecksum(path,type) + let targetPath = `${path}.${type}` + fs.writeFile(targetPath,checksum,'utf8',(err) => { + if (err) { throw err } + }) +} + + + +// ================ +// === Callback === +// ================ + +exports.default = async function () { + let files = glob.sync(paths.dist.client + '/*.{dmg,exe,AppImage}') + for (let file of files) { + console.log(`Generating ${CHECKSUM_TYPE} checksum for ${file}.`) + await writeFileChecksum(file,CHECKSUM_TYPE) + } + return [] +} diff --git a/gui/src/js/package-lock.json b/gui/src/js/package-lock.json index 486e2d24239..abe21139670 100644 --- a/gui/src/js/package-lock.json +++ b/gui/src/js/package-lock.json @@ -10,12 +10,12 @@ "integrity": "sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA==" }, "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", "dev": true, "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.12.13" } }, "@babel/helper-validator-identifier": { @@ -25,12 +25,12 @@ "dev": true }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.12.11", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } @@ -399,16 +399,6 @@ "y18n": "^4.0.0", "yargs-parser": "^15.0.1" } - }, - "yargs-parser": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", - "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } }, @@ -1223,9 +1213,9 @@ } }, "@octokit/openapi-types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-3.3.0.tgz", - "integrity": "sha512-s3dd32gagPmKaSLNJ9aPNok7U+tl69YLESf6DgQz5Ml/iipPZtif3GLvWpNXoA6qspFm1LFUZX+C3SqWX/Y/TQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-4.0.1.tgz", + "integrity": "sha512-k2hRcfcLRyPJjtYfJLzg404n7HZ6sUpAWAR/uNI8tf96NgatWOpw1ocdF+WFfx/trO1ivBh7ckynO1rn+xAw/Q==", "dev": true }, "@octokit/plugin-enterprise-rest": { @@ -1282,14 +1272,14 @@ } }, "@octokit/request": { - "version": "5.4.13", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.13.tgz", - "integrity": "sha512-WcNRH5XPPtg7i1g9Da5U9dvZ6YbTffw9BN2rVezYiE7couoSyaRsw0e+Tl8uk1fArHE7Dn14U7YqUDy59WaqEw==", + "version": "5.4.14", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.14.tgz", + "integrity": "sha512-VkmtacOIQp9daSnBmDI92xNIeLuSRDOIuplp/CJomkvzt7M18NXgG044Cx/LFKLgjKt9T2tZR6AtJayba9GTSA==", "dev": true, "requires": { "@octokit/endpoint": "^6.0.1", "@octokit/request-error": "^2.0.0", - "@octokit/types": "^6.0.3", + "@octokit/types": "^6.7.1", "deprecation": "^2.0.0", "is-plain-object": "^5.0.0", "node-fetch": "^2.6.1", @@ -1369,12 +1359,12 @@ } }, "@octokit/types": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.6.0.tgz", - "integrity": "sha512-nmFoU3HCbw1AmnZU/eto2VvzV06+N7oAqXwMmAHGlNDF+KFykksh/VlAl85xc1P5T7Mw8fKYvXNaImNHCCH/rg==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.8.2.tgz", + "integrity": "sha512-RpG0NJd7OKSkWptiFhy1xCLkThs5YoDIKM21lEtDmUvSpbaIEfrxzckWLUGDFfF8RydSyngo44gDv8m2hHruUg==", "dev": true, "requires": { - "@octokit/openapi-types": "^3.3.0", + "@octokit/openapi-types": "^4.0.0", "@types/node": ">= 8" } }, @@ -2215,9 +2205,9 @@ } }, "before-after-hook": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz", - "integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.1.tgz", + "integrity": "sha512-5ekuQOvO04MDj7kYZJaMab2S8SPjGJbotVNyv7QYFCOAwrGZs/YnoDNlh1U+m5hl7H2D/+n0taaAV/tfyd3KMA==", "dev": true }, "big-integer": { @@ -4071,6 +4061,11 @@ "randomfill": "^1.0.3" } }, + "crypto-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz", + "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==" + }, "crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -4729,6 +4724,11 @@ "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" } } }, @@ -4906,9 +4906,9 @@ "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==" }, "envinfo": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz", - "integrity": "sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.4.tgz", + "integrity": "sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ==", "dev": true }, "err-code": { @@ -8026,6 +8026,12 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true } } }, @@ -8928,9 +8934,9 @@ } }, "get-intrinsic": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.0.tgz", - "integrity": "sha512-M11rgtQp5GZMZzDL7jLTNxbDfurpzuau5uqRWDPvlHjfvg3TdScAZo96GLvhMjImrmR8uAt0FS2RLoMrfWGKlg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -9826,9 +9832,9 @@ }, "dependencies": { "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "requires": { "minimist": "^1.2.5" } @@ -11820,9 +11826,9 @@ "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==" }, "uglify-js": { - "version": "3.12.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.5.tgz", - "integrity": "sha512-SgpgScL4T7Hj/w/GexjnBHi3Ien9WS1Rpfg5y91WXMj9SY997ZCQU76mH4TpLwwfmMvoOU8wiaRkIf6NaH3mtg==", + "version": "3.12.6", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.6.tgz", + "integrity": "sha512-aqWHe3DfQmZUDGWBbabZ2eQnJlQd1fKlMUu7gV+MiTuDzdgDw31bI3wA2jLLsV/hNcDP26IfyEgSVoft5+0SVw==", "dev": true, "optional": true }, @@ -13292,9 +13298,14 @@ } }, "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", + "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } }, "yauzl": { "version": "2.10.0",