From 7498260038828dece7cbf946de1a9a86582fc0a1 Mon Sep 17 00:00:00 2001 From: Vott Date: Mon, 18 May 2020 11:08:29 -0700 Subject: [PATCH] chore: update & document release process --- RELEASE_GUIDE.md | 60 + azure-pipelines/create-release.yml | 33 + .../linux/artifact-build-linux.yml | 26 - azure-pipelines/mac/artifact-build-mac.yml | 22 - .../plato/generate-up-to-date-report.yml | 69 - azure-pipelines/releases/README.md | 5 - .../releases/VoTT - Deploy to Web.json | 535 ----- .../releases/VoTT - Upload Plato Report.json | 329 --- azure-pipelines/templates/build-artifact.yml | 2 + .../templates/create-github-release.yml | 94 +- .../templates/create-web-release.yml | 59 + .../templates/git-pull-current-branch.yml | 8 + .../templates/npm-version-bump.yml | 60 + azure-pipelines/upload-plato-report.yml | 74 + azure-pipelines/web/generate-web-artifact.yml | 35 - .../windows/artifact-build-windows.yml | 24 - docs/images/release-process.png | Bin 0 -> 89005 bytes package-lock.json | 1908 ++++++++++++----- package.json | 2 +- preview-release-pipeline.yml | 88 - release-pipeline.yml | 34 - scripts/generate-report.sh | 7 + scripts/git-pull-current-branch.sh | 10 + scripts/version-bump-commit.sh | 24 +- 24 files changed, 1773 insertions(+), 1735 deletions(-) create mode 100644 RELEASE_GUIDE.md create mode 100644 azure-pipelines/create-release.yml delete mode 100644 azure-pipelines/linux/artifact-build-linux.yml delete mode 100644 azure-pipelines/mac/artifact-build-mac.yml delete mode 100644 azure-pipelines/plato/generate-up-to-date-report.yml delete mode 100644 azure-pipelines/releases/README.md delete mode 100644 azure-pipelines/releases/VoTT - Deploy to Web.json delete mode 100644 azure-pipelines/releases/VoTT - Upload Plato Report.json create mode 100644 azure-pipelines/templates/create-web-release.yml create mode 100644 azure-pipelines/templates/git-pull-current-branch.yml create mode 100644 azure-pipelines/templates/npm-version-bump.yml create mode 100644 azure-pipelines/upload-plato-report.yml delete mode 100644 azure-pipelines/web/generate-web-artifact.yml delete mode 100644 azure-pipelines/windows/artifact-build-windows.yml create mode 100644 docs/images/release-process.png delete mode 100644 preview-release-pipeline.yml delete mode 100644 release-pipeline.yml create mode 100755 scripts/git-pull-current-branch.sh mode change 100644 => 100755 scripts/version-bump-commit.sh diff --git a/RELEASE_GUIDE.md b/RELEASE_GUIDE.md new file mode 100644 index 0000000000..7dd11d8a97 --- /dev/null +++ b/RELEASE_GUIDE.md @@ -0,0 +1,60 @@ +# Overview + +[![Build Status](https://dev.azure.com/msft-vott/VoTT/_apis/build/status/VoTT/Create%20Release?branchName=master)](https://dev.azure.com/msft-vott/VoTT/_build/latest?definitionId=55&branchName=master) + +Instruction on how to create new GitHub & Web Releases. + +## Release Process + +![alt text](./docs/images/release-process.png "Create Release Process") + +## Versioning + +Follow [NPM Semantic Versioning](https://docs.npmjs.com/about-semantic-versioning#incrementing-semantic-versions-in-published-packages) + +| Code status | Stage | Rule | Example version | +| ----------------------------------------- | ------------- | ------------------------------------------------------------------ | --------------- | +| First release | New product | Start with 1.0.0 | 1.0.0 | +| Backward compatible bug fixes | Patch release | Increment the third digit | 1.0.1 | +| Backward compatible new features | Minor release | Increment the middle digit and reset last digit to zero | 1.1.0 | +| Changes that break backward compatibility | Major release | Increment the first digit and reset middle and last digits to zero | 2.0.0 | + +### Commands + +The pipeline use [npm-version](https://docs.npmjs.com/cli/version) to update version + +### Pre + +All version with `pre`, ie. `preminor` will bump the appropriate didgit & append `-0` to the new version + +Examples: + +`npm version prepatch` + +1. v2.3.0 --> v2.3.1-0 +1. v2.3.1-0 --> v2.3.2-0 + +`npm version preminor` + +1. v2.3.0 --> v2.4.0-0 +1. v2.4.0-0 --> v2.5.0-0 + +#### Exception + +`prerelease` behave similar to prepatch, but would increment the last digit. + +Examples: + +`npm version prerelease` + +v2.3.0 --> v2.3.1-0 + +v2.3.0-0 --> v2.3.0-1 + +### Major + +v2.x.x --> v3.0.0 + +### Minor + +v2.2.0 --> v2.3.0 diff --git a/azure-pipelines/create-release.yml b/azure-pipelines/create-release.yml new file mode 100644 index 0000000000..3f7d0472a4 --- /dev/null +++ b/azure-pipelines/create-release.yml @@ -0,0 +1,33 @@ +name: "GitHub & Web Release [$(SourceBranchName)] - $(Date:yyyyMMdd)$(Rev:.r)" + +trigger: none # manual queue only when we're ready to release +pr: none # disable CI build for PR + +variables: + azureSubscription: "pj-little-sub" + DEV_STORAGE_ACCOUNT: 'vottdev' + PROD_STORAGE_ACCOUNT: 'vott' + DEV_URL: "https://vottdev.z5.web.core.windows.net/" + PROD_URL: "https://vott.z22.web.core.windows.net/" + +stages: +- stage: version_bump_commit + jobs: + - template: templates/npm-version-bump.yml + parameters: + versionType: $(NPM_VERSION_TYPE) + +- stage: github_release + dependsOn: version_bump_commit + jobs: + - template: templates/create-github-release.yml + parameters: + GitHubConnection: 'GitHub connection' # defaults for any parameters that aren't specified + repositoryName: '$(Build.Repository.Name)' # microsoft/VoTT + isPreRelease: $(IS_PRERELEASE) # set when queuing build + isDraft: $(IS_DRAFT) + +- stage: web_release + dependsOn: version_bump_commit + jobs: + - template: templates/create-web-release.yml diff --git a/azure-pipelines/linux/artifact-build-linux.yml b/azure-pipelines/linux/artifact-build-linux.yml deleted file mode 100644 index 26cdf1e852..0000000000 --- a/azure-pipelines/linux/artifact-build-linux.yml +++ /dev/null @@ -1,26 +0,0 @@ -# Node.js with React -# Build a Node.js project that uses React. -# Add steps that analyze code, save build artifacts, deploy, and more: -# https://docs.microsoft.com/azure/devops/pipelines/languages/javascript -steps: - - task: NodeTool@0 - displayName: 'Use Node 10.x' - inputs: - versionSpec: 10.x - - - bash: | - set -ex - - # clean install - npm ci - npm run release-ci - - mkdir -p linux - cp releases/vott*.snap linux/ - displayName: Build - - - task: PublishBuildArtifacts@1 - displayName: 'Publish Artifact: linux' - inputs: - PathtoPublish: linux - ArtifactName: linux diff --git a/azure-pipelines/mac/artifact-build-mac.yml b/azure-pipelines/mac/artifact-build-mac.yml deleted file mode 100644 index 24c74a921e..0000000000 --- a/azure-pipelines/mac/artifact-build-mac.yml +++ /dev/null @@ -1,22 +0,0 @@ -steps: - - task: NodeTool@0 - displayName: 'Use Node 10.x' - inputs: - versionSpec: 10.x - - - bash: | - set -ex - - # clean install - npm ci - npm run release-ci - - mkdir -p mac - cp releases/vott*.dmg mac/ - displayName: Build - - - task: PublishBuildArtifacts@1 - displayName: 'Publish Artifact: mac' - inputs: - PathtoPublish: mac - ArtifactName: mac diff --git a/azure-pipelines/plato/generate-up-to-date-report.yml b/azure-pipelines/plato/generate-up-to-date-report.yml deleted file mode 100644 index 1c8f461021..0000000000 --- a/azure-pipelines/plato/generate-up-to-date-report.yml +++ /dev/null @@ -1,69 +0,0 @@ -name: $(Date:yyyyMMdd).$(Hours)$(Minutes)$(Seconds) -variables: - AZURE_STORAGE_ACCOUNT: vottv2 -trigger: - - dev* - - master -pr: none # disable CI build for PR - -pool: - vmImage: 'Ubuntu-16.04' - -steps: -- bash: | - set -e - - COMMIT_SHA=`echo ${BUILD_SOURCEVERSION} | cut -c1-8` - echo "sha: " $COMMIT_SHA - - # rewrite build number - echo "##vso[build.updatebuildnumber]Report-${COMMIT_SHA}-${BUILD_BUILDNUMBER}" - displayName: "Rewrite build number" - -- bash: | - set -e - - ACCOUNT=$(AZURE_STORAGE_ACCOUNT) - if [[ -z "${ACCOUNT}" ]]; then - echo "Need to set AZURE_STORAGE_ACCOUNT" - exit 1 - fi - - KEY=$(AZURE_STORAGE_KEY) - if [[ -z "${KEY}" ]]; then - echo "Need to set AZURE_STORAGE_KEY" - exit 1 - fi - displayName: "Verify storage account cred exists" - -- task: NodeTool@0 - displayName: "Use Node 10.x" - inputs: - versionSpec: 10.x - -- task: Npm@1 - displayName: 'Run `npm ci`' - inputs: - command: custom - verbose: false - customCommand: ci - -- task: AzureCLI@1 - displayName: "Pull down old report and add updates" - inputs: - azureSubscription: 'pj-little-sub' - scriptLocation: inlineScript - inlineScript: './scripts/update-report.sh' - -- bash: | - set -e - - cat /tmp/download.log - displayName: "print download log" - condition: succeededOrFailed() - -- task: PublishBuildArtifacts@1 - displayName: 'Publish Artifact: report' - inputs: - PathtoPublish: ./report - ArtifactName: report diff --git a/azure-pipelines/releases/README.md b/azure-pipelines/releases/README.md deleted file mode 100644 index 76f1977686..0000000000 --- a/azure-pipelines/releases/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Overview - -Collection of release definitions used in this project. -Since release does not yet support yaml, we're exporting them for -record keeping. diff --git a/azure-pipelines/releases/VoTT - Deploy to Web.json b/azure-pipelines/releases/VoTT - Deploy to Web.json deleted file mode 100644 index b73294d39f..0000000000 --- a/azure-pipelines/releases/VoTT - Deploy to Web.json +++ /dev/null @@ -1,535 +0,0 @@ -{ - "source": 2, - "revision": 6, - "description": null, - "createdBy": { - "displayName": "My Ho 🥓🥐🍚", - "url": "https://app.vssps.visualstudio.com/Af945f528-1155-48f8-b08b-b6529166b9f0/_apis/Identities/1077cc21-332d-415a-8e93-e6277da44f6d", - "_links": { - "avatar": { - "href": "https://dev.azure.com/msft-vott/_apis/GraphProfile/MemberAvatars/aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1" - } - }, - "id": "1077cc21-332d-415a-8e93-e6277da44f6d", - "uniqueName": "myho@microsoft.com", - "imageUrl": "https://dev.azure.com/msft-vott/_apis/GraphProfile/MemberAvatars/aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1", - "descriptor": "aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1" - }, - "createdOn": "2019-03-22T18:43:08.407Z", - "modifiedBy": { - "displayName": "My Ho 🥓🥐🍚", - "url": "https://app.vssps.visualstudio.com/Af945f528-1155-48f8-b08b-b6529166b9f0/_apis/Identities/1077cc21-332d-415a-8e93-e6277da44f6d", - "_links": { - "avatar": { - "href": "https://dev.azure.com/msft-vott/_apis/GraphProfile/MemberAvatars/aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1" - } - }, - "id": "1077cc21-332d-415a-8e93-e6277da44f6d", - "uniqueName": "myho@microsoft.com", - "imageUrl": "https://dev.azure.com/msft-vott/_apis/GraphProfile/MemberAvatars/aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1", - "descriptor": "aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1" - }, - "modifiedOn": "2019-04-12T21:39:14.277Z", - "isDeleted": false, - "variables": {}, - "variableGroups": [], - "environments": [ - { - "id": 4, - "name": "Dev", - "rank": 1, - "owner": { - "displayName": "My Ho 🥓🥐🍚", - "url": "https://app.vssps.visualstudio.com/Af945f528-1155-48f8-b08b-b6529166b9f0/_apis/Identities/1077cc21-332d-415a-8e93-e6277da44f6d", - "_links": { - "avatar": { - "href": "https://dev.azure.com/msft-vott/_apis/GraphProfile/MemberAvatars/aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1" - } - }, - "id": "1077cc21-332d-415a-8e93-e6277da44f6d", - "uniqueName": "myho@microsoft.com", - "imageUrl": "https://dev.azure.com/msft-vott/_apis/GraphProfile/MemberAvatars/aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1", - "descriptor": "aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1" - }, - "variables": { - "DEV_STORAGE_ACCOUNT": { - "value": "vottdev", - "allowOverride": true - } - }, - "variableGroups": [], - "preDeployApprovals": { - "approvals": [ - { - "rank": 1, - "isAutomated": true, - "isNotificationOn": false, - "id": 10 - } - ], - "approvalOptions": { - "requiredApproverCount": null, - "releaseCreatorCanBeApprover": false, - "autoTriggeredAndPreviousEnvironmentApprovedCanBeSkipped": false, - "enforceIdentityRevalidation": false, - "timeoutInMinutes": 0, - "executionOrder": 1 - } - }, - "deployStep": { - "id": 11 - }, - "postDeployApprovals": { - "approvals": [ - { - "rank": 1, - "isAutomated": true, - "isNotificationOn": false, - "id": 12 - } - ], - "approvalOptions": { - "requiredApproverCount": null, - "releaseCreatorCanBeApprover": false, - "autoTriggeredAndPreviousEnvironmentApprovedCanBeSkipped": false, - "enforceIdentityRevalidation": false, - "timeoutInMinutes": 0, - "executionOrder": 2 - } - }, - "deployPhases": [ - { - "deploymentInput": { - "parallelExecution": { - "parallelExecutionType": 0 - }, - "skipArtifactsDownload": false, - "artifactsDownloadInput": { - "downloadInputs": [ - { - "alias": "_Build Web Artifact", - "artifactType": "Build", - "artifactDownloadMode": "All", - "artifactItems": [] - } - ] - }, - "queueId": 3, - "demands": [], - "enableAccessToken": false, - "timeoutInMinutes": 0, - "jobCancelTimeoutInMinutes": 1, - "condition": "succeeded()", - "overrideInputs": {} - }, - "rank": 1, - "phaseType": 1, - "name": "Deploy to dev*", - "refName": null, - "workflowTasks": [ - { - "environment": {}, - "taskId": "eb72cb01-a7e5-427b-a8a1-1b31ccac8a43", - "version": "2.*", - "name": "AzureBlob File Copy to $(DEV_STORAGE_ACCOUNT)", - "refName": "", - "enabled": true, - "alwaysRun": false, - "continueOnError": false, - "timeoutInMinutes": 0, - "definitionType": "task", - "overrideInputs": {}, - "condition": "succeeded()", - "inputs": { - "SourcePath": "$(System.DefaultWorkingDirectory)/_Build Web Artifact/build", - "ConnectedServiceNameSelector": "ConnectedServiceNameARM", - "ConnectedServiceName": "", - "ConnectedServiceNameARM": "28e5058e-d34a-48f3-978b-4bb47ea9e227", - "Destination": "AzureBlob", - "StorageAccount": "", - "StorageAccountRM": "$(DEV_STORAGE_ACCOUNT)", - "ContainerName": "$web", - "BlobPrefix": "", - "EnvironmentName": "", - "EnvironmentNameRM": "", - "ResourceFilteringMethod": "machineNames", - "MachineNames": "", - "vmsAdminUserName": "", - "vmsAdminPassword": "", - "TargetPath": "", - "AdditionalArgumentsForBlobCopy": "", - "AdditionalArgumentsForVMCopy": "", - "enableCopyPrerequisites": "false", - "CopyFilesInParallel": "true", - "CleanTargetBeforeCopy": "false", - "skipCACheck": "true", - "outputStorageUri": "", - "outputStorageContainerSasToken": "" - } - } - ] - } - ], - "environmentOptions": { - "emailNotificationType": "OnlyOnFailure", - "emailRecipients": "release.environment.owner;release.creator", - "skipArtifactsDownload": false, - "timeoutInMinutes": 0, - "enableAccessToken": false, - "publishDeploymentStatus": true, - "badgeEnabled": false, - "autoLinkWorkItems": false, - "pullRequestDeploymentEnabled": false - }, - "demands": [], - "conditions": [ - { - "name": "ReleaseStarted", - "conditionType": 1, - "value": "" - } - ], - "executionPolicy": { - "concurrencyCount": 1, - "queueDepthCount": 0 - }, - "schedules": [], - "currentRelease": { - "id": 215, - "url": "https://vsrm.dev.azure.com/msft-vott/4e739af6-f85e-44b9-a3f3-75eb893a6223/_apis/Release/releases/215", - "_links": {} - }, - "retentionPolicy": { - "daysToKeep": 30, - "releasesToKeep": 3, - "retainBuild": true - }, - "processParameters": { - "dataSourceBindings": [ - { - "dataSourceName": "AzureRMWebAppNamesByAppType", - "parameters": { - "WebAppKind": "$(WebAppKind)" - }, - "endpointId": "$(ConnectedServiceName)", - "target": "WebAppName" - } - ] - }, - "properties": {}, - "preDeploymentGates": { - "id": 0, - "gatesOptions": null, - "gates": [] - }, - "postDeploymentGates": { - "id": 0, - "gatesOptions": null, - "gates": [] - }, - "environmentTriggers": [], - "badgeUrl": "https://vsrm.dev.azure.com/msft-vott/_apis/public/Release/badge/4e739af6-f85e-44b9-a3f3-75eb893a6223/4/4" - }, - { - "id": 7, - "name": "v2/master", - "rank": 2, - "owner": { - "displayName": "My Ho 🥓🥐🍚", - "url": "https://app.vssps.visualstudio.com/Af945f528-1155-48f8-b08b-b6529166b9f0/_apis/Identities/1077cc21-332d-415a-8e93-e6277da44f6d", - "_links": { - "avatar": { - "href": "https://dev.azure.com/msft-vott/_apis/GraphProfile/MemberAvatars/aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1" - } - }, - "id": "1077cc21-332d-415a-8e93-e6277da44f6d", - "uniqueName": "myho@microsoft.com", - "imageUrl": "https://dev.azure.com/msft-vott/_apis/GraphProfile/MemberAvatars/aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1", - "descriptor": "aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1" - }, - "variables": { - "PROD_STORAGE_ACCOUNT": { - "value": "vott" - } - }, - "variableGroups": [], - "preDeployApprovals": { - "approvals": [ - { - "rank": 1, - "isAutomated": true, - "isNotificationOn": false, - "id": 19 - } - ], - "approvalOptions": { - "requiredApproverCount": null, - "releaseCreatorCanBeApprover": false, - "autoTriggeredAndPreviousEnvironmentApprovedCanBeSkipped": false, - "enforceIdentityRevalidation": false, - "timeoutInMinutes": 0, - "executionOrder": 1 - } - }, - "deployStep": { - "id": 20 - }, - "postDeployApprovals": { - "approvals": [ - { - "rank": 1, - "isAutomated": true, - "isNotificationOn": false, - "id": 21 - } - ], - "approvalOptions": { - "requiredApproverCount": null, - "releaseCreatorCanBeApprover": false, - "autoTriggeredAndPreviousEnvironmentApprovedCanBeSkipped": false, - "enforceIdentityRevalidation": false, - "timeoutInMinutes": 0, - "executionOrder": 2 - } - }, - "deployPhases": [ - { - "deploymentInput": { - "parallelExecution": { - "parallelExecutionType": 0 - }, - "skipArtifactsDownload": false, - "artifactsDownloadInput": { - "downloadInputs": [ - { - "alias": "_Build Web Artifact", - "artifactType": "Build", - "artifactDownloadMode": "All", - "artifactItems": [] - } - ] - }, - "queueId": 3, - "demands": [], - "enableAccessToken": false, - "timeoutInMinutes": 0, - "jobCancelTimeoutInMinutes": 1, - "condition": "and(succeeded(), or(eq(variables['Build.SourceBranch'], 'refs/heads/v2'), eq(variables['Build.SourceBranch'], 'refs/heads/master')))", - "overrideInputs": {} - }, - "rank": 1, - "phaseType": 1, - "name": "Deploy to V2/Master", - "refName": null, - "workflowTasks": [ - { - "environment": {}, - "taskId": "eb72cb01-a7e5-427b-a8a1-1b31ccac8a43", - "version": "2.*", - "name": "AzureBlob File Copy to $(PROD_STORAGE_ACCOUNT)", - "refName": "", - "enabled": true, - "alwaysRun": false, - "continueOnError": false, - "timeoutInMinutes": 0, - "definitionType": "task", - "overrideInputs": {}, - "condition": "succeeded()", - "inputs": { - "SourcePath": "$(System.DefaultWorkingDirectory)/_Build Web Artifact/build", - "ConnectedServiceNameSelector": "ConnectedServiceNameARM", - "ConnectedServiceName": "", - "ConnectedServiceNameARM": "28e5058e-d34a-48f3-978b-4bb47ea9e227", - "Destination": "AzureBlob", - "StorageAccount": "", - "StorageAccountRM": "$(PROD_STORAGE_ACCOUNT)", - "ContainerName": "$web", - "BlobPrefix": "", - "EnvironmentName": "", - "EnvironmentNameRM": "", - "ResourceFilteringMethod": "machineNames", - "MachineNames": "", - "vmsAdminUserName": "", - "vmsAdminPassword": "", - "TargetPath": "", - "AdditionalArgumentsForBlobCopy": "", - "AdditionalArgumentsForVMCopy": "", - "enableCopyPrerequisites": "false", - "CopyFilesInParallel": "true", - "CleanTargetBeforeCopy": "false", - "skipCACheck": "true", - "outputStorageUri": "", - "outputStorageContainerSasToken": "" - } - } - ] - } - ], - "environmentOptions": { - "emailNotificationType": "OnlyOnFailure", - "emailRecipients": "release.environment.owner;release.creator", - "skipArtifactsDownload": false, - "timeoutInMinutes": 0, - "enableAccessToken": false, - "publishDeploymentStatus": true, - "badgeEnabled": false, - "autoLinkWorkItems": false, - "pullRequestDeploymentEnabled": false - }, - "demands": [], - "conditions": [ - { - "name": "Dev", - "conditionType": 2, - "value": "4" - }, - { - "name": "_Build Web Artifact", - "conditionType": 4, - "value": "{\"sourceBranch\":\"master\",\"tags\":[],\"useBuildDefinitionBranch\":false,\"createReleaseOnBuildTagging\":false,\"tagFilter\":null}" - } - ], - "executionPolicy": { - "concurrencyCount": 1, - "queueDepthCount": 0 - }, - "schedules": [], - "currentRelease": { - "id": 0, - "url": "https://vsrm.dev.azure.com/msft-vott/4e739af6-f85e-44b9-a3f3-75eb893a6223/_apis/Release/releases/0", - "_links": {} - }, - "retentionPolicy": { - "daysToKeep": 30, - "releasesToKeep": 3, - "retainBuild": true - }, - "processParameters": { - "dataSourceBindings": [ - { - "dataSourceName": "AzureRMWebAppNamesByAppType", - "parameters": { - "WebAppKind": "$(WebAppKind)" - }, - "endpointId": "$(ConnectedServiceName)", - "target": "WebAppName" - } - ] - }, - "properties": {}, - "preDeploymentGates": { - "id": 0, - "gatesOptions": null, - "gates": [] - }, - "postDeploymentGates": { - "id": 0, - "gatesOptions": null, - "gates": [] - }, - "environmentTriggers": [], - "badgeUrl": "https://vsrm.dev.azure.com/msft-vott/_apis/public/Release/badge/4e739af6-f85e-44b9-a3f3-75eb893a6223/4/7" - } - ], - "artifacts": [ - { - "sourceId": "4e739af6-f85e-44b9-a3f3-75eb893a6223:36", - "type": "Build", - "alias": "_Build Web Artifact", - "definitionReference": { - "artifactSourceDefinitionUrl": { - "id": "https://dev.azure.com/msft-vott/_permalink/_build/index?collectionId=2f887b33-5e65-447a-a189-049f04641d6d&projectId=4e739af6-f85e-44b9-a3f3-75eb893a6223&definitionId=36", - "name": "" - }, - "defaultVersionBranch": { - "id": "", - "name": "" - }, - "defaultVersionSpecific": { - "id": "", - "name": "" - }, - "defaultVersionTags": { - "id": "", - "name": "" - }, - "defaultVersionType": { - "id": "latestType", - "name": "Latest" - }, - "definition": { - "id": "36", - "name": "Build Web Artifact" - }, - "definitions": { - "id": "", - "name": "" - }, - "IsMultiDefinitionType": { - "id": "False", - "name": "False" - }, - "project": { - "id": "4e739af6-f85e-44b9-a3f3-75eb893a6223", - "name": "VoTT" - }, - "repository": { - "id": "", - "name": "" - } - }, - "isPrimary": true, - "isRetained": false - } - ], - "triggers": [ - { - "artifactAlias": "_Build Web Artifact", - "triggerConditions": [ - { - "sourceBranch": "dev*", - "tags": [], - "useBuildDefinitionBranch": false, - "createReleaseOnBuildTagging": false - }, - { - "sourceBranch": "v2", - "tags": [], - "useBuildDefinitionBranch": false, - "createReleaseOnBuildTagging": false - }, - { - "sourceBranch": "master", - "tags": [], - "useBuildDefinitionBranch": false, - "createReleaseOnBuildTagging": false - } - ], - "triggerType": 1 - } - ], - "releaseNameFormat": "Release-$(rev:r)", - "tags": [], - "pipelineProcess": { - "type": 1 - }, - "properties": { - "DefinitionCreationSource": { - "$type": "System.String", - "$value": "ReleaseClone" - } - }, - "id": 4, - "name": "VoTT - Deploy to Web", - "path": "\\", - "projectReference": null, - "url": "https://vsrm.dev.azure.com/msft-vott/4e739af6-f85e-44b9-a3f3-75eb893a6223/_apis/Release/definitions/4", - "_links": { - "self": { - "href": "https://vsrm.dev.azure.com/msft-vott/4e739af6-f85e-44b9-a3f3-75eb893a6223/_apis/Release/definitions/4" - }, - "web": { - "href": "https://dev.azure.com/msft-vott/4e739af6-f85e-44b9-a3f3-75eb893a6223/_release?definitionId=4" - } - } -} diff --git a/azure-pipelines/releases/VoTT - Upload Plato Report.json b/azure-pipelines/releases/VoTT - Upload Plato Report.json deleted file mode 100644 index 4b9988a0d1..0000000000 --- a/azure-pipelines/releases/VoTT - Upload Plato Report.json +++ /dev/null @@ -1,329 +0,0 @@ -{ - "source": 2, - "revision": 8, - "description": "copy artifact to azure blob hosting plato report for VoTT", - "createdBy": { - "displayName": "My Ho 🥓🥐🍚", - "url": "https://app.vssps.visualstudio.com/Af945f528-1155-48f8-b08b-b6529166b9f0/_apis/Identities/1077cc21-332d-415a-8e93-e6277da44f6d", - "_links": { - "avatar": { - "href": "https://dev.azure.com/msft-vott/_apis/GraphProfile/MemberAvatars/aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1" - } - }, - "id": "1077cc21-332d-415a-8e93-e6277da44f6d", - "uniqueName": "myho@microsoft.com", - "imageUrl": "https://dev.azure.com/msft-vott/_apis/GraphProfile/MemberAvatars/aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1", - "descriptor": "aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1" - }, - "createdOn": "2019-03-25T22:52:29.780Z", - "modifiedBy": { - "displayName": "My Ho 🥓🥐🍚", - "url": "https://app.vssps.visualstudio.com/Af945f528-1155-48f8-b08b-b6529166b9f0/_apis/Identities/1077cc21-332d-415a-8e93-e6277da44f6d", - "_links": { - "avatar": { - "href": "https://dev.azure.com/msft-vott/_apis/GraphProfile/MemberAvatars/aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1" - } - }, - "id": "1077cc21-332d-415a-8e93-e6277da44f6d", - "uniqueName": "myho@microsoft.com", - "imageUrl": "https://dev.azure.com/msft-vott/_apis/GraphProfile/MemberAvatars/aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1", - "descriptor": "aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1" - }, - "modifiedOn": "2019-04-12T22:29:15.590Z", - "isDeleted": false, - "variables": { - "STORAGE_ACCOUNT": { - "value": "vottv2", - "allowOverride": true - } - }, - "variableGroups": [], - "environments": [ - { - "id": 6, - "name": "Upload Report", - "rank": 1, - "owner": { - "displayName": "My Ho 🥓🥐🍚", - "url": "https://app.vssps.visualstudio.com/Af945f528-1155-48f8-b08b-b6529166b9f0/_apis/Identities/1077cc21-332d-415a-8e93-e6277da44f6d", - "_links": { - "avatar": { - "href": "https://dev.azure.com/msft-vott/_apis/GraphProfile/MemberAvatars/aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1" - } - }, - "id": "1077cc21-332d-415a-8e93-e6277da44f6d", - "uniqueName": "myho@microsoft.com", - "imageUrl": "https://dev.azure.com/msft-vott/_apis/GraphProfile/MemberAvatars/aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1", - "descriptor": "aad.MTRlNGE0YjQtNDU5NS03OGI5LTk2MmItNTM0ZjNjYjUxMWI1" - }, - "variables": {}, - "variableGroups": [], - "preDeployApprovals": { - "approvals": [ - { - "rank": 1, - "isAutomated": true, - "isNotificationOn": false, - "id": 16 - } - ], - "approvalOptions": { - "requiredApproverCount": null, - "releaseCreatorCanBeApprover": false, - "autoTriggeredAndPreviousEnvironmentApprovedCanBeSkipped": false, - "enforceIdentityRevalidation": false, - "timeoutInMinutes": 0, - "executionOrder": 1 - } - }, - "deployStep": { - "id": 17 - }, - "postDeployApprovals": { - "approvals": [ - { - "rank": 1, - "isAutomated": true, - "isNotificationOn": false, - "id": 18 - } - ], - "approvalOptions": { - "requiredApproverCount": null, - "releaseCreatorCanBeApprover": false, - "autoTriggeredAndPreviousEnvironmentApprovedCanBeSkipped": false, - "enforceIdentityRevalidation": false, - "timeoutInMinutes": 0, - "executionOrder": 2 - } - }, - "deployPhases": [ - { - "deploymentInput": { - "parallelExecution": { - "parallelExecutionType": 0 - }, - "skipArtifactsDownload": false, - "artifactsDownloadInput": { - "downloadInputs": [ - { - "alias": "_VoTT - Generate latest plato report", - "artifactType": "Build", - "artifactDownloadMode": "All", - "artifactItems": [] - } - ] - }, - "queueId": 3, - "demands": [], - "enableAccessToken": false, - "timeoutInMinutes": 0, - "jobCancelTimeoutInMinutes": 1, - "condition": "succeeded()", - "overrideInputs": {} - }, - "rank": 1, - "phaseType": 1, - "name": "Upload Report", - "refName": null, - "workflowTasks": [ - { - "environment": {}, - "taskId": "eb72cb01-a7e5-427b-a8a1-1b31ccac8a43", - "version": "2.*", - "name": "AzureBlob File Copy To $(STORAGE_ACCOUNT)", - "refName": "", - "enabled": true, - "alwaysRun": false, - "continueOnError": false, - "timeoutInMinutes": 0, - "definitionType": "task", - "overrideInputs": {}, - "condition": "succeeded()", - "inputs": { - "SourcePath": "$(System.DefaultWorkingDirectory)/_VoTT - Generate latest plato report/report", - "ConnectedServiceNameSelector": "ConnectedServiceNameARM", - "ConnectedServiceName": "", - "ConnectedServiceNameARM": "28e5058e-d34a-48f3-978b-4bb47ea9e227", - "Destination": "AzureBlob", - "StorageAccount": "", - "StorageAccountRM": "$(STORAGE_ACCOUNT)", - "ContainerName": "$web", - "BlobPrefix": "", - "EnvironmentName": "", - "EnvironmentNameRM": "", - "ResourceFilteringMethod": "machineNames", - "MachineNames": "", - "vmsAdminUserName": "", - "vmsAdminPassword": "", - "TargetPath": "", - "AdditionalArgumentsForBlobCopy": "", - "AdditionalArgumentsForVMCopy": "", - "enableCopyPrerequisites": "false", - "CopyFilesInParallel": "true", - "CleanTargetBeforeCopy": "false", - "skipCACheck": "true", - "outputStorageUri": "", - "outputStorageContainerSasToken": "" - } - } - ] - } - ], - "environmentOptions": { - "emailNotificationType": "OnlyOnFailure", - "emailRecipients": "release.environment.owner;release.creator", - "skipArtifactsDownload": false, - "timeoutInMinutes": 0, - "enableAccessToken": false, - "publishDeploymentStatus": true, - "badgeEnabled": false, - "autoLinkWorkItems": false, - "pullRequestDeploymentEnabled": false - }, - "demands": [], - "conditions": [ - { - "name": "ReleaseStarted", - "conditionType": 1, - "value": "" - } - ], - "executionPolicy": { - "concurrencyCount": 1, - "queueDepthCount": 0 - }, - "schedules": [], - "currentRelease": { - "id": 216, - "url": "https://vsrm.dev.azure.com/msft-vott/4e739af6-f85e-44b9-a3f3-75eb893a6223/_apis/Release/releases/216", - "_links": {} - }, - "retentionPolicy": { - "daysToKeep": 30, - "releasesToKeep": 3, - "retainBuild": true - }, - "processParameters": { - "dataSourceBindings": [ - { - "dataSourceName": "AzureRMWebAppNamesByAppType", - "parameters": { - "WebAppKind": "$(WebAppKind)" - }, - "endpointId": "$(ConnectedServiceName)", - "target": "WebAppName" - } - ] - }, - "properties": {}, - "preDeploymentGates": { - "id": 0, - "gatesOptions": null, - "gates": [] - }, - "postDeploymentGates": { - "id": 0, - "gatesOptions": null, - "gates": [] - }, - "environmentTriggers": [], - "badgeUrl": "https://vsrm.dev.azure.com/msft-vott/_apis/public/Release/badge/4e739af6-f85e-44b9-a3f3-75eb893a6223/6/6" - } - ], - "artifacts": [ - { - "sourceId": "4e739af6-f85e-44b9-a3f3-75eb893a6223:41", - "type": "Build", - "alias": "_VoTT - Generate latest plato report", - "definitionReference": { - "artifactSourceDefinitionUrl": { - "id": "https://dev.azure.com/msft-vott/_permalink/_build/index?collectionId=2f887b33-5e65-447a-a189-049f04641d6d&projectId=4e739af6-f85e-44b9-a3f3-75eb893a6223&definitionId=41", - "name": "" - }, - "defaultVersionBranch": { - "id": "", - "name": "" - }, - "defaultVersionSpecific": { - "id": "", - "name": "" - }, - "defaultVersionTags": { - "id": "", - "name": "" - }, - "defaultVersionType": { - "id": "latestType", - "name": "Latest" - }, - "definition": { - "id": "41", - "name": "VoTT - Generate latest plato report" - }, - "definitions": { - "id": "", - "name": "" - }, - "IsMultiDefinitionType": { - "id": "False", - "name": "False" - }, - "project": { - "id": "4e739af6-f85e-44b9-a3f3-75eb893a6223", - "name": "VoTT" - }, - "repository": { - "id": "", - "name": "" - } - }, - "isPrimary": true, - "isRetained": false - } - ], - "triggers": [ - { - "artifactAlias": "_VoTT - Generate latest plato report", - "triggerConditions": [ - { - "sourceBranch": "dev*", - "tags": [], - "useBuildDefinitionBranch": false, - "createReleaseOnBuildTagging": false - }, - { - "sourceBranch": "master", - "tags": [], - "useBuildDefinitionBranch": false, - "createReleaseOnBuildTagging": false - } - ], - "triggerType": 1 - } - ], - "releaseNameFormat": "Release-$(Date:MMddyy).$(Date:hhmm)-$(rev:r)", - "tags": [], - "pipelineProcess": { - "type": 1 - }, - "properties": { - "DefinitionCreationSource": { - "$type": "System.String", - "$value": "ReleaseClone" - } - }, - "id": 6, - "name": "VoTT - Upload Plato Report", - "path": "\\", - "projectReference": null, - "url": "https://vsrm.dev.azure.com/msft-vott/4e739af6-f85e-44b9-a3f3-75eb893a6223/_apis/Release/definitions/6", - "_links": { - "self": { - "href": "https://vsrm.dev.azure.com/msft-vott/4e739af6-f85e-44b9-a3f3-75eb893a6223/_apis/Release/definitions/6" - }, - "web": { - "href": "https://dev.azure.com/msft-vott/4e739af6-f85e-44b9-a3f3-75eb893a6223/_release?definitionId=6" - } - } -} diff --git a/azure-pipelines/templates/build-artifact.yml b/azure-pipelines/templates/build-artifact.yml index 763fdf4eb8..6eb1863285 100644 --- a/azure-pipelines/templates/build-artifact.yml +++ b/azure-pipelines/templates/build-artifact.yml @@ -4,6 +4,8 @@ jobs: pool: ${{ parameters.pool }} timeoutInMinutes: 15 # how long to run the job before automatically cancelling steps: + - template: git-pull-current-branch.yml + - task: NodeTool@0 displayName: 'Use Node 10.x' inputs: diff --git a/azure-pipelines/templates/create-github-release.yml b/azure-pipelines/templates/create-github-release.yml index fb6a9bb3cf..90369e5132 100644 --- a/azure-pipelines/templates/create-github-release.yml +++ b/azure-pipelines/templates/create-github-release.yml @@ -1,32 +1,92 @@ - parameters: - GitHubConnection: '' # defaults for any parameters that aren't specified - repositoryName: '' - releaseNotesSource: input - addChangeLog: false - isPreRelease: true - isDraft: true - - jobs: +parameters: + GitHubConnection: '' # defaults for any parameters that aren't specified + repositoryName: '' + isPreRelease: true + isDraft: false + +jobs: + - template: build-artifact.yml + parameters: + name: LinuxArtifact + pool: + vmImage: ubuntu-16.04 + os: linux + artifact: vott*.snap + + - template: build-artifact.yml + parameters: + name: WindowsArtifact + pool: + vmImage: "windows-2019" + os: windows + artifact: vott*.exe + + - template: build-artifact.yml + parameters: + name: MacOSArtifact + pool: + vmImage: macOS-10.15 + os: mac + artifact: vott*.dmg + - job: Create_Github_Release timeoutInMinutes: 30 # timeout on job if deploy is not completed in 30 minutes + dependsOn: + - LinuxArtifact + - WindowsArtifact + - MacOSArtifact + pool: vmImage: ubuntu-16.04 - steps: - - checkout: none # we already have the artifacts built, don't need the code + steps: - download: current + - template: git-pull-current-branch.yml - - task: GitHubRelease@0 + - bash: | + set -e + + ### + # These variables were set in the "Version Bump" stage. There are + # currently no way to pass variables between stages, hence this workaround. + ### + CURRENT_VERSION=$(cat $(Pipeline.Workspace)/variables/CURRENT_VERSION) + echo "##vso[task.setvariable variable=CURRENT_VERSION]$CURRENT_VERSION" + + NEXT_VERSION=$(cat $(Pipeline.Workspace)/variables/NEXT_VERSION) + echo "##vso[task.setvariable variable=NEXT_VERSION]$NEXT_VERSION" + displayName: "Retrieve version variables" + + - bash: | + printenv | sort + displayName: "Print Env Variables" + + - task: GitHubRelease@1 displayName: 'GitHub release (create)' inputs: gitHubConnection: ${{ parameters.GitHubConnection }} - repositoryName: ${{ parameters.repositoryName }} - releaseNotesSource: ${{ parameters.releaseNotesSource }} - target: $(Build.SourceBranch) + repositoryName: '$(Build.Repository.Name)' + action: 'create' + target: '$(Build.SourceBranch)' + tagSource: 'userSpecifiedTag' + tag: $(NEXT_VERSION) + releaseNotesSource: 'inline' + releaseNotesInline: | + ## Web Release + ### Dev + $(DEV_URL) + + ### Prod + $(PROD_URL) + + ## Docs + /~https://github.com/Microsoft/VoTT/blob/$(Build.SourceBranch)/README.md assets: | ../linux/* ../windows/* ../mac/* - addChangeLog: ${{ parameters.addChangeLog }} - isDraft: true # for testing, change to true when ready to merge + isDraft: ${{ parameters.isDraft }} isPreRelease: ${{ parameters.isPrelease }} + changeLogCompareToRelease: 'lastNonDraftReleaseByTag' + changeLogCompareToReleaseTag: $(CURRENT_VERSION) + changeLogType: 'commitBased' diff --git a/azure-pipelines/templates/create-web-release.yml b/azure-pipelines/templates/create-web-release.yml new file mode 100644 index 0000000000..446afcef4e --- /dev/null +++ b/azure-pipelines/templates/create-web-release.yml @@ -0,0 +1,59 @@ +jobs: + - job: "Web_Release" + pool: + vmImage: 'windows-latest' + + steps: + - template: git-pull-current-branch.yml + + - task: NodeTool@0 + displayName: 'Use Node 10.x' + inputs: + versionSpec: 10.x + + - task: Npm@1 + displayName: 'npm ci' + inputs: + command: custom + workingDir: . + verbose: false + customCommand: ci + + - task: Bash@3 + displayName: 'Create artifact' + inputs: + targetType: filePath + filePath: './scripts/generate-web-artifact.sh' + + - task: AzureFileCopy@3 + displayName: 'AzureBlob File Copy to $DEV_STORAGE_ACCOUNT' + inputs: + SourcePath: './build' + azureSubscription: $(azureSubscription) + destination: azureBlob + storage: $(DEV_STORAGE_ACCOUNT) + containerName: '$web' + # condition: eq(variables['Build.SourceBranch'], 'refs/heads/develop') + + - task: AzureFileCopy@3 + displayName: 'AzureBlob File Copy to $PROD_STORAGE_ACCOUNT' + inputs: + SourcePath: './build' + azureSubscription: $(azureSubscription) + destination: azureBlob + storage: $(PROD_STORAGE_ACCOUNT) + containerName: '$web' + condition: eq(variables['Build.SourceBranch'], 'refs/heads/master') + + - bash: | + echo + echo "Dev url: $DEV_URL" + displayName: "Dev URL" + + - bash: | + echo + echo "Prod url: $PROD_URL" + displayName: "Prod URL" + condition: eq(variables['Build.SourceBranch'], 'refs/heads/master') + + diff --git a/azure-pipelines/templates/git-pull-current-branch.yml b/azure-pipelines/templates/git-pull-current-branch.yml new file mode 100644 index 0000000000..60b8eb3d7a --- /dev/null +++ b/azure-pipelines/templates/git-pull-current-branch.yml @@ -0,0 +1,8 @@ +steps: + - task: Bash@3 + displayName: 'Pull latest from branch' + inputs: + targetType: filePath + filePath: './scripts/git-pull-current-branch.sh' + env: + SOURCE_BRANCH: $(Build.SourceBranch) diff --git a/azure-pipelines/templates/npm-version-bump.yml b/azure-pipelines/templates/npm-version-bump.yml new file mode 100644 index 0000000000..32427b5256 --- /dev/null +++ b/azure-pipelines/templates/npm-version-bump.yml @@ -0,0 +1,60 @@ +parameters: + versionType: '' + +jobs: +- job: "version_bump" + + variables: + - group: GitHub-Deploy-Creds + + timeoutInMinutes: 30 # timeout on job if deploy is not completed in 30 minutes + cancelTimeoutInMinutes: 1 # time limit to wait for job to cancel + + pool: + vmImage: macOS-latest # ssh key was generated on a Mac so using the same type of OS here + + steps: + - task: NodeTool@0 + inputs: + versionSpec: 10.x + displayName: 'Install Node.js' + + # Download secure file + # Download a secure file to the agent machine + - task: DownloadSecureFile@1 + # name: sshKey # The name with which to reference the secure file's path on the agent, like $(mySecureFile.secureFilePath) + inputs: + secureFile: vott_id_rsa + + # Install an SSH key prior to a build or deployment + - task: InstallSSHKey@0 # https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/install-ssh-key?view=azure-devops + inputs: + knownHostsEntry: $(KNOWN_HOSTS_ENTRY) + sshPublicKey: $(SSH_PUBLIC_KEY) + #sshPassphrase: # Optional + sshKeySecureFile: vott_id_rsa + env: + KNOWN_HOSTS_ENTRY: $(KNOWN_HOSTS_ENTRY) + SSH_PUBLIC_KEY: $(SSH_PUBLIC_KEY) # map to the right format (camelCase) that Azure credentials understand + + - task: Bash@3 + name: BumpNpmVersion + displayName: Bump NPM Version + inputs: + targetType: filePath + filePath: ./scripts/version-bump-commit.sh + arguments: + ${{ parameters.versionType }} + env: + SOURCE_BRANCH: $(Build.SourceBranch) + + - bash: | + printenv | sort + mkdir -p $(System.DefaultWorkingDirectory)/variables + echo "$NEXT_VERSION" > $(System.DefaultWorkingDirectory)/variables/NEXT_VERSION + echo "$CURRENT_VERSION" > $(System.DefaultWorkingDirectory)/variables/CURRENT_VERSION + displayName: "Prep variables for publishing" + + # Publish the variables folder as pipeline artifact + - publish: $(System.DefaultWorkingDirectory)/variables + artifact: variables diff --git a/azure-pipelines/upload-plato-report.yml b/azure-pipelines/upload-plato-report.yml new file mode 100644 index 0000000000..91ea196707 --- /dev/null +++ b/azure-pipelines/upload-plato-report.yml @@ -0,0 +1,74 @@ +name: $(Date:yyyyMMdd).$(Hours)$(Minutes)$(Seconds) +variables: + AZURE_STORAGE_ACCOUNT: vottv2 + azureSubscription: 'pj-little-sub' + REPORT_URL: 'https://vottv2.z22.web.core.windows.net/' + +trigger: + - dev* + - master + +pr: none # disable CI build for PR + +pool: + vmImage: 'Ubuntu-16.04' + +steps: + - bash: | + set -e + + COMMIT_SHA=`echo ${BUILD_SOURCEVERSION} | cut -c1-8` + echo "sha: " $COMMIT_SHA + + # rewrite build number + echo "##vso[build.updatebuildnumber]Report-${COMMIT_SHA}-${BUILD_BUILDNUMBER}" + displayName: "Rewrite build number" + + - bash: | + set -e + + ACCOUNT=$(AZURE_STORAGE_ACCOUNT) + if [[ -z "${ACCOUNT}" ]]; then + echo "Need to set AZURE_STORAGE_ACCOUNT" + exit 1 + fi + displayName: "Verify storage account cred exists" + + - task: NodeTool@0 + displayName: "Use Node 10.x" + inputs: + versionSpec: 10.x + + - task: Npm@1 + displayName: 'Run `npm ci`' + inputs: + command: custom + verbose: false + customCommand: ci + + - task: AzureCLI@1 + displayName: "Pull down old report and add updates" + inputs: + azureSubscription: $(azureSubscription) + scriptLocation: inlineScript + inlineScript: './scripts/update-report.sh' + + - bash: | + set -e + + cat /tmp/download.log + displayName: "print download log" + condition: succeededOrFailed() + + - task: AzureFileCopy@3 + displayName: 'AzureBlob File Copy to $(AZURE_STORAGE_ACCOUNT)' + inputs: + SourcePath: './report' + azureSubscription: $(azureSubscription) + destination: azureBlob + storage: $(AZURE_STORAGE_ACCOUNT) + containerName: '$web' + + - bash: | + echo "See report: $(REPORT_URL) " + displayName: "Report URl" diff --git a/azure-pipelines/web/generate-web-artifact.yml b/azure-pipelines/web/generate-web-artifact.yml deleted file mode 100644 index bb5c3c0eb7..0000000000 --- a/azure-pipelines/web/generate-web-artifact.yml +++ /dev/null @@ -1,35 +0,0 @@ -trigger: - branches: - include: - - dev* - - master -pr: none # disable CI build for PR - -pool: - vmImage: 'Ubuntu-16.04' - -steps: - - task: NodeTool@0 - displayName: 'Use Node 10.x' - inputs: - versionSpec: 10.x - - - task: Npm@1 - displayName: 'npm ci' - inputs: - command: custom - workingDir: . - verbose: false - customCommand: ci - - - task: Bash@3 - displayName: 'Create artifact' - inputs: - targetType: filePath - filePath: './scripts/generate-web-artifact.sh' - - - task: PublishBuildArtifacts@1 - displayName: 'Publish Artifact: build' - inputs: - PathtoPublish: ./build - ArtifactName: build diff --git a/azure-pipelines/windows/artifact-build-windows.yml b/azure-pipelines/windows/artifact-build-windows.yml deleted file mode 100644 index 0e39f4cf16..0000000000 --- a/azure-pipelines/windows/artifact-build-windows.yml +++ /dev/null @@ -1,24 +0,0 @@ -steps: - - task: NodeTool@0 - displayName: 'Use Node 10.x' - inputs: - versionSpec: 10.x - - - bash: | - set -ex - - # clean install - npm ci - npm run release-ci - - mkdir -p windows - cp releases/vott*.exe windows/ - - displayName: Build - - - task: PublishBuildArtifacts@1 - displayName: 'Publish Artifact: windows' - inputs: - PathtoPublish: windows - ArtifactName: windows - diff --git a/docs/images/release-process.png b/docs/images/release-process.png new file mode 100644 index 0000000000000000000000000000000000000000..fd1e380bf4198e6b8f17a3078dfd2f2ceb95f425 GIT binary patch literal 89005 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 H3xEG_L(-xo literal 0 HcmV?d00001 diff --git a/package-lock.json b/package-lock.json index 6e54231f60..976762af3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "7zip-bin": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-4.1.0.tgz", - "integrity": "sha512-AsnBZN3a8/JcNt+KPkGGODaA4c7l3W5+WpeKgGSbstSLxqWtTXqd1ieJGBQ8IFCtRg8DmmKUcSkIkUc0A4p3YA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.0.3.tgz", + "integrity": "sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA==", "dev": true }, "@azure/ms-rest-js": { @@ -888,6 +888,42 @@ "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" }, + "@develar/schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", + "dev": true, + "requires": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "dev": true + } + } + }, "@fortawesome/fontawesome-free": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.6.1.tgz", @@ -983,6 +1019,12 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" }, + "@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 + }, "@svgr/core": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@svgr/core/-/core-2.4.1.tgz", @@ -1017,6 +1059,15 @@ "loader-utils": "^1.1.0" } }, + "@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" + } + }, "@tensorflow/tfjs": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-1.0.3.tgz", @@ -1081,6 +1132,18 @@ "integrity": "sha512-fOM/Jhv51iyugY7KOBZz2ThfT1gwvsGCfWxpLpZDgkGjpEO4Le9cld07OdskikLjDUQJ43dzDaVRSFwQlpdqVg==", "dev": true }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, + "@types/debug": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", + "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==", + "dev": true + }, "@types/dotenv": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/@types/dotenv/-/dotenv-6.1.1.tgz", @@ -1100,6 +1163,15 @@ "@types/react": "*" } }, + "@types/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-UoOfVEzAUpeSPmjm7h1uk5MH6KZma2z2O7a75onTGjnNvAvMVrPzPL/vBbT65iIGHWj6rokwfmYcmxmlSf2uwg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/history": { "version": "4.7.2", "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.2.tgz", @@ -1323,6 +1395,21 @@ "resolved": "https://registry.npmjs.org/@types/webgl2/-/webgl2-0.0.4.tgz", "integrity": "sha512-PACt1xdErJbMUOUweSrbVM7gSIYm1vTncW2hF6Os/EeWi6TXYAYMPp+8v6rzHmypE5gHrxaxZNXgMkJVIdZpHw==" }, + "@types/yargs": { + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.5.tgz", + "integrity": "sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", + "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", + "dev": true + }, "@webassemblyjs/ast": { "version": "1.7.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.6.tgz", @@ -1597,18 +1684,24 @@ "dev": true }, "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", "dev": true, "requires": { - "string-width": "^2.0.0" + "string-width": "^3.0.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "is-fullwidth-code-point": { @@ -1618,22 +1711,23 @@ "dev": true }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { + "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "strip-ansi": "^5.1.0" } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } } } @@ -1929,41 +2023,39 @@ } }, "app-builder-bin": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-2.6.1.tgz", - "integrity": "sha512-W0l85O+s6lOaziWqAhszPfwiG0s15FvMBP9j9i/bknsMccUkwN60u4Cy7yYtf6akCUDuJenLqpTX4/xvkq1egw==", + "version": "3.5.8", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-3.5.8.tgz", + "integrity": "sha512-ni3q7QTfQNWHNWuyn5x3FZu6GnQZv+TFnfgk5++svqleKEhHGqS1mIaKsh7x5pBX6NFXU3/+ktk98wA/AW4EXw==", "dev": true }, "app-builder-lib": { - "version": "20.38.4", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-20.38.4.tgz", - "integrity": "sha512-JbuAJQBndcCW6BJVIb2tPjM5wiuIjz2LUlbyVxNIawM2wFKUBV9kr0N3RNBJFxcrCEuA9oprMUCoymJdrMUVfA==", + "version": "22.6.0", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.6.0.tgz", + "integrity": "sha512-ky2aLYy92U+Gh6dKq/e8/bNmCotp6/GMhnX8tDZPv9detLg9WuBnWWi1ktBPlpbl1DREusy+TIh+9rgvfduQoA==", "dev": true, "requires": { - "7zip-bin": "~4.1.0", - "app-builder-bin": "2.6.1", + "7zip-bin": "~5.0.3", + "@develar/schema-utils": "~2.6.5", "async-exit-hook": "^2.0.1", - "bluebird-lst": "^1.0.6", - "builder-util": "9.6.1", - "builder-util-runtime": "8.1.0", + "bluebird-lst": "^1.0.9", + "builder-util": "22.6.0", + "builder-util-runtime": "8.7.0", "chromium-pickle-js": "^0.2.0", - "debug": "^4.1.0", - "ejs": "^2.6.1", - "electron-osx-sign": "0.4.11", - "electron-publish": "20.38.3", - "fs-extra-p": "^7.0.0", - "hosted-git-info": "^2.7.1", + "debug": "^4.1.1", + "ejs": "^3.1.2", + "electron-publish": "22.6.0", + "fs-extra": "^9.0.0", + "hosted-git-info": "^3.0.4", "is-ci": "^2.0.0", - "isbinaryfile": "^3.0.3", - "js-yaml": "^3.12.0", - "lazy-val": "^1.0.3", + "isbinaryfile": "^4.0.6", + "js-yaml": "^3.13.1", + "lazy-val": "^1.0.4", "minimatch": "^3.0.4", - "normalize-package-data": "^2.4.0", - "plist": "^3.0.1", - "read-config-file": "3.2.0", - "sanitize-filename": "^1.6.1", - "semver": "^5.6.0", - "temp-file": "^3.3.2" + "normalize-package-data": "^2.5.0", + "read-config-file": "6.0.0", + "sanitize-filename": "^1.6.3", + "semver": "^7.3.2", + "temp-file": "^3.3.7" }, "dependencies": { "ci-info": { @@ -1981,6 +2073,33 @@ "ms": "^2.1.1" } }, + "fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "hosted-git-info": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.4.tgz", + "integrity": "sha512-4oT62d2jwSDBbLLFLZE+1vPuQ1h8p9wjrJ8Mqx5TjsyWmBMV5B13eJqn8pvluqubLf3cJPTfiYCIwNwDNmzScQ==", + "dev": true, + "requires": { + "lru-cache": "^5.1.1" + } + }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -1990,10 +2109,92 @@ "ci-info": "^2.0.0" } }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true } } @@ -2268,6 +2469,12 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -2924,12 +3131,20 @@ "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" }, "bluebird-lst": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.6.tgz", - "integrity": "sha512-CBWFoPuUPpcvMUxfyr8DKdI5d4kjxFl1h39+VbKxP3KJWJHEsLtuT4pPLkjpxCGU6Ask21tvbnftWXdqIxYldQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", + "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", "dev": true, "requires": { - "bluebird": "^3.5.2" + "bluebird": "^3.5.5" + }, + "dependencies": { + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + } } }, "bn.js": { @@ -2996,55 +3211,113 @@ "integrity": "sha512-rDFIzgXcof0jDyjNosjv4Sno77X4KuPeFxG2XZZv1/Kc8DRVGVADdoQyyOVDwPqL36DDmtCQbrpMCqvpPLJQ0w==" }, "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", "dev": true, "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, + "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" + } + }, "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.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 + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "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 }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "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": "^3.0.0" + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } } } @@ -3193,28 +3466,6 @@ } } }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -3236,31 +3487,68 @@ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" }, "builder-util": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-9.6.1.tgz", - "integrity": "sha512-8MljKTjeV+A+LLVexuWEV3EpWbiUcsHHrB4Bg2qNo/3dC+vTo6g/27+W3Ij7Ij1UTobSkNBstFieWijXJCco9A==", + "version": "22.6.0", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.6.0.tgz", + "integrity": "sha512-jgdES2ExJYkuXC3DEaGAjFctKNA81C4QDy8zdoc+rqdSqheTizuDNtZg02uMFklmUES4V4fggmqds+Y7wraqng==", "dev": true, "requires": { - "7zip-bin": "~4.1.0", - "app-builder-bin": "2.6.1", - "bluebird-lst": "^1.0.6", - "builder-util-runtime": "^8.1.0", - "chalk": "^2.4.1", - "debug": "^4.1.0", - "fs-extra-p": "^7.0.0", + "7zip-bin": "~5.0.3", + "@types/debug": "^4.1.5", + "@types/fs-extra": "^8.1.0", + "app-builder-bin": "3.5.8", + "bluebird-lst": "^1.0.9", + "builder-util-runtime": "8.7.0", + "chalk": "^4.0.0", + "debug": "^4.1.1", + "fs-extra": "^9.0.0", "is-ci": "^2.0.0", - "js-yaml": "^3.12.0", - "source-map-support": "^0.5.9", - "stat-mode": "^0.2.2", - "temp-file": "^3.3.2" + "js-yaml": "^3.13.1", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.3.7" }, "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.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", + "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, + "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 + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -3270,6 +3558,30 @@ "ms": "^2.1.1" } }, + "fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "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 + }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -3279,10 +3591,30 @@ "ci-info": "^2.0.0" } }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "source-map": { @@ -3292,26 +3624,39 @@ "dev": true }, "source-map-support": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", - "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true } } }, "builder-util-runtime": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.1.0.tgz", - "integrity": "sha512-s1mlJ28mv+56Iebh6c9aXjVe11O3Z0cDTwAGeB0PCcUzHA37fDxGgS8ZGoYNMZP+rBHj21d/od1wuYofTVLaQg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.0.tgz", + "integrity": "sha512-G1AqqVM2vYTrSFR982c1NNzwXKrGLQjVjaZaWQdn4O6Z3YKjdMDofw88aD9jpyK9ZXkrCxR0tI3Qe9wNbyTlXg==", "dev": true, "requires": { - "bluebird-lst": "^1.0.6", - "debug": "^4.1.0", - "fs-extra-p": "^7.0.0", + "debug": "^4.1.1", "sax": "^1.2.4" }, "dependencies": { @@ -3325,9 +3670,9 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } @@ -3391,6 +3736,44 @@ "unset-value": "^1.0.0" } }, + "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 + }, + "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 + } + } + }, "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", @@ -3466,12 +3849,6 @@ "rsvp": "^3.3.3" } }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true - }, "case-sensitive-paths-webpack-plugin": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.2.tgz", @@ -3786,9 +4163,9 @@ } }, "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz", + "integrity": "sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==", "dev": true }, "cli-cursor": { @@ -3855,6 +4232,15 @@ "shallow-clone": "^0.1.2" } }, + "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" + } + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -3943,12 +4329,6 @@ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" }, - "compare-version": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", - "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=", - "dev": true - }, "component-classes": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/component-classes/-/component-classes-1.2.6.tgz", @@ -4045,17 +4425,61 @@ } }, "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "dev": true, "requires": { - "dot-prop": "^4.1.0", + "dot-prop": "^5.2.0", "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", + "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + } } }, "confusing-browser-globals": { @@ -4179,15 +4603,6 @@ "elliptic": "^6.0.0" } }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, "create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", @@ -4259,9 +4674,9 @@ "integrity": "sha1-/aGedh/Ad+Af+/3G6f38WeiAbNg=" }, "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true }, "css-animation": { @@ -4742,6 +5157,15 @@ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, "deep-diff": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz", @@ -4818,6 +5242,12 @@ "strip-bom": "^2.0.0" } }, + "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", @@ -5027,19 +5457,72 @@ "dev": true }, "dmg-builder": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-6.5.3.tgz", - "integrity": "sha512-ZNl4GFBg6rdFplnuoK56iftxh/qgM7rXJUxgl21eK4WsjxgQwtQ0REZo+pDSL4OzVeyOO8MMNWSNQcCsBLiDyA==", + "version": "22.6.0", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.6.0.tgz", + "integrity": "sha512-rJxuGhHIpcuDGBtWZMM8aLxkbZNgYO2MO5dUerDIBXebhX1K8DA23iz/uZ8ahcRNgWEv57b8GDqJbXKEfr5T0A==", "dev": true, "requires": { - "app-builder-lib": "~20.38.3", - "bluebird-lst": "^1.0.6", - "builder-util": "~9.6.0", - "fs-extra-p": "^7.0.0", - "iconv-lite": "^0.4.24", - "js-yaml": "^3.12.0", - "parse-color": "^1.0.0", - "sanitize-filename": "^1.6.1" + "app-builder-lib": "22.6.0", + "builder-util": "22.6.0", + "fs-extra": "^9.0.0", + "iconv-lite": "^0.5.1", + "js-yaml": "^3.13.1", + "sanitize-filename": "^1.6.3" + }, + "dependencies": { + "fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "iconv-lite": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.1.tgz", + "integrity": "sha512-ONHr16SQvKZNSqjQT9gy5z24Jw+uqfO02/ngBSBoqChZ+W8qXX7GPRa1RoUnzGADw8K63R1BXUMzarCVQBpY8Q==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true + } } }, "dnd-core": { @@ -5249,10 +5732,13 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "ejs": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", - "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", - "dev": true + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.2.tgz", + "integrity": "sha512-zFuywxrAWtX5Mk2KAuoJNkXXbfezpNA0v7i+YC971QORguPekpjpAgeOv99YWSdKXwj7JxI2QAWDeDkE8fWtXw==", + "dev": true, + "requires": { + "jake": "^10.6.1" + } }, "electron": { "version": "3.0.13", @@ -5274,81 +5760,135 @@ } }, "electron-builder": { - "version": "20.38.4", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-20.38.4.tgz", - "integrity": "sha512-WHOr3Rz2wktxV5TqmRL6woO9/wrIZeRfJPSEXOhgfgLskE5Sp2Aer0zAF7lHNqXuG6JhU+0I9IYFAxa73MTs9w==", + "version": "22.6.0", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.6.0.tgz", + "integrity": "sha512-aLHlB6DTfjJ3MI4AUIFeWnwIozNgNlbOk2c2sTHxB10cAKp0dBVSPZ7xF5NK0uwDhElvRzJQubnHtJD6zKg42Q==", "dev": true, "requires": { - "app-builder-lib": "20.38.4", - "bluebird-lst": "^1.0.6", - "builder-util": "9.6.1", - "builder-util-runtime": "8.1.0", - "chalk": "^2.4.1", - "dmg-builder": "6.5.3", - "fs-extra-p": "^7.0.0", + "@types/yargs": "^15.0.4", + "app-builder-lib": "22.6.0", + "bluebird-lst": "^1.0.9", + "builder-util": "22.6.0", + "builder-util-runtime": "8.7.0", + "chalk": "^4.0.0", + "dmg-builder": "22.6.0", + "fs-extra": "^9.0.0", "is-ci": "^2.0.0", - "lazy-val": "^1.0.3", - "read-config-file": "3.2.0", - "sanitize-filename": "^1.6.1", - "update-notifier": "^2.5.0", - "yargs": "^12.0.5" + "lazy-val": "^1.0.4", + "read-config-file": "6.0.0", + "sanitize-filename": "^1.6.3", + "update-notifier": "^4.1.0", + "yargs": "^15.3.1" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, + "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" + } + }, "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, + "chalk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", + "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "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": { - "locate-path": "^3.0.0" + "color-name": "~1.1.4" } }, - "get-stream": { + "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 + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "pump": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "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 }, "is-ci": { @@ -5361,119 +5901,141 @@ } }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "mem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", - "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" - } - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "p-locate": "^4.1.0" } }, "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" } }, "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "require-main-filename": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "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": "^3.0.0" + "ansi-regex": "^5.0.0" } }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", + "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", "dev": true, "requires": { - "cliui": "^4.0.0", + "cliui": "^6.0.0", "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^4.2.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^18.1.1" } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -5499,46 +6061,114 @@ "sumchecker": "^2.0.2" } }, - "electron-osx-sign": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.11.tgz", - "integrity": "sha512-VVd40nrnVqymvFrY9ZkOYgHJOvexHHYTR3di/SN+mjJ0OWhR1I8BRVj3U+Yamw6hnkZZNKZp52rqL5EFAAPFkQ==", + "electron-publish": { + "version": "22.6.0", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.6.0.tgz", + "integrity": "sha512-+v05SBf9qR7Os5au+fifloNHy5QxHQkUGudBj68YaTb43Pn37UkwRxSc49Lf13s4wW32ohM45g8BOVInPJEdnA==", "dev": true, "requires": { - "bluebird": "^3.5.0", - "compare-version": "^0.1.2", - "debug": "^2.6.8", - "isbinaryfile": "^3.0.2", - "minimist": "^1.2.0", - "plist": "^3.0.1" + "@types/fs-extra": "^8.1.0", + "bluebird-lst": "^1.0.9", + "builder-util": "22.6.0", + "builder-util-runtime": "8.7.0", + "chalk": "^4.0.0", + "fs-extra": "^9.0.0", + "lazy-val": "^1.0.4", + "mime": "^2.4.4" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "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": { - "ms": "2.0.0" + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", + "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.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-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "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 + }, + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "mime": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz", + "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true } } }, - "electron-publish": { - "version": "20.38.3", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-20.38.3.tgz", - "integrity": "sha512-Qomq253NT5DfjUZgFSx6p+gheU5YhM6zZ67fTtBZvwyk0v8HwxNXfa8fZT7h+1c3BwEmjusTbmjZRNW/XZBXFA==", - "dev": true, - "requires": { - "bluebird-lst": "^1.0.6", - "builder-util": "~9.6.0", - "builder-util-runtime": "^8.1.0", - "chalk": "^2.4.1", - "fs-extra-p": "^7.0.0", - "lazy-val": "^1.0.3", - "mime": "^2.4.0" - } - }, "electron-to-chromium": { "version": "1.3.95", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.95.tgz", @@ -5721,6 +6351,12 @@ "is-symbol": "^1.0.2" } }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -6734,6 +7370,15 @@ "schema-utils": "^1.0.0" } }, + "filelist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.1.tgz", + "integrity": "sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", @@ -7269,29 +7914,6 @@ "universalify": "^0.1.0" } }, - "fs-extra-p": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-7.0.0.tgz", - "integrity": "sha512-5tg5jBOd0xIXjwj4PDnafOXL5TyPVzjxLby4DPKev53wurEXp7IsojBaD4Lj5M5w7jxw0pbkEU0fFEPmcKoMnA==", - "dev": true, - "requires": { - "bluebird-lst": "^1.0.6", - "fs-extra": "^7.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, "fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", @@ -7999,12 +8621,12 @@ } }, "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", + "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", "dev": true, "requires": { - "ini": "^1.3.4" + "ini": "^1.3.5" } }, "global-modules": { @@ -8083,22 +8705,33 @@ "integrity": "sha512-SJYemeX5GjDLPnadcmCNQePQHCS4Hl5fOcI/JawqDIYFhCmrtYAjcx/oTQx/Wi8UuCuZQhfvftbmPePPAYHFtA==" }, "got": { - "version": "6.7.1", - "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "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": { - "create-error-class": "^3.0.0", + "@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": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" + "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": { + "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" + } + } } }, "graceful-fs": { @@ -8296,6 +8929,12 @@ } } }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, "hash-base": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", @@ -8531,6 +9170,12 @@ } } }, + "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 + }, "http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", @@ -9260,19 +9905,27 @@ } }, "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", "dev": true, "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + }, + "dependencies": { + "is-path-inside": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", + "dev": true + } } }, "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", "dev": true }, "is-number": { @@ -9338,12 +9991,6 @@ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", @@ -9362,12 +10009,6 @@ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, "is-root": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.0.0.tgz", @@ -9426,19 +10067,22 @@ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "isbinaryfile": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", - "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", - "dev": true, - "requires": { - "buffer-alloc": "^1.2.0" - } + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.6.tgz", + "integrity": "sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg==", + "dev": true }, "isemail": { "version": "3.2.0", @@ -9579,6 +10223,37 @@ "handlebars": "^4.0.3" } }, + "jake": { + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.6.1.tgz", + "integrity": "sha512-pHUK3+V0BjOb1XSi95rbBksrMdIqLVC9bJqDnshVyleYsET3H0XAq+3VB2E3notcYvv4wRdRHn13p7vobG+wfQ==", + "dev": true, + "requires": { + "async": "0.9.x", + "chalk": "^2.4.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, "jest": { "version": "23.6.0", "resolved": "https://registry.npmjs.org/jest/-/jest-23.6.0.tgz", @@ -10341,6 +11016,12 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, + "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", @@ -10431,6 +11112,15 @@ "array-includes": "^3.0.3" } }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", @@ -10459,12 +11149,12 @@ } }, "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", "dev": true, "requires": { - "package-json": "^4.0.0" + "package-json": "^6.3.0" } }, "lazy-cache": { @@ -10473,9 +11163,9 @@ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" }, "lazy-val": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.3.tgz", - "integrity": "sha512-pjCf3BYk+uv3ZcPzEVM0BFvO9Uw58TmlrU0oG5tTrr9Kcid3+kdKxapH8CjdYmVa2nO5wOoZn2rdvZx2PKj/xg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.4.tgz", + "integrity": "sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q==", "dev": true }, "lcid": { @@ -11069,6 +11759,12 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, "min-document": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", @@ -11967,6 +12663,12 @@ "os-tmpdir": "^1.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 + }, "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", @@ -12009,15 +12711,23 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" }, "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "dev": true, "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "pako": { @@ -12084,23 +12794,6 @@ "pbkdf2": "^3.0.3" } }, - "parse-color": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-color/-/parse-color-1.0.0.tgz", - "integrity": "sha1-e3SLlag/A/FqlPU15S1/PZRlhhk=", - "dev": true, - "requires": { - "color-convert": "~0.5.0" - }, - "dependencies": { - "color-convert": { - "version": "0.5.3", - "resolved": "http://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz", - "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=", - "dev": true - } - } - }, "parse-glob": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", @@ -12270,17 +12963,6 @@ } } }, - "plist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz", - "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==", - "dev": true, - "requires": { - "base64-js": "^1.2.3", - "xmlbuilder": "^9.0.7", - "xmldom": "0.1.x" - } - }, "pluralize": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", @@ -14033,9 +14715,9 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", "dev": true }, "preserve": { @@ -14216,6 +14898,15 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, + "pupa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz", + "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -15167,36 +15858,54 @@ } }, "read-config-file": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-3.2.0.tgz", - "integrity": "sha512-i1QRc5jy4sHm9YBGb6ArA5SU1mDrc5wu2mnm3r9gPnm+LVZhBGbpTCKqAXyvV4TJHnBR3Yaaww+9b3DyRZcfww==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.0.0.tgz", + "integrity": "sha512-PHjROSdpceKUmqS06wqwP92VrM46PZSTubmNIMJ5DrMwg1OgenSTSEHIkCa6TiOJ+y/J0xnG1fFwG3M+Oi1aNA==", "dev": true, "requires": { - "ajv": "^6.5.5", - "ajv-keywords": "^3.2.0", - "bluebird-lst": "^1.0.6", - "dotenv": "^6.1.0", - "dotenv-expand": "^4.2.0", - "fs-extra-p": "^7.0.0", - "js-yaml": "^3.12.0", - "json5": "^2.1.0", - "lazy-val": "^1.0.3" + "dotenv": "^8.2.0", + "dotenv-expand": "^5.1.0", + "js-yaml": "^3.13.1", + "json5": "^2.1.2", + "lazy-val": "^1.0.4" }, "dependencies": { "dotenv": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", - "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", "dev": true }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "dev": true, "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true } } }, @@ -15693,22 +16402,21 @@ } }, "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.1.1.tgz", + "integrity": "sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA==", "dev": true, "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" + "rc": "^1.2.8" } }, "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", "dev": true, "requires": { - "rc": "^1.0.1" + "rc": "^1.2.8" } }, "regjsgen": { @@ -15932,6 +16640,15 @@ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, + "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": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -16300,9 +17017,9 @@ } }, "sanitize-filename": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz", - "integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", "dev": true, "requires": { "truncate-utf8-bytes": "^1.0.0" @@ -16523,12 +17240,20 @@ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" }, "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "dev": true, "requires": { - "semver": "^5.0.3" + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "send": { @@ -17122,9 +17847,9 @@ "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==" }, "stat-mode": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", - "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", "dev": true }, "static-extend": { @@ -17574,24 +18299,39 @@ } }, "temp-file": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.3.2.tgz", - "integrity": "sha512-FGKccAW0Mux9hC/2bdUIe4bJRv4OyVo4RpVcuplFird1V/YoplIFbnPZjfzbJSf/qNvRZIRB9/4n/RkI0GziuQ==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.3.7.tgz", + "integrity": "sha512-9tBJKt7GZAQt/Rg0QzVWA8Am8c1EFl+CAv04/aBVqlx5oyfQ508sFIABshQ0xbZu6mBrFLWIUXO/bbLYghW70g==", "dev": true, "requires": { "async-exit-hook": "^2.0.1", - "bluebird-lst": "^1.0.6", - "fs-extra-p": "^7.0.0" + "fs-extra": "^8.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + } } }, "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - } + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", + "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==", + "dev": true }, "terser": { "version": "3.12.0", @@ -17750,12 +18490,6 @@ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==" }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, "timers-browserify": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", @@ -17805,6 +18539,12 @@ "kind-of": "^3.0.2" } }, + "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", @@ -18253,6 +18993,12 @@ "prelude-ls": "~1.1.2" } }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, "type-is": { "version": "1.6.16", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", @@ -18267,6 +19013,15 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, "typescript": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.2.tgz", @@ -18558,12 +19313,12 @@ } }, "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, "requires": { - "crypto-random-string": "^1.0.0" + "crypto-random-string": "^2.0.0" } }, "universalify": { @@ -18622,33 +19377,97 @@ } } }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, "upath": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==" }, "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.0.tgz", + "integrity": "sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew==", "dev": true, "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "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": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "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 + }, + "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 + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "upper-case": { @@ -18705,12 +19524,12 @@ } }, "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "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": "^1.0.1" + "prepend-http": "^2.0.0" } }, "use": { @@ -19779,43 +20598,50 @@ } }, "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dev": true, "requires": { - "string-width": "^2.1.1" + "string-width": "^4.0.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "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": "^3.0.0" + "ansi-regex": "^5.0.0" } } } @@ -20021,9 +20847,9 @@ } }, "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true }, "xml-name-validator": { @@ -20050,12 +20876,6 @@ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-1.3.1.tgz", "integrity": "sha512-tGkGJkN8XqCod7OT+EvGYK5Z4SfDQGD30zAa58OcnAa0RRWgzUEK72tkXhsX1FZd+rgnhRxFtmO+ihkp8LHSkw==" }, - "xmldom": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", - "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", - "dev": true - }, "xregexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", diff --git a/package.json b/package.json index e8ccdeb77c..07bfa556c1 100644 --- a/package.json +++ b/package.json @@ -113,7 +113,7 @@ "@types/redux-mock-store": "^1.0.0", "cross-env": "^5.2.0", "electron": "^3.0.13", - "electron-builder": "^20.38.3", + "electron-builder": "^22.6.0", "enzyme": "^3.7.0", "enzyme-adapter-react-16": "^1.7.0", "foreman": "^3.0.1", diff --git a/preview-release-pipeline.yml b/preview-release-pipeline.yml deleted file mode 100644 index 02194c70b4..0000000000 --- a/preview-release-pipeline.yml +++ /dev/null @@ -1,88 +0,0 @@ -trigger: none # manual queue only when we're ready to release -pr: none # disable CI build for PR - -stages: -- stage: version_bump_commit - jobs: - - job: "version_bump" - - variables: - - group: GitHub-Deploy-Creds - - timeoutInMinutes: 30 # timeout on job if deploy is not completed in 30 minutes - cancelTimeoutInMinutes: 1 # time limit to wait for job to cancel - - pool: - vmImage: macOS-10.15 # ssh key was generated on a Mac so using the same type of OS here - - steps: - - task: NodeTool@0 - inputs: - versionSpec: 10.x - displayName: 'Install Node.js' - - # Download secure file - # Download a secure file to the agent machine - - task: DownloadSecureFile@1 - # name: sshKey # The name with which to reference the secure file's path on the agent, like $(mySecureFile.secureFilePath) - inputs: - secureFile: vott_id_rsa - - # Install an SSH key prior to a build or deployment - - task: InstallSSHKey@0 # https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/install-ssh-key?view=azure-devops - inputs: - knownHostsEntry: $(KNOWN_HOSTS_ENTRY) - sshPublicKey: $(SSH_PUBLIC_KEY) - #sshPassphrase: # Optional - sshKeySecureFile: vott_id_rsa - env: - KNOWN_HOSTS_ENTRY: $(KNOWN_HOSTS_ENTRY) - SSH_PUBLIC_KEY: $(SSH_PUBLIC_KEY) # map to the right format (camelCase) that Azure credentials understand - - - task: Bash@3 - name: BumpNpmVersion - displayName: Bump NPM Prerelease Version - inputs: - targetType: filePath - filePath: ./scripts/version-bump-commit.sh - env: - SOURCE_BRANCH: $(Build.SourceBranch) - -- stage: package_build - dependsOn: version_bump_commit - jobs: - - template: azure-pipelines/templates/build-artifact.yml - parameters: - name: Linux - pool: - vmImage: ubuntu-16.04 - os: linux - artifact: vott*.snap - - - template: azure-pipelines/templates/build-artifact.yml - parameters: - name: Windows - pool: - vmImage: "windows-2019" - os: windows - artifact: vott*.exe - - - template: azure-pipelines/templates/build-artifact.yml - parameters: - name: MacOS - pool: - vmImage: macOS-10.15 - os: mac - artifact: vott*.dmg - -- stage: github_release - dependsOn: package_build - jobs: - - template: azure-pipelines/templates/create-github-release.yml - parameters: - GitHubConnection: 'GitHub connection' # defaults for any parameters that aren't specified - repositoryName: 'Microsoft/VoTT' - releaseNotesSource: input - addChangeLog: false - isPreRelease: true - isDraft: false diff --git a/release-pipeline.yml b/release-pipeline.yml deleted file mode 100644 index f030c0a102..0000000000 --- a/release-pipeline.yml +++ /dev/null @@ -1,34 +0,0 @@ -trigger: - - refs/tags/* # trigger on any tag -pr: none # disable CI build for PR - -jobs: -- job: Linux - condition: succeeded() - pool: - vmImage: ubuntu-16.04 - timeoutInMinutes: 60 # how long to run the job before automatically cancelling - steps: - - checkout: self # self represents the repo where the initial Pipelines YAML file was found - fetchDepth: 1 # the depth of commits to ask Git to fetch - - template: azure-pipelines/linux/artifact-build-linux.yml - -- job: MacOS - condition: succeeded() - pool: - vmImage: macOS-10.15 - timeoutInMinutes: 60 # how long to run the job before automatically cancelling - steps: - - checkout: self # self represents the repo where the initial Pipelines YAML file was found - fetchDepth: 1 # the depth of commits to ask Git to fetch - - template: azure-pipelines/mac/artifact-build-mac.yml - -- job: Windows - condition: succeeded() - pool: - vmImage: "windows-2019" - timeoutInMinutes: 60 # how long to run the job before automatically cancelling - steps: - - checkout: self # self represents the repo where the initial Pipelines YAML file was found - fetchDepth: 1 # the depth of commits to ask Git to fetch - - template: azure-pipelines/windows/artifact-build-windows.yml diff --git a/scripts/generate-report.sh b/scripts/generate-report.sh index eae1f7b03a..31e85dd4bf 100755 --- a/scripts/generate-report.sh +++ b/scripts/generate-report.sh @@ -49,8 +49,15 @@ echo "commit=${COMMIT_SHA}" # these are just needed for the reports; just install ad-hoc and don't save to package.json npm install es6-plato eslint-plugin-react command-line-args --no-save +echo +echo "------> Finish installing dependencies" + +echo +echo "------> Transpile TS to ES6" # we can't do complexity analysis on TypeScript directly; transpile to ES6 rm -rf ${ES6_SRC} tsc --noEmit false --outDir ${ES6_SRC} +echo +echo "------> Running complexity analasis ..." node ${BASEDIR}/complexity-analysis.js --src ${ES6_SRC} --output ${REPORT_DIR} --version ${VERSION} --commit ${COMMIT_SHA} diff --git a/scripts/git-pull-current-branch.sh b/scripts/git-pull-current-branch.sh new file mode 100755 index 0000000000..1d8f1c9c01 --- /dev/null +++ b/scripts/git-pull-current-branch.sh @@ -0,0 +1,10 @@ +#!/bin/bash +set -euo pipefail + +# Get full branch name excluding refs/head from the env var SOURCE_BRANCH +SOURCE_BRANCH_NAME=${SOURCE_BRANCH/refs\/heads\/} + +echo "SOURCE_BRANCH: ${SOURCE_BRANCH_NAME}" +git pull origin ${SOURCE_BRANCH_NAME} +git checkout ${SOURCE_BRANCH_NAME} +echo "Checked out branch: ${SOURCE_BRANCH_NAME}" diff --git a/scripts/version-bump-commit.sh b/scripts/version-bump-commit.sh old mode 100644 new mode 100755 index 86f7fdcd3e..ba9baf66f9 --- a/scripts/version-bump-commit.sh +++ b/scripts/version-bump-commit.sh @@ -1,12 +1,16 @@ #!/bin/bash set -euo pipefail -NPM_RELEASE_TYPE=${1-"prepatch --preid=preview"} +NPM_VERSION_TYPE=${1:-"prepatch --preid=preview"} +echo "Next version type: ----->$NPM_VERSION_TYPE<-----" + +PACKAGE_VERSION=$(node -pe "require('./package.json').version") +CURRENT_VERSION="v$PACKAGE_VERSION" # Get full branch name excluding refs/head from the env var SOURCE_BRANCH SOURCE_BRANCH_NAME=${SOURCE_BRANCH/refs\/heads\/} -# Configure git to commit as SLS Azure Functions Service Account +# Configure git to commit as VoTT Service Account echo "Configuring git to use deploy key..." git config --local user.email "vott@microsoft.com" git config --local user.name "Vott" @@ -16,13 +20,21 @@ git pull origin ${SOURCE_BRANCH_NAME} git checkout ${SOURCE_BRANCH_NAME} echo "Checked out branch: ${SOURCE_BRANCH_NAME}" -NPM_VERSION=`npm version ${NPM_RELEASE_TYPE} -m "release: Update ${NPM_RELEASE_TYPE} version to %s ***NO_CI***"` -echo "Set NPM version to: ${NPM_VERSION}" +## format: v2.2.0 +NEXT_VERSION=`npm version ${NPM_VERSION_TYPE} -m "release: Update ${NPM_VERSION_TYPE} version to %s ***NO_CI***"` +echo "Set next version to: ${NEXT_VERSION}" + +# There is currently no way to pass variables between stages, hence this workaround +echo +echo "##vso[task.setvariable variable=NEXT_VERSION]$NEXT_VERSION" +echo "##vso[task.setvariable variable=CURRENT_VERSION]$CURRENT_VERSION" +#### Push new tag SHA=`git rev-parse HEAD` -export GIT_SSH_COMMAND="ssh -vvv -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" +export GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git remote add authOrigin git@github.com:microsoft/VoTT.git git push authOrigin ${SOURCE_BRANCH_NAME} --tags -echo "Pushed new tag: ${NPM_VERSION} @ SHA: ${SHA:0:8}" +echo +echo "Pushed new tag: ${NEXT_VERSION} @ SHA: ${SHA:0:8}"