Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/microsoft/vscode.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoão Moreno <joao.moreno@microsoft.com>2021-11-20 20:01:39 +0300
committerGitHub <noreply@github.com>2021-11-20 20:01:39 +0300
commit6f2ad1994cb7bf8b4288fc52e2d6ea72aecd9b39 (patch)
tree1d5a88c42a8d6c3579b85cd4e628e74e89352c73
parent1d8839096bf7341f7d0ac6568177445cb6236c0f (diff)
More RBAC usage (#137579)
* ci: :construction_worker: remove secret references * inline web storage account * remove unused reference * inline storage accounts * formatting * formatting * drop ticino-storage-key, web-storage-key * remove leftovers * fix build * fix build * catch errors on all upload* scripts * bump gulp-azure-storage
-rw-r--r--build/azure-pipelines/darwin/product-build-darwin.yml21
-rw-r--r--build/azure-pipelines/distro-build.yml2
-rw-r--r--build/azure-pipelines/exploration-build.yml2
-rw-r--r--build/azure-pipelines/linux/product-build-linux.yml2
-rw-r--r--build/azure-pipelines/product-build.yml4
-rw-r--r--build/azure-pipelines/product-compile.yml18
-rw-r--r--build/azure-pipelines/product-publish.yml2
-rw-r--r--build/azure-pipelines/sdl-scan.yml396
-rw-r--r--build/azure-pipelines/upload-cdn.js45
-rw-r--r--build/azure-pipelines/upload-cdn.ts47
-rw-r--r--build/azure-pipelines/upload-configuration.js112
-rw-r--r--build/azure-pipelines/upload-configuration.ts132
-rw-r--r--build/azure-pipelines/upload-nlsmetadata.js147
-rw-r--r--build/azure-pipelines/upload-nlsmetadata.ts159
-rw-r--r--build/azure-pipelines/upload-sourcemaps.js33
-rw-r--r--build/azure-pipelines/upload-sourcemaps.ts38
-rw-r--r--build/azure-pipelines/web/product-build-web.yml31
-rw-r--r--build/azure-pipelines/win32/product-build-win32.yml2
-rw-r--r--build/gulpfile.vscode.js108
-rw-r--r--package.json2
-rw-r--r--yarn.lock306
21 files changed, 949 insertions, 660 deletions
diff --git a/build/azure-pipelines/darwin/product-build-darwin.yml b/build/azure-pipelines/darwin/product-build-darwin.yml
index 928bd234e0c..f309fc1dab8 100644
--- a/build/azure-pipelines/darwin/product-build-darwin.yml
+++ b/build/azure-pipelines/darwin/product-build-darwin.yml
@@ -8,7 +8,7 @@ steps:
inputs:
azureSubscription: "vscode-builds-subscription"
KeyVaultName: vscode
- SecretsFilter: 'github-distro-mixin-password,macos-developer-certificate,macos-developer-certificate-key,ticino-storage-key'
+ SecretsFilter: "github-distro-mixin-password,macos-developer-certificate,macos-developer-certificate-key"
- task: DownloadPipelineArtifact@2
inputs:
@@ -301,10 +301,25 @@ steps:
displayName: Publish web server archive
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), ne(variables['VSCODE_PUBLISH'], 'false'))
+ - task: AzureCLI@2
+ inputs:
+ azureSubscription: "vscode-builds-subscription"
+ scriptType: pscore
+ scriptLocation: inlineScript
+ addSpnToEnvironment: true
+ inlineScript: |
+ Write-Host "##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId"
+ Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_ID]$env:servicePrincipalId"
+ Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_SECRET;issecret=true]$env:servicePrincipalKey"
+
- script: |
- AZURE_STORAGE_ACCESS_KEY="$(ticino-storage-key)" \
+ set -e
+ AZURE_STORAGE_ACCOUNT="ticino" \
+ AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \
+ AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \
+ AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \
VSCODE_ARCH="$(VSCODE_ARCH)" \
- yarn gulp upload-vscode-configuration
+ node build/azure-pipelines/upload-configuration
displayName: Upload configuration (for Bing settings search)
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), ne(variables['VSCODE_PUBLISH'], 'false'))
continueOnError: true
diff --git a/build/azure-pipelines/distro-build.yml b/build/azure-pipelines/distro-build.yml
index 6031405fe37..53b62b47a4e 100644
--- a/build/azure-pipelines/distro-build.yml
+++ b/build/azure-pipelines/distro-build.yml
@@ -18,7 +18,7 @@ steps:
inputs:
azureSubscription: "vscode-builds-subscription"
KeyVaultName: vscode
- SecretsFilter: 'github-distro-mixin-password'
+ SecretsFilter: "github-distro-mixin-password"
- script: |
set -e
diff --git a/build/azure-pipelines/exploration-build.yml b/build/azure-pipelines/exploration-build.yml
index ca78aca17f4..5b6599d8dab 100644
--- a/build/azure-pipelines/exploration-build.yml
+++ b/build/azure-pipelines/exploration-build.yml
@@ -14,7 +14,7 @@ steps:
inputs:
azureSubscription: "vscode-builds-subscription"
KeyVaultName: vscode
- SecretsFilter: 'github-distro-mixin-password'
+ SecretsFilter: "github-distro-mixin-password"
- script: |
set -e
diff --git a/build/azure-pipelines/linux/product-build-linux.yml b/build/azure-pipelines/linux/product-build-linux.yml
index dc232cc0219..641be042f73 100644
--- a/build/azure-pipelines/linux/product-build-linux.yml
+++ b/build/azure-pipelines/linux/product-build-linux.yml
@@ -8,7 +8,7 @@ steps:
inputs:
azureSubscription: "vscode-builds-subscription"
KeyVaultName: vscode
- SecretsFilter: "github-distro-mixin-password,builds-docdb-key-readwrite,vscode-storage-key,ESRP-PKI,esrp-aad-username,esrp-aad-password"
+ SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password"
- task: DownloadPipelineArtifact@2
inputs:
diff --git a/build/azure-pipelines/product-build.yml b/build/azure-pipelines/product-build.yml
index e87939db37e..c0b619cab09 100644
--- a/build/azure-pipelines/product-build.yml
+++ b/build/azure-pipelines/product-build.yml
@@ -113,10 +113,6 @@ variables:
value: https://az764295.vo.msecnd.net
- name: AZURE_DOCUMENTDB_ENDPOINT
value: https://vscode.documents.azure.com:443/
- - name: AZURE_STORAGE_ACCOUNT
- value: ticino
- - name: AZURE_STORAGE_ACCOUNT_2
- value: vscode
- name: MOONCAKE_CDN_URL
value: https://vscode.cdn.azure.cn
- name: VSCODE_MIXIN_REPO
diff --git a/build/azure-pipelines/product-compile.yml b/build/azure-pipelines/product-compile.yml
index 709d8e39f49..88af1af2918 100644
--- a/build/azure-pipelines/product-compile.yml
+++ b/build/azure-pipelines/product-compile.yml
@@ -8,7 +8,7 @@ steps:
inputs:
azureSubscription: "vscode-builds-subscription"
KeyVaultName: vscode
- SecretsFilter: "github-distro-mixin-password,ticino-storage-key"
+ SecretsFilter: "github-distro-mixin-password"
- script: |
set -e
@@ -103,9 +103,23 @@ steps:
displayName: Compile test suites
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
+ - task: AzureCLI@2
+ inputs:
+ azureSubscription: "vscode-builds-subscription"
+ scriptType: pscore
+ scriptLocation: inlineScript
+ addSpnToEnvironment: true
+ inlineScript: |
+ Write-Host "##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId"
+ Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_ID]$env:servicePrincipalId"
+ Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_SECRET;issecret=true]$env:servicePrincipalKey"
+
- script: |
set -e
- AZURE_STORAGE_ACCESS_KEY="$(ticino-storage-key)" \
+ AZURE_STORAGE_ACCOUNT="ticino" \
+ AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \
+ AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \
+ AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \
node build/azure-pipelines/upload-sourcemaps
displayName: Upload sourcemaps
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
diff --git a/build/azure-pipelines/product-publish.yml b/build/azure-pipelines/product-publish.yml
index 44516763081..c43180ea0a3 100644
--- a/build/azure-pipelines/product-publish.yml
+++ b/build/azure-pipelines/product-publish.yml
@@ -8,7 +8,7 @@ steps:
inputs:
azureSubscription: "vscode-builds-subscription"
KeyVaultName: vscode
- SecretsFilter: "builds-docdb-key-readwrite,github-distro-mixin-password,ticino-storage-key,vscode-storage-key,vscode-mooncake-storage-key"
+ SecretsFilter: "github-distro-mixin-password"
- pwsh: |
. build/azure-pipelines/win32/exec.ps1
diff --git a/build/azure-pipelines/sdl-scan.yml b/build/azure-pipelines/sdl-scan.yml
index b1976140bd0..d1cd72b3d95 100644
--- a/build/azure-pipelines/sdl-scan.yml
+++ b/build/azure-pipelines/sdl-scan.yml
@@ -32,201 +32,201 @@ variables:
value: x64
stages:
-- stage: Windows
- condition: eq(variables.SCAN_WINDOWS, 'true')
- pool:
- vmImage: VS2017-Win2016
- jobs:
- - job: WindowsJob
- timeoutInMinutes: 0
- steps:
- - task: CredScan@3
- continueOnError: true
- inputs:
- scanFolder: '$(Build.SourcesDirectory)'
- outputFormat: 'pre'
- - task: NodeTool@0
- inputs:
- versionSpec: "14.x"
-
- - task: AzureKeyVault@1
- displayName: "Azure Key Vault: Get Secrets"
- inputs:
- azureSubscription: "vscode-builds-subscription"
- KeyVaultName: vscode
- SecretsFilter: "github-distro-mixin-password"
-
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
- "machine github.com`nlogin vscode`npassword $(github-distro-mixin-password)" | Out-File "$env:USERPROFILE\_netrc" -Encoding ASCII
-
- exec { git config user.email "vscode@microsoft.com" }
- exec { git config user.name "VSCode" }
- displayName: Prepare tooling
-
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
- exec { git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro") }
- displayName: Merge distro
-
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
- exec { npx https://aka.ms/enablesecurefeed standAlone }
- timeoutInMinutes: 5
- condition: and(succeeded(), eq(variables['ENABLE_TERRAPIN'], 'true'))
- displayName: Switch to Terrapin packages
-
- - task: Semmle@1
- inputs:
- sourceCodeDirectory: '$(Build.SourcesDirectory)'
- language: 'cpp'
- buildCommandsString: 'yarn --frozen-lockfile'
- querySuite: 'Required'
- timeout: '1800'
- ram: '16384'
- addProjectDirToScanningExclusionList: true
- env:
- npm_config_arch: "$(NPM_ARCH)"
- PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- GITHUB_TOKEN: "$(github-distro-mixin-password)"
- displayName: CodeQL
-
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- . build/azure-pipelines/win32/retry.ps1
- $ErrorActionPreference = "Stop"
- retry { exec { yarn --frozen-lockfile } }
- env:
- npm_config_arch: "$(NPM_ARCH)"
- PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- GITHUB_TOKEN: "$(github-distro-mixin-password)"
- CHILD_CONCURRENCY: 1
- displayName: Install dependencies
-
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
- exec { yarn gulp "vscode-symbols-win32-$(VSCODE_ARCH)" }
- displayName: Download Symbols
-
- - task: BinSkim@4
- inputs:
- InputType: 'Basic'
- Function: 'analyze'
- TargetPattern: 'guardianGlob'
- AnalyzeTargetGlob: '$(agent.builddirectory)\scanbin\**.dll;$(agent.builddirectory)\scanbin\**.exe;$(agent.builddirectory)\scanbin\**.node'
- AnalyzeLocalSymbolDirectories: '$(agent.builddirectory)\scanbin\VSCode-win32-$(VSCODE_ARCH)\pdb'
-
- - task: TSAUpload@2
- inputs:
- GdnPublishTsaOnboard: true
- GdnPublishTsaConfigFile: '$(Build.SourcesDirectory)\build\azure-pipelines\.gdntsa'
-
-- stage: Linux
- dependsOn: []
- condition: eq(variables.SCAN_LINUX, 'true')
- pool:
- vmImage: "Ubuntu-18.04"
- jobs:
- - job: LinuxJob
- steps:
- - task: CredScan@2
- inputs:
- toolMajorVersion: 'V2'
- - task: NodeTool@0
- inputs:
- versionSpec: "14.x"
-
- - task: AzureKeyVault@1
- displayName: "Azure Key Vault: Get Secrets"
- inputs:
- azureSubscription: "vscode-builds-subscription"
- KeyVaultName: vscode
- SecretsFilter: "github-distro-mixin-password"
-
- - script: |
- set -e
- cat << EOF > ~/.netrc
- machine github.com
- login vscode
- password $(github-distro-mixin-password)
- EOF
-
- git config user.email "vscode@microsoft.com"
- git config user.name "VSCode"
- displayName: Prepare tooling
-
- - script: |
- set -e
- git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro")
- displayName: Merge distro
-
- - script: |
- set -e
- npx https://aka.ms/enablesecurefeed standAlone
- timeoutInMinutes: 5
- condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), eq(variables['ENABLE_TERRAPIN'], 'true'))
- displayName: Switch to Terrapin packages
-
- - script: |
- set -e
- yarn --cwd build
- yarn --cwd build compile
- displayName: Compile build tools
-
- - script: |
- set -e
- export npm_config_arch=$(NPM_ARCH)
-
- if [ -z "$CC" ] || [ -z "$CXX" ]; then
- # Download clang based on chromium revision used by vscode
- curl -s https://raw.githubusercontent.com/chromium/chromium/91.0.4472.164/tools/clang/scripts/update.py | python - --output-dir=$PWD/.build/CR_Clang --host-os=linux
- # Download libcxx headers and objects from upstream electron releases
- DEBUG=libcxx-fetcher \
- VSCODE_LIBCXX_OBJECTS_DIR=$PWD/.build/libcxx-objects \
- VSCODE_LIBCXX_HEADERS_DIR=$PWD/.build/libcxx_headers \
- VSCODE_LIBCXXABI_HEADERS_DIR=$PWD/.build/libcxxabi_headers \
- VSCODE_ARCH="$(NPM_ARCH)" \
- node build/linux/libcxx-fetcher.js
- # Set compiler toolchain
- export CC=$PWD/.build/CR_Clang/bin/clang
- export CXX=$PWD/.build/CR_Clang/bin/clang++
- export CXXFLAGS="-nostdinc++ -D_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS -isystem$PWD/.build/libcxx_headers/include -isystem$PWD/.build/libcxxabi_headers/include -fPIC -flto=thin -fsplit-lto-unit"
- export LDFLAGS="-stdlib=libc++ -fuse-ld=lld -flto=thin -fsplit-lto-unit -L$PWD/.build/libcxx-objects -lc++abi"
- fi
-
- if [ "$VSCODE_ARCH" == "x64" ]; then
- export VSCODE_REMOTE_CC=$(which gcc-4.8)
- export VSCODE_REMOTE_CXX=$(which g++-4.8)
- fi
-
- for i in {1..3}; do # try 3 times, for Terrapin
- yarn --frozen-lockfile && break
- if [ $i -eq 3 ]; then
- echo "Yarn failed too many times" >&2
- exit 1
- fi
- echo "Yarn failed $i, trying again..."
- done
- env:
- PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- GITHUB_TOKEN: "$(github-distro-mixin-password)"
- displayName: Install dependencies
-
- - script: |
- set -e
- yarn gulp vscode-symbols-linux-$(VSCODE_ARCH)
- displayName: Build
-
- - task: BinSkim@3
- inputs:
- toolVersion: Latest
- InputType: CommandLine
- arguments: analyze $(agent.builddirectory)\scanbin\exe\*.* --recurse --local-symbol-directories $(agent.builddirectory)\scanbin\VSCode-linux-$(VSCODE_ARCH)\pdb
-
- - task: TSAUpload@2
- inputs:
- GdnPublishTsaConfigFile: '$(Build.SourceDirectory)\build\azure-pipelines\.gdntsa'
+ - stage: Windows
+ condition: eq(variables.SCAN_WINDOWS, 'true')
+ pool:
+ vmImage: VS2017-Win2016
+ jobs:
+ - job: WindowsJob
+ timeoutInMinutes: 0
+ steps:
+ - task: CredScan@3
+ continueOnError: true
+ inputs:
+ scanFolder: "$(Build.SourcesDirectory)"
+ outputFormat: "pre"
+ - task: NodeTool@0
+ inputs:
+ versionSpec: "14.x"
+
+ - task: AzureKeyVault@1
+ displayName: "Azure Key Vault: Get Secrets"
+ inputs:
+ azureSubscription: "vscode-builds-subscription"
+ KeyVaultName: vscode
+ SecretsFilter: "github-distro-mixin-password"
+
+ - powershell: |
+ . build/azure-pipelines/win32/exec.ps1
+ $ErrorActionPreference = "Stop"
+ "machine github.com`nlogin vscode`npassword $(github-distro-mixin-password)" | Out-File "$env:USERPROFILE\_netrc" -Encoding ASCII
+
+ exec { git config user.email "vscode@microsoft.com" }
+ exec { git config user.name "VSCode" }
+ displayName: Prepare tooling
+
+ - powershell: |
+ . build/azure-pipelines/win32/exec.ps1
+ $ErrorActionPreference = "Stop"
+ exec { git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro") }
+ displayName: Merge distro
+
+ - powershell: |
+ . build/azure-pipelines/win32/exec.ps1
+ $ErrorActionPreference = "Stop"
+ exec { npx https://aka.ms/enablesecurefeed standAlone }
+ timeoutInMinutes: 5
+ condition: and(succeeded(), eq(variables['ENABLE_TERRAPIN'], 'true'))
+ displayName: Switch to Terrapin packages
+
+ - task: Semmle@1
+ inputs:
+ sourceCodeDirectory: "$(Build.SourcesDirectory)"
+ language: "cpp"
+ buildCommandsString: "yarn --frozen-lockfile"
+ querySuite: "Required"
+ timeout: "1800"
+ ram: "16384"
+ addProjectDirToScanningExclusionList: true
+ env:
+ npm_config_arch: "$(NPM_ARCH)"
+ PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
+ displayName: CodeQL
+
+ - powershell: |
+ . build/azure-pipelines/win32/exec.ps1
+ . build/azure-pipelines/win32/retry.ps1
+ $ErrorActionPreference = "Stop"
+ retry { exec { yarn --frozen-lockfile } }
+ env:
+ npm_config_arch: "$(NPM_ARCH)"
+ PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
+ CHILD_CONCURRENCY: 1
+ displayName: Install dependencies
+
+ - powershell: |
+ . build/azure-pipelines/win32/exec.ps1
+ $ErrorActionPreference = "Stop"
+ exec { yarn gulp "vscode-symbols-win32-$(VSCODE_ARCH)" }
+ displayName: Download Symbols
+
+ - task: BinSkim@4
+ inputs:
+ InputType: "Basic"
+ Function: "analyze"
+ TargetPattern: "guardianGlob"
+ AnalyzeTargetGlob: '$(agent.builddirectory)\scanbin\**.dll;$(agent.builddirectory)\scanbin\**.exe;$(agent.builddirectory)\scanbin\**.node'
+ AnalyzeLocalSymbolDirectories: '$(agent.builddirectory)\scanbin\VSCode-win32-$(VSCODE_ARCH)\pdb'
+
+ - task: TSAUpload@2
+ inputs:
+ GdnPublishTsaOnboard: true
+ GdnPublishTsaConfigFile: '$(Build.SourcesDirectory)\build\azure-pipelines\.gdntsa'
+
+ - stage: Linux
+ dependsOn: []
+ condition: eq(variables.SCAN_LINUX, 'true')
+ pool:
+ vmImage: "Ubuntu-18.04"
+ jobs:
+ - job: LinuxJob
+ steps:
+ - task: CredScan@2
+ inputs:
+ toolMajorVersion: "V2"
+ - task: NodeTool@0
+ inputs:
+ versionSpec: "14.x"
+
+ - task: AzureKeyVault@1
+ displayName: "Azure Key Vault: Get Secrets"
+ inputs:
+ azureSubscription: "vscode-builds-subscription"
+ KeyVaultName: vscode
+ SecretsFilter: "github-distro-mixin-password"
+
+ - script: |
+ set -e
+ cat << EOF > ~/.netrc
+ machine github.com
+ login vscode
+ password $(github-distro-mixin-password)
+ EOF
+
+ git config user.email "vscode@microsoft.com"
+ git config user.name "VSCode"
+ displayName: Prepare tooling
+
+ - script: |
+ set -e
+ git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro")
+ displayName: Merge distro
+
+ - script: |
+ set -e
+ npx https://aka.ms/enablesecurefeed standAlone
+ timeoutInMinutes: 5
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), eq(variables['ENABLE_TERRAPIN'], 'true'))
+ displayName: Switch to Terrapin packages
+
+ - script: |
+ set -e
+ yarn --cwd build
+ yarn --cwd build compile
+ displayName: Compile build tools
+
+ - script: |
+ set -e
+ export npm_config_arch=$(NPM_ARCH)
+
+ if [ -z "$CC" ] || [ -z "$CXX" ]; then
+ # Download clang based on chromium revision used by vscode
+ curl -s https://raw.githubusercontent.com/chromium/chromium/91.0.4472.164/tools/clang/scripts/update.py | python - --output-dir=$PWD/.build/CR_Clang --host-os=linux
+ # Download libcxx headers and objects from upstream electron releases
+ DEBUG=libcxx-fetcher \
+ VSCODE_LIBCXX_OBJECTS_DIR=$PWD/.build/libcxx-objects \
+ VSCODE_LIBCXX_HEADERS_DIR=$PWD/.build/libcxx_headers \
+ VSCODE_LIBCXXABI_HEADERS_DIR=$PWD/.build/libcxxabi_headers \
+ VSCODE_ARCH="$(NPM_ARCH)" \
+ node build/linux/libcxx-fetcher.js
+ # Set compiler toolchain
+ export CC=$PWD/.build/CR_Clang/bin/clang
+ export CXX=$PWD/.build/CR_Clang/bin/clang++
+ export CXXFLAGS="-nostdinc++ -D_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS -isystem$PWD/.build/libcxx_headers/include -isystem$PWD/.build/libcxxabi_headers/include -fPIC -flto=thin -fsplit-lto-unit"
+ export LDFLAGS="-stdlib=libc++ -fuse-ld=lld -flto=thin -fsplit-lto-unit -L$PWD/.build/libcxx-objects -lc++abi"
+ fi
+
+ if [ "$VSCODE_ARCH" == "x64" ]; then
+ export VSCODE_REMOTE_CC=$(which gcc-4.8)
+ export VSCODE_REMOTE_CXX=$(which g++-4.8)
+ fi
+
+ for i in {1..3}; do # try 3 times, for Terrapin
+ yarn --frozen-lockfile && break
+ if [ $i -eq 3 ]; then
+ echo "Yarn failed too many times" >&2
+ exit 1
+ fi
+ echo "Yarn failed $i, trying again..."
+ done
+ env:
+ PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
+ displayName: Install dependencies
+
+ - script: |
+ set -e
+ yarn gulp vscode-symbols-linux-$(VSCODE_ARCH)
+ displayName: Build
+
+ - task: BinSkim@3
+ inputs:
+ toolVersion: Latest
+ InputType: CommandLine
+ arguments: analyze $(agent.builddirectory)\scanbin\exe\*.* --recurse --local-symbol-directories $(agent.builddirectory)\scanbin\VSCode-linux-$(VSCODE_ARCH)\pdb
+
+ - task: TSAUpload@2
+ inputs:
+ GdnPublishTsaConfigFile: '$(Build.SourceDirectory)\build\azure-pipelines\.gdntsa'
diff --git a/build/azure-pipelines/upload-cdn.js b/build/azure-pipelines/upload-cdn.js
index 16a072905a0..fe3817c9183 100644
--- a/build/azure-pipelines/upload-cdn.js
+++ b/build/azure-pipelines/upload-cdn.js
@@ -10,26 +10,35 @@ const vfs = require("vinyl-fs");
const util = require("../lib/util");
const filter = require("gulp-filter");
const gzip = require("gulp-gzip");
+const identity_1 = require("@azure/identity");
const azure = require('gulp-azure-storage');
const root = path.dirname(path.dirname(__dirname));
const commit = util.getVersion(root);
+const credential = new identity_1.ClientSecretCredential(process.env['AZURE_TENANT_ID'], process.env['AZURE_CLIENT_ID'], process.env['AZURE_CLIENT_SECRET']);
function main() {
- return vfs.src('**', { cwd: '../vscode-web', base: '../vscode-web', dot: true })
- .pipe(filter(f => !f.isDirectory()))
- .pipe(gzip({ append: false }))
- .pipe(es.through(function (data) {
- console.log('Uploading CDN file:', data.relative); // debug
- this.emit('data', data);
- }))
- .pipe(azure.upload({
- account: process.env.AZURE_STORAGE_ACCOUNT,
- key: process.env.AZURE_STORAGE_ACCESS_KEY,
- container: process.env.VSCODE_QUALITY,
- prefix: commit + '/',
- contentSettings: {
- contentEncoding: 'gzip',
- cacheControl: 'max-age=31536000, public'
- }
- }));
+ return new Promise((c, e) => {
+ vfs.src('**', { cwd: '../vscode-web', base: '../vscode-web', dot: true })
+ .pipe(filter(f => !f.isDirectory()))
+ .pipe(gzip({ append: false }))
+ .pipe(es.through(function (data) {
+ console.log('Uploading CDN file:', data.relative); // debug
+ this.emit('data', data);
+ }))
+ .pipe(azure.upload({
+ account: process.env.AZURE_STORAGE_ACCOUNT,
+ credential,
+ container: process.env.VSCODE_QUALITY,
+ prefix: commit + '/',
+ contentSettings: {
+ contentEncoding: 'gzip',
+ cacheControl: 'max-age=31536000, public'
+ }
+ }))
+ .on('end', () => c())
+ .on('error', (err) => e(err));
+ });
}
-main();
+main().catch(err => {
+ console.error(err);
+ process.exit(1);
+});
diff --git a/build/azure-pipelines/upload-cdn.ts b/build/azure-pipelines/upload-cdn.ts
index 71589033867..c35582017d7 100644
--- a/build/azure-pipelines/upload-cdn.ts
+++ b/build/azure-pipelines/upload-cdn.ts
@@ -12,29 +12,38 @@ import * as vfs from 'vinyl-fs';
import * as util from '../lib/util';
import * as filter from 'gulp-filter';
import * as gzip from 'gulp-gzip';
+import { ClientSecretCredential } from '@azure/identity';
const azure = require('gulp-azure-storage');
const root = path.dirname(path.dirname(__dirname));
const commit = util.getVersion(root);
+const credential = new ClientSecretCredential(process.env['AZURE_TENANT_ID']!, process.env['AZURE_CLIENT_ID']!, process.env['AZURE_CLIENT_SECRET']!);
-function main() {
- return vfs.src('**', { cwd: '../vscode-web', base: '../vscode-web', dot: true })
- .pipe(filter(f => !f.isDirectory()))
- .pipe(gzip({ append: false }))
- .pipe(es.through(function (data: Vinyl) {
- console.log('Uploading CDN file:', data.relative); // debug
- this.emit('data', data);
- }))
- .pipe(azure.upload({
- account: process.env.AZURE_STORAGE_ACCOUNT,
- key: process.env.AZURE_STORAGE_ACCESS_KEY,
- container: process.env.VSCODE_QUALITY,
- prefix: commit + '/',
- contentSettings: {
- contentEncoding: 'gzip',
- cacheControl: 'max-age=31536000, public'
- }
- }));
+function main(): Promise<void> {
+ return new Promise((c, e) => {
+ vfs.src('**', { cwd: '../vscode-web', base: '../vscode-web', dot: true })
+ .pipe(filter(f => !f.isDirectory()))
+ .pipe(gzip({ append: false }))
+ .pipe(es.through(function (data: Vinyl) {
+ console.log('Uploading CDN file:', data.relative); // debug
+ this.emit('data', data);
+ }))
+ .pipe(azure.upload({
+ account: process.env.AZURE_STORAGE_ACCOUNT,
+ credential,
+ container: process.env.VSCODE_QUALITY,
+ prefix: commit + '/',
+ contentSettings: {
+ contentEncoding: 'gzip',
+ cacheControl: 'max-age=31536000, public'
+ }
+ }))
+ .on('end', () => c())
+ .on('error', (err: any) => e(err));
+ });
}
-main();
+main().catch(err => {
+ console.error(err);
+ process.exit(1);
+});
diff --git a/build/azure-pipelines/upload-configuration.js b/build/azure-pipelines/upload-configuration.js
new file mode 100644
index 00000000000..689d99fdae0
--- /dev/null
+++ b/build/azure-pipelines/upload-configuration.js
@@ -0,0 +1,112 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+'use strict';
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getSettingsSearchBuildId = exports.shouldSetupSettingsSearch = void 0;
+const path = require("path");
+const os = require("os");
+const cp = require("child_process");
+const vfs = require("vinyl-fs");
+const util = require("../lib/util");
+const identity_1 = require("@azure/identity");
+const azure = require('gulp-azure-storage');
+const packageJson = require("../../package.json");
+const root = path.dirname(path.dirname(__dirname));
+const commit = util.getVersion(root);
+function generateVSCodeConfigurationTask() {
+ return new Promise((resolve, reject) => {
+ const buildDir = process.env['AGENT_BUILDDIRECTORY'];
+ if (!buildDir) {
+ return reject(new Error('$AGENT_BUILDDIRECTORY not set'));
+ }
+ if (!shouldSetupSettingsSearch()) {
+ console.log(`Only runs on main and release branches, not ${process.env.BUILD_SOURCEBRANCH}`);
+ return resolve(undefined);
+ }
+ if (process.env.VSCODE_QUALITY !== 'insider' && process.env.VSCODE_QUALITY !== 'stable') {
+ console.log(`Only runs on insider and stable qualities, not ${process.env.VSCODE_QUALITY}`);
+ return resolve(undefined);
+ }
+ const result = path.join(os.tmpdir(), 'configuration.json');
+ const userDataDir = path.join(os.tmpdir(), 'tmpuserdata');
+ const extensionsDir = path.join(os.tmpdir(), 'tmpextdir');
+ const arch = process.env['VSCODE_ARCH'];
+ const appRoot = path.join(buildDir, `VSCode-darwin-${arch}`);
+ const appName = process.env.VSCODE_QUALITY === 'insider' ? 'Visual\\ Studio\\ Code\\ -\\ Insiders.app' : 'Visual\\ Studio\\ Code.app';
+ const appPath = path.join(appRoot, appName, 'Contents', 'Resources', 'app', 'bin', 'code');
+ const codeProc = cp.exec(`${appPath} --export-default-configuration='${result}' --wait --user-data-dir='${userDataDir}' --extensions-dir='${extensionsDir}'`, (err, stdout, stderr) => {
+ clearTimeout(timer);
+ if (err) {
+ console.log(`err: ${err} ${err.message} ${err.toString()}`);
+ reject(err);
+ }
+ if (stdout) {
+ console.log(`stdout: ${stdout}`);
+ }
+ if (stderr) {
+ console.log(`stderr: ${stderr}`);
+ }
+ resolve(result);
+ });
+ const timer = setTimeout(() => {
+ codeProc.kill();
+ reject(new Error('export-default-configuration process timed out'));
+ }, 12 * 1000);
+ codeProc.on('error', err => {
+ clearTimeout(timer);
+ reject(err);
+ });
+ });
+}
+function shouldSetupSettingsSearch() {
+ const branch = process.env.BUILD_SOURCEBRANCH;
+ return !!(branch && (/\/main$/.test(branch) || branch.indexOf('/release/') >= 0));
+}
+exports.shouldSetupSettingsSearch = shouldSetupSettingsSearch;
+function getSettingsSearchBuildId(packageJson) {
+ try {
+ const branch = process.env.BUILD_SOURCEBRANCH;
+ const branchId = branch.indexOf('/release/') >= 0 ? 0 :
+ /\/main$/.test(branch) ? 1 :
+ 2; // Some unexpected branch
+ const out = cp.execSync(`git rev-list HEAD --count`);
+ const count = parseInt(out.toString());
+ // <version number><commit count><branchId (avoid unlikely conflicts)>
+ // 1.25.1, 1,234,567 commits, main = 1250112345671
+ return util.versionStringToNumber(packageJson.version) * 1e8 + count * 10 + branchId;
+ }
+ catch (e) {
+ throw new Error('Could not determine build number: ' + e.toString());
+ }
+}
+exports.getSettingsSearchBuildId = getSettingsSearchBuildId;
+async function main() {
+ const configPath = await generateVSCodeConfigurationTask();
+ if (!configPath) {
+ return;
+ }
+ const settingsSearchBuildId = getSettingsSearchBuildId(packageJson);
+ if (!settingsSearchBuildId) {
+ throw new Error('Failed to compute build number');
+ }
+ const credential = new identity_1.ClientSecretCredential(process.env['AZURE_TENANT_ID'], process.env['AZURE_CLIENT_ID'], process.env['AZURE_CLIENT_SECRET']);
+ return new Promise((c, e) => {
+ vfs.src(configPath)
+ .pipe(azure.upload({
+ account: process.env.AZURE_STORAGE_ACCOUNT,
+ credential,
+ container: 'configuration',
+ prefix: `${settingsSearchBuildId}/${commit}/`
+ }))
+ .on('end', () => c())
+ .on('error', (err) => e(err));
+ });
+}
+if (require.main === module) {
+ main().catch(err => {
+ console.error(err);
+ process.exit(1);
+ });
+}
diff --git a/build/azure-pipelines/upload-configuration.ts b/build/azure-pipelines/upload-configuration.ts
new file mode 100644
index 00000000000..3acc337e749
--- /dev/null
+++ b/build/azure-pipelines/upload-configuration.ts
@@ -0,0 +1,132 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+'use strict';
+
+import * as path from 'path';
+import * as os from 'os';
+import * as cp from 'child_process';
+import * as vfs from 'vinyl-fs';
+import * as util from '../lib/util';
+import { ClientSecretCredential } from '@azure/identity';
+const azure = require('gulp-azure-storage');
+import * as packageJson from '../../package.json';
+
+const root = path.dirname(path.dirname(__dirname));
+const commit = util.getVersion(root);
+
+function generateVSCodeConfigurationTask(): Promise<string | undefined> {
+ return new Promise((resolve, reject) => {
+ const buildDir = process.env['AGENT_BUILDDIRECTORY'];
+ if (!buildDir) {
+ return reject(new Error('$AGENT_BUILDDIRECTORY not set'));
+ }
+
+ if (!shouldSetupSettingsSearch()) {
+ console.log(`Only runs on main and release branches, not ${process.env.BUILD_SOURCEBRANCH}`);
+ return resolve(undefined);
+ }
+
+ if (process.env.VSCODE_QUALITY !== 'insider' && process.env.VSCODE_QUALITY !== 'stable') {
+ console.log(`Only runs on insider and stable qualities, not ${process.env.VSCODE_QUALITY}`);
+ return resolve(undefined);
+ }
+
+ const result = path.join(os.tmpdir(), 'configuration.json');
+ const userDataDir = path.join(os.tmpdir(), 'tmpuserdata');
+ const extensionsDir = path.join(os.tmpdir(), 'tmpextdir');
+ const arch = process.env['VSCODE_ARCH'];
+ const appRoot = path.join(buildDir, `VSCode-darwin-${arch}`);
+ const appName = process.env.VSCODE_QUALITY === 'insider' ? 'Visual\\ Studio\\ Code\\ -\\ Insiders.app' : 'Visual\\ Studio\\ Code.app';
+ const appPath = path.join(appRoot, appName, 'Contents', 'Resources', 'app', 'bin', 'code');
+ const codeProc = cp.exec(
+ `${appPath} --export-default-configuration='${result}' --wait --user-data-dir='${userDataDir}' --extensions-dir='${extensionsDir}'`,
+ (err, stdout, stderr) => {
+ clearTimeout(timer);
+ if (err) {
+ console.log(`err: ${err} ${err.message} ${err.toString()}`);
+ reject(err);
+ }
+
+ if (stdout) {
+ console.log(`stdout: ${stdout}`);
+ }
+
+ if (stderr) {
+ console.log(`stderr: ${stderr}`);
+ }
+
+ resolve(result);
+ }
+ );
+ const timer = setTimeout(() => {
+ codeProc.kill();
+ reject(new Error('export-default-configuration process timed out'));
+ }, 12 * 1000);
+
+ codeProc.on('error', err => {
+ clearTimeout(timer);
+ reject(err);
+ });
+ });
+}
+
+export function shouldSetupSettingsSearch(): boolean {
+ const branch = process.env.BUILD_SOURCEBRANCH;
+ return !!(branch && (/\/main$/.test(branch) || branch.indexOf('/release/') >= 0));
+}
+
+export function getSettingsSearchBuildId(packageJson: { version: string }) {
+ try {
+ const branch = process.env.BUILD_SOURCEBRANCH!;
+ const branchId = branch.indexOf('/release/') >= 0 ? 0 :
+ /\/main$/.test(branch) ? 1 :
+ 2; // Some unexpected branch
+
+ const out = cp.execSync(`git rev-list HEAD --count`);
+ const count = parseInt(out.toString());
+
+ // <version number><commit count><branchId (avoid unlikely conflicts)>
+ // 1.25.1, 1,234,567 commits, main = 1250112345671
+ return util.versionStringToNumber(packageJson.version) * 1e8 + count * 10 + branchId;
+ } catch (e) {
+ throw new Error('Could not determine build number: ' + e.toString());
+ }
+}
+
+async function main(): Promise<void> {
+ const configPath = await generateVSCodeConfigurationTask();
+
+ if (!configPath) {
+ return;
+ }
+
+ const settingsSearchBuildId = getSettingsSearchBuildId(packageJson);
+
+ if (!settingsSearchBuildId) {
+ throw new Error('Failed to compute build number');
+ }
+
+ const credential = new ClientSecretCredential(process.env['AZURE_TENANT_ID']!, process.env['AZURE_CLIENT_ID']!, process.env['AZURE_CLIENT_SECRET']!);
+
+ return new Promise((c, e) => {
+ vfs.src(configPath)
+ .pipe(azure.upload({
+ account: process.env.AZURE_STORAGE_ACCOUNT,
+ credential,
+ container: 'configuration',
+ prefix: `${settingsSearchBuildId}/${commit}/`
+ }))
+ .on('end', () => c())
+ .on('error', (err: any) => e(err));
+ });
+}
+
+if (require.main === module) {
+ main().catch(err => {
+ console.error(err);
+ process.exit(1);
+ });
+}
diff --git a/build/azure-pipelines/upload-nlsmetadata.js b/build/azure-pipelines/upload-nlsmetadata.js
index 27c9438187f..a09d569f7f6 100644
--- a/build/azure-pipelines/upload-nlsmetadata.js
+++ b/build/azure-pipelines/upload-nlsmetadata.js
@@ -10,79 +10,88 @@ const vfs = require("vinyl-fs");
const util = require("../lib/util");
const merge = require("gulp-merge-json");
const gzip = require("gulp-gzip");
+const identity_1 = require("@azure/identity");
const azure = require('gulp-azure-storage');
const root = path.dirname(path.dirname(__dirname));
const commit = util.getVersion(root);
+const credential = new identity_1.ClientSecretCredential(process.env['AZURE_TENANT_ID'], process.env['AZURE_CLIENT_ID'], process.env['AZURE_CLIENT_SECRET']);
function main() {
- return es.merge(vfs.src('out-vscode-web-min/nls.metadata.json', { base: 'out-vscode-web-min' }), vfs.src('.build/extensions/**/nls.metadata.json', { base: '.build/extensions' }), vfs.src('.build/extensions/**/nls.metadata.header.json', { base: '.build/extensions' }), vfs.src('.build/extensions/**/package.nls.json', { base: '.build/extensions' }))
- .pipe(merge({
- fileName: 'combined.nls.metadata.json',
- jsonSpace: '',
- edit: (parsedJson, file) => {
- let key;
- if (file.base === 'out-vscode-web-min') {
- return { vscode: parsedJson };
- }
- // Handle extensions and follow the same structure as the Core nls file.
- switch (file.basename) {
- case 'package.nls.json':
- // put package.nls.json content in Core NlsMetadata format
- // language packs use the key "package" to specify that
- // translations are for the package.json file
- parsedJson = {
- messages: {
- package: Object.values(parsedJson)
- },
- keys: {
- package: Object.keys(parsedJson)
- },
- bundles: {
- main: ['package']
- }
- };
- break;
- case 'nls.metadata.header.json':
- parsedJson = { header: parsedJson };
- break;
- case 'nls.metadata.json':
- // put nls.metadata.json content in Core NlsMetadata format
- const modules = Object.keys(parsedJson);
- const json = {
- keys: {},
- messages: {},
- bundles: {
- main: []
+ return new Promise((c, e) => {
+ es.merge(vfs.src('out-vscode-web-min/nls.metadata.json', { base: 'out-vscode-web-min' }), vfs.src('.build/extensions/**/nls.metadata.json', { base: '.build/extensions' }), vfs.src('.build/extensions/**/nls.metadata.header.json', { base: '.build/extensions' }), vfs.src('.build/extensions/**/package.nls.json', { base: '.build/extensions' }))
+ .pipe(merge({
+ fileName: 'combined.nls.metadata.json',
+ jsonSpace: '',
+ edit: (parsedJson, file) => {
+ let key;
+ if (file.base === 'out-vscode-web-min') {
+ return { vscode: parsedJson };
+ }
+ // Handle extensions and follow the same structure as the Core nls file.
+ switch (file.basename) {
+ case 'package.nls.json':
+ // put package.nls.json content in Core NlsMetadata format
+ // language packs use the key "package" to specify that
+ // translations are for the package.json file
+ parsedJson = {
+ messages: {
+ package: Object.values(parsedJson)
+ },
+ keys: {
+ package: Object.keys(parsedJson)
+ },
+ bundles: {
+ main: ['package']
+ }
+ };
+ break;
+ case 'nls.metadata.header.json':
+ parsedJson = { header: parsedJson };
+ break;
+ case 'nls.metadata.json':
+ // put nls.metadata.json content in Core NlsMetadata format
+ const modules = Object.keys(parsedJson);
+ const json = {
+ keys: {},
+ messages: {},
+ bundles: {
+ main: []
+ }
+ };
+ for (const module of modules) {
+ json.messages[module] = parsedJson[module].messages;
+ json.keys[module] = parsedJson[module].keys;
+ json.bundles.main.push(module);
}
- };
- for (const module of modules) {
- json.messages[module] = parsedJson[module].messages;
- json.keys[module] = parsedJson[module].keys;
- json.bundles.main.push(module);
- }
- parsedJson = json;
- break;
+ parsedJson = json;
+ break;
+ }
+ key = 'vscode.' + file.relative.split('/')[0];
+ return { [key]: parsedJson };
+ },
+ }))
+ .pipe(gzip({ append: false }))
+ .pipe(vfs.dest('./nlsMetadata'))
+ .pipe(es.through(function (data) {
+ console.log(`Uploading ${data.path}`);
+ // trigger artifact upload
+ console.log(`##vso[artifact.upload containerfolder=nlsmetadata;artifactname=combined.nls.metadata.json]${data.path}`);
+ this.emit('data', data);
+ }))
+ .pipe(azure.upload({
+ account: process.env.AZURE_STORAGE_ACCOUNT,
+ credential,
+ container: 'nlsmetadata',
+ prefix: commit + '/',
+ contentSettings: {
+ contentEncoding: 'gzip',
+ cacheControl: 'max-age=31536000, public'
}
- key = 'vscode.' + file.relative.split('/')[0];
- return { [key]: parsedJson };
- },
- }))
- .pipe(gzip({ append: false }))
- .pipe(vfs.dest('./nlsMetadata'))
- .pipe(es.through(function (data) {
- console.log(`Uploading ${data.path}`);
- // trigger artifact upload
- console.log(`##vso[artifact.upload containerfolder=nlsmetadata;artifactname=combined.nls.metadata.json]${data.path}`);
- this.emit('data', data);
- }))
- .pipe(azure.upload({
- account: process.env.AZURE_STORAGE_ACCOUNT,
- key: process.env.AZURE_STORAGE_ACCESS_KEY,
- container: 'nlsmetadata',
- prefix: commit + '/',
- contentSettings: {
- contentEncoding: 'gzip',
- cacheControl: 'max-age=31536000, public'
- }
- }));
+ }))
+ .on('end', () => c())
+ .on('error', (err) => e(err));
+ });
}
-main();
+main().catch(err => {
+ console.error(err);
+ process.exit(1);
+});
diff --git a/build/azure-pipelines/upload-nlsmetadata.ts b/build/azure-pipelines/upload-nlsmetadata.ts
index 72a6701dddd..b3a19b218e3 100644
--- a/build/azure-pipelines/upload-nlsmetadata.ts
+++ b/build/azure-pipelines/upload-nlsmetadata.ts
@@ -12,10 +12,12 @@ import * as vfs from 'vinyl-fs';
import * as util from '../lib/util';
import * as merge from 'gulp-merge-json';
import * as gzip from 'gulp-gzip';
+import { ClientSecretCredential } from '@azure/identity';
const azure = require('gulp-azure-storage');
const root = path.dirname(path.dirname(__dirname));
const commit = util.getVersion(root);
+const credential = new ClientSecretCredential(process.env['AZURE_TENANT_ID']!, process.env['AZURE_CLIENT_ID']!, process.env['AZURE_CLIENT_SECRET']!);
interface NlsMetadata {
keys: { [module: string]: string },
@@ -23,85 +25,94 @@ interface NlsMetadata {
bundles: { [bundle: string]: string[] },
}
-function main() {
- return es.merge(
- vfs.src('out-vscode-web-min/nls.metadata.json', { base: 'out-vscode-web-min' }),
- vfs.src('.build/extensions/**/nls.metadata.json', { base: '.build/extensions' }),
- vfs.src('.build/extensions/**/nls.metadata.header.json', { base: '.build/extensions' }),
- vfs.src('.build/extensions/**/package.nls.json', { base: '.build/extensions' }))
- .pipe(merge({
- fileName: 'combined.nls.metadata.json',
- jsonSpace: '',
- edit: (parsedJson, file) => {
- let key;
- if (file.base === 'out-vscode-web-min') {
- return { vscode: parsedJson };
- }
+function main(): Promise<void> {
+ return new Promise((c, e) => {
- // Handle extensions and follow the same structure as the Core nls file.
- switch (file.basename) {
- case 'package.nls.json':
- // put package.nls.json content in Core NlsMetadata format
- // language packs use the key "package" to specify that
- // translations are for the package.json file
- parsedJson = {
- messages: {
- package: Object.values(parsedJson)
- },
- keys: {
- package: Object.keys(parsedJson)
- },
- bundles: {
- main: ['package']
- }
- };
- break;
+ es.merge(
+ vfs.src('out-vscode-web-min/nls.metadata.json', { base: 'out-vscode-web-min' }),
+ vfs.src('.build/extensions/**/nls.metadata.json', { base: '.build/extensions' }),
+ vfs.src('.build/extensions/**/nls.metadata.header.json', { base: '.build/extensions' }),
+ vfs.src('.build/extensions/**/package.nls.json', { base: '.build/extensions' }))
+ .pipe(merge({
+ fileName: 'combined.nls.metadata.json',
+ jsonSpace: '',
+ edit: (parsedJson, file) => {
+ let key;
+ if (file.base === 'out-vscode-web-min') {
+ return { vscode: parsedJson };
+ }
- case 'nls.metadata.header.json':
- parsedJson = { header: parsedJson };
- break;
+ // Handle extensions and follow the same structure as the Core nls file.
+ switch (file.basename) {
+ case 'package.nls.json':
+ // put package.nls.json content in Core NlsMetadata format
+ // language packs use the key "package" to specify that
+ // translations are for the package.json file
+ parsedJson = {
+ messages: {
+ package: Object.values(parsedJson)
+ },
+ keys: {
+ package: Object.keys(parsedJson)
+ },
+ bundles: {
+ main: ['package']
+ }
+ };
+ break;
- case 'nls.metadata.json':
- // put nls.metadata.json content in Core NlsMetadata format
- const modules = Object.keys(parsedJson);
+ case 'nls.metadata.header.json':
+ parsedJson = { header: parsedJson };
+ break;
- const json: NlsMetadata = {
- keys: {},
- messages: {},
- bundles: {
- main: []
+ case 'nls.metadata.json':
+ // put nls.metadata.json content in Core NlsMetadata format
+ const modules = Object.keys(parsedJson);
+
+ const json: NlsMetadata = {
+ keys: {},
+ messages: {},
+ bundles: {
+ main: []
+ }
+ };
+ for (const module of modules) {
+ json.messages[module] = parsedJson[module].messages;
+ json.keys[module] = parsedJson[module].keys;
+ json.bundles.main.push(module);
}
- };
- for (const module of modules) {
- json.messages[module] = parsedJson[module].messages;
- json.keys[module] = parsedJson[module].keys;
- json.bundles.main.push(module);
- }
- parsedJson = json;
- break;
+ parsedJson = json;
+ break;
+ }
+ key = 'vscode.' + file.relative.split('/')[0];
+ return { [key]: parsedJson };
+ },
+ }))
+ .pipe(gzip({ append: false }))
+ .pipe(vfs.dest('./nlsMetadata'))
+ .pipe(es.through(function (data: Vinyl) {
+ console.log(`Uploading ${data.path}`);
+ // trigger artifact upload
+ console.log(`##vso[artifact.upload containerfolder=nlsmetadata;artifactname=combined.nls.metadata.json]${data.path}`);
+ this.emit('data', data);
+ }))
+ .pipe(azure.upload({
+ account: process.env.AZURE_STORAGE_ACCOUNT,
+ credential,
+ container: 'nlsmetadata',
+ prefix: commit + '/',
+ contentSettings: {
+ contentEncoding: 'gzip',
+ cacheControl: 'max-age=31536000, public'
}
- key = 'vscode.' + file.relative.split('/')[0];
- return { [key]: parsedJson };
- },
- }))
- .pipe(gzip({ append: false }))
- .pipe(vfs.dest('./nlsMetadata'))
- .pipe(es.through(function (data: Vinyl) {
- console.log(`Uploading ${data.path}`);
- // trigger artifact upload
- console.log(`##vso[artifact.upload containerfolder=nlsmetadata;artifactname=combined.nls.metadata.json]${data.path}`);
- this.emit('data', data);
- }))
- .pipe(azure.upload({
- account: process.env.AZURE_STORAGE_ACCOUNT,
- key: process.env.AZURE_STORAGE_ACCESS_KEY,
- container: 'nlsmetadata',
- prefix: commit + '/',
- contentSettings: {
- contentEncoding: 'gzip',
- cacheControl: 'max-age=31536000, public'
- }
- }));
+ }))
+ .on('end', () => c())
+ .on('error', (err: any) => e(err));
+ });
}
-main();
+main().catch(err => {
+ console.error(err);
+ process.exit(1);
+});
+
diff --git a/build/azure-pipelines/upload-sourcemaps.js b/build/azure-pipelines/upload-sourcemaps.js
index b2a886f6c7c..4edcd2ccd70 100644
--- a/build/azure-pipelines/upload-sourcemaps.js
+++ b/build/azure-pipelines/upload-sourcemaps.js
@@ -10,9 +10,11 @@ const vfs = require("vinyl-fs");
const util = require("../lib/util");
// @ts-ignore
const deps = require("../lib/dependencies");
+const identity_1 = require("@azure/identity");
const azure = require('gulp-azure-storage');
const root = path.dirname(path.dirname(__dirname));
const commit = util.getVersion(root);
+const credential = new identity_1.ClientSecretCredential(process.env['AZURE_TENANT_ID'], process.env['AZURE_CLIENT_ID'], process.env['AZURE_CLIENT_SECRET']);
// optionally allow to pass in explicit base/maps to upload
const [, , base, maps] = process.argv;
function src(base, maps = `${base}/**/*.map`) {
@@ -40,16 +42,23 @@ function main() {
else {
sources.push(src(base, maps));
}
- return es.merge(...sources)
- .pipe(es.through(function (data) {
- console.log('Uploading Sourcemap', data.relative); // debug
- this.emit('data', data);
- }))
- .pipe(azure.upload({
- account: process.env.AZURE_STORAGE_ACCOUNT,
- key: process.env.AZURE_STORAGE_ACCESS_KEY,
- container: 'sourcemaps',
- prefix: commit + '/'
- }));
+ return new Promise((c, e) => {
+ es.merge(...sources)
+ .pipe(es.through(function (data) {
+ console.log('Uploading Sourcemap', data.relative); // debug
+ this.emit('data', data);
+ }))
+ .pipe(azure.upload({
+ account: process.env.AZURE_STORAGE_ACCOUNT,
+ credential,
+ container: 'sourcemaps',
+ prefix: commit + '/'
+ }))
+ .on('end', () => c())
+ .on('error', (err) => e(err));
+ });
}
-main();
+main().catch(err => {
+ console.error(err);
+ process.exit(1);
+});
diff --git a/build/azure-pipelines/upload-sourcemaps.ts b/build/azure-pipelines/upload-sourcemaps.ts
index 769e224e6f7..f065ff2cf38 100644
--- a/build/azure-pipelines/upload-sourcemaps.ts
+++ b/build/azure-pipelines/upload-sourcemaps.ts
@@ -12,10 +12,12 @@ import * as vfs from 'vinyl-fs';
import * as util from '../lib/util';
// @ts-ignore
import * as deps from '../lib/dependencies';
+import { ClientSecretCredential } from '@azure/identity';
const azure = require('gulp-azure-storage');
const root = path.dirname(path.dirname(__dirname));
const commit = util.getVersion(root);
+const credential = new ClientSecretCredential(process.env['AZURE_TENANT_ID']!, process.env['AZURE_CLIENT_ID']!, process.env['AZURE_CLIENT_SECRET']!);
// optionally allow to pass in explicit base/maps to upload
const [, , base, maps] = process.argv;
@@ -28,8 +30,8 @@ function src(base: string, maps = `${base}/**/*.map`) {
}));
}
-function main() {
- const sources = [];
+function main(): Promise<void> {
+ const sources: any[] = [];
// vscode client maps (default)
if (!base) {
@@ -51,17 +53,25 @@ function main() {
sources.push(src(base, maps));
}
- return es.merge(...sources)
- .pipe(es.through(function (data: Vinyl) {
- console.log('Uploading Sourcemap', data.relative); // debug
- this.emit('data', data);
- }))
- .pipe(azure.upload({
- account: process.env.AZURE_STORAGE_ACCOUNT,
- key: process.env.AZURE_STORAGE_ACCESS_KEY,
- container: 'sourcemaps',
- prefix: commit + '/'
- }));
+ return new Promise((c, e) => {
+ es.merge(...sources)
+ .pipe(es.through(function (data: Vinyl) {
+ console.log('Uploading Sourcemap', data.relative); // debug
+ this.emit('data', data);
+ }))
+ .pipe(azure.upload({
+ account: process.env.AZURE_STORAGE_ACCOUNT,
+ credential,
+ container: 'sourcemaps',
+ prefix: commit + '/'
+ }))
+ .on('end', () => c())
+ .on('error', (err: any) => e(err));
+ });
}
-main();
+main().catch(err => {
+ console.error(err);
+ process.exit(1);
+});
+
diff --git a/build/azure-pipelines/web/product-build-web.yml b/build/azure-pipelines/web/product-build-web.yml
index c12cdf063bf..2a467124141 100644
--- a/build/azure-pipelines/web/product-build-web.yml
+++ b/build/azure-pipelines/web/product-build-web.yml
@@ -8,7 +8,7 @@ steps:
inputs:
azureSubscription: "vscode-builds-subscription"
KeyVaultName: vscode
- SecretsFilter: "github-distro-mixin-password,web-storage-account,web-storage-key,ticino-storage-key"
+ SecretsFilter: "github-distro-mixin-password"
- task: DownloadPipelineArtifact@2
inputs:
@@ -99,11 +99,24 @@ steps:
yarn gulp vscode-web-min-ci
displayName: Build
+ - task: AzureCLI@2
+ inputs:
+ azureSubscription: "vscode-builds-subscription"
+ scriptType: pscore
+ scriptLocation: inlineScript
+ addSpnToEnvironment: true
+ inlineScript: |
+ Write-Host "##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId"
+ Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_ID]$env:servicePrincipalId"
+ Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_SECRET;issecret=true]$env:servicePrincipalKey"
+
- script: |
set -e
- AZURE_STORAGE_ACCOUNT="$(web-storage-account)" \
- AZURE_STORAGE_ACCESS_KEY="$(web-storage-key)" \
- node build/azure-pipelines/upload-cdn.js
+ AZURE_STORAGE_ACCOUNT="vscodeweb" \
+ AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \
+ AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \
+ AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \
+ node build/azure-pipelines/upload-cdn
displayName: Upload to CDN
# upload only the workbench.web.api.js source maps because
@@ -111,13 +124,19 @@ steps:
# general task to upload source maps has already been run
- script: |
set -e
- AZURE_STORAGE_ACCESS_KEY="$(ticino-storage-key)" \
+ AZURE_STORAGE_ACCOUNT="ticino" \
+ AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \
+ AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \
+ AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \
node build/azure-pipelines/upload-sourcemaps out-vscode-web-min out-vscode-web-min/vs/workbench/workbench.web.api.js.map
displayName: Upload sourcemaps (Web)
- script: |
set -e
- AZURE_STORAGE_ACCESS_KEY="$(ticino-storage-key)" \
+ AZURE_STORAGE_ACCOUNT="ticino" \
+ AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \
+ AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \
+ AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \
node build/azure-pipelines/upload-nlsmetadata
displayName: Upload NLS Metadata
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
diff --git a/build/azure-pipelines/win32/product-build-win32.yml b/build/azure-pipelines/win32/product-build-win32.yml
index f74a431c522..6ff2da9724a 100644
--- a/build/azure-pipelines/win32/product-build-win32.yml
+++ b/build/azure-pipelines/win32/product-build-win32.yml
@@ -13,7 +13,7 @@ steps:
inputs:
azureSubscription: "vscode-builds-subscription"
KeyVaultName: vscode
- SecretsFilter: "github-distro-mixin-password,vscode-storage-key,builds-docdb-key-readwrite,ESRP-PKI,esrp-aad-username,esrp-aad-password"
+ SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password"
- task: DownloadPipelineArtifact@2
inputs:
diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
index e292abeda2c..250eb01bcdd 100644
--- a/build/gulpfile.vscode.js
+++ b/build/gulpfile.vscode.js
@@ -32,6 +32,7 @@ const createAsar = require('./lib/asar').createAsar;
const minimist = require('minimist');
const { compileBuildTask } = require('./gulpfile.compile');
const { compileExtensionsBuildTask } = require('./gulpfile.extensions');
+const { getSettingsSearchBuildId, shouldSetupSettingsSearch } = require('./azure-pipelines/upload-configuration');
// Build
const vscodeEntryPoints = _.flatten([
@@ -475,110 +476,3 @@ gulp.task('vscode-translations-import', function () {
.pipe(vfs.dest(`./build/win32/i18n`));
}));
});
-
-// This task is only run for the MacOS build
-const generateVSCodeConfigurationTask = task.define('generate-vscode-configuration', () => {
- return new Promise((resolve, reject) => {
- const buildDir = process.env['AGENT_BUILDDIRECTORY'];
- if (!buildDir) {
- return reject(new Error('$AGENT_BUILDDIRECTORY not set'));
- }
-
- if (process.env.VSCODE_QUALITY !== 'insider' && process.env.VSCODE_QUALITY !== 'stable') {
- return resolve();
- }
-
- const userDataDir = path.join(os.tmpdir(), 'tmpuserdata');
- const extensionsDir = path.join(os.tmpdir(), 'tmpextdir');
- const arch = process.env['VSCODE_ARCH'];
- const appRoot = path.join(buildDir, `VSCode-darwin-${arch}`);
- const appName = process.env.VSCODE_QUALITY === 'insider' ? 'Visual\\ Studio\\ Code\\ -\\ Insiders.app' : 'Visual\\ Studio\\ Code.app';
- const appPath = path.join(appRoot, appName, 'Contents', 'Resources', 'app', 'bin', 'code');
- const codeProc = cp.exec(
- `${appPath} --export-default-configuration='${allConfigDetailsPath}' --wait --user-data-dir='${userDataDir}' --extensions-dir='${extensionsDir}'`,
- (err, stdout, stderr) => {
- clearTimeout(timer);
- if (err) {
- console.log(`err: ${err} ${err.message} ${err.toString()}`);
- reject(err);
- }
-
- if (stdout) {
- console.log(`stdout: ${stdout}`);
- }
-
- if (stderr) {
- console.log(`stderr: ${stderr}`);
- }
-
- resolve();
- }
- );
- const timer = setTimeout(() => {
- codeProc.kill();
- reject(new Error('export-default-configuration process timed out'));
- }, 12 * 1000);
-
- codeProc.on('error', err => {
- clearTimeout(timer);
- reject(err);
- });
- });
-});
-
-const allConfigDetailsPath = path.join(os.tmpdir(), 'configuration.json');
-gulp.task(task.define(
- 'upload-vscode-configuration',
- task.series(
- generateVSCodeConfigurationTask,
- () => {
- const azure = require('gulp-azure-storage');
-
- if (!shouldSetupSettingsSearch()) {
- const branch = process.env.BUILD_SOURCEBRANCH;
- console.log(`Only runs on main and release branches, not ${branch}`);
- return;
- }
-
- if (!fs.existsSync(allConfigDetailsPath)) {
- throw new Error(`configuration file at ${allConfigDetailsPath} does not exist`);
- }
-
- const settingsSearchBuildId = getSettingsSearchBuildId(packageJson);
- if (!settingsSearchBuildId) {
- throw new Error('Failed to compute build number');
- }
-
- return gulp.src(allConfigDetailsPath)
- .pipe(azure.upload({
- account: process.env.AZURE_STORAGE_ACCOUNT,
- key: process.env.AZURE_STORAGE_ACCESS_KEY,
- container: 'configuration',
- prefix: `${settingsSearchBuildId}/${commit}/`
- }));
- }
- )
-));
-
-function shouldSetupSettingsSearch() {
- const branch = process.env.BUILD_SOURCEBRANCH;
- return branch && (/\/main$/.test(branch) || branch.indexOf('/release/') >= 0);
-}
-
-function getSettingsSearchBuildId(packageJson) {
- try {
- const branch = process.env.BUILD_SOURCEBRANCH;
- const branchId = branch.indexOf('/release/') >= 0 ? 0 :
- /\/main$/.test(branch) ? 1 :
- 2; // Some unexpected branch
-
- const out = cp.execSync(`git rev-list HEAD --count`);
- const count = parseInt(out.toString());
-
- // <version number><commit count><branchId (avoid unlikely conflicts)>
- // 1.25.1, 1,234,567 commits, main = 1250112345671
- return util.versionStringToNumber(packageJson.version) * 1e8 + count * 10 + branchId;
- } catch (e) {
- throw new Error('Could not determine build number: ' + e.toString());
- }
-}
diff --git a/package.json b/package.json
index fdb1efeca5a..736e2a4dead 100644
--- a/package.json
+++ b/package.json
@@ -141,7 +141,7 @@
"glob": "^5.0.13",
"gulp": "^4.0.0",
"gulp-atom-electron": "1.32.0",
- "gulp-azure-storage": "^0.11.1",
+ "gulp-azure-storage": "^0.12.1",
"gulp-bom": "^3.0.0",
"gulp-buffer": "0.0.2",
"gulp-concat": "^2.6.1",
diff --git a/yarn.lock b/yarn.lock
index b1568055bff..d1842821be2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7,6 +7,94 @@
resolved "https://registry.yarnpkg.com/7zip/-/7zip-0.0.6.tgz#9cafb171af82329490353b4816f03347aa150a30"
integrity sha1-nK+xca+CMpSQNTtIFvAzR6oVCjA=
+"@azure/abort-controller@^1.0.0":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-1.0.4.tgz#fd3c4d46c8ed67aace42498c8e2270960250eafd"
+ integrity sha512-lNUmDRVGpanCsiUN3NWxFTdwmdFI53xwhkTFfHDGTYk46ca7Ind3nanJc+U6Zj9Tv+9nTCWRBscWEW1DyKOpTw==
+ dependencies:
+ tslib "^2.0.0"
+
+"@azure/core-asynciterator-polyfill@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@azure/core-asynciterator-polyfill/-/core-asynciterator-polyfill-1.0.0.tgz#dcccebb88406e5c76e0e1d52e8cc4c43a68b3ee7"
+ integrity sha512-kmv8CGrPfN9SwMwrkiBK9VTQYxdFQEGe0BmQk+M8io56P9KNzpAxcWE/1fxJj7uouwN4kXF0BHW8DNlgx+wtCg==
+
+"@azure/core-auth@^1.3.0":
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.3.2.tgz#6a2c248576c26df365f6c7881ca04b7f6d08e3d0"
+ integrity sha512-7CU6DmCHIZp5ZPiZ9r3J17lTKMmYsm/zGvNkjArQwPkrLlZ1TZ+EUYfGgh2X31OLMVAQCTJZW4cXHJi02EbJnA==
+ dependencies:
+ "@azure/abort-controller" "^1.0.0"
+ tslib "^2.2.0"
+
+"@azure/core-http@^2.0.0":
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/@azure/core-http/-/core-http-2.2.2.tgz#573798f087d808d39aa71fd7c52b8d7b89f440da"
+ integrity sha512-V1DdoO9V/sFimKpdWoNBgsE+QUjQgpXYnxrTdUp5RyhsTJjvEVn/HKmTQXIHuLUUo6IyIWj+B+Dg4VaXse9dIA==
+ dependencies:
+ "@azure/abort-controller" "^1.0.0"
+ "@azure/core-asynciterator-polyfill" "^1.0.0"
+ "@azure/core-auth" "^1.3.0"
+ "@azure/core-tracing" "1.0.0-preview.13"
+ "@azure/logger" "^1.0.0"
+ "@types/node-fetch" "^2.5.0"
+ "@types/tunnel" "^0.0.3"
+ form-data "^4.0.0"
+ node-fetch "^2.6.0"
+ process "^0.11.10"
+ tough-cookie "^4.0.0"
+ tslib "^2.2.0"
+ tunnel "^0.0.6"
+ uuid "^8.3.0"
+ xml2js "^0.4.19"
+
+"@azure/core-lro@^2.2.0":
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/@azure/core-lro/-/core-lro-2.2.1.tgz#5527b41037c658d3aefc19d68633e51e53d6e6a3"
+ integrity sha512-HE6PBl+mlKa0eBsLwusHqAqjLc5n9ByxeDo3Hz4kF3B1hqHvRkBr4oMgoT6tX7Hc3q97KfDctDUon7EhvoeHPA==
+ dependencies:
+ "@azure/abort-controller" "^1.0.0"
+ "@azure/core-tracing" "1.0.0-preview.13"
+ "@azure/logger" "^1.0.0"
+ tslib "^2.2.0"
+
+"@azure/core-paging@^1.1.1":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@azure/core-paging/-/core-paging-1.2.0.tgz#3754da429e8687bdc3613c750e79a564582e802b"
+ integrity sha512-ZX1bCjm/MjKPCN6kQD/9GJErYSoKA8YWp6YWoo5EIzcTWlSBLXu3gNaBTUl8usGl+UShiKo7b4Gdy1NSTIlpZg==
+ dependencies:
+ "@azure/core-asynciterator-polyfill" "^1.0.0"
+ tslib "^2.2.0"
+
+"@azure/core-tracing@1.0.0-preview.13":
+ version "1.0.0-preview.13"
+ resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz#55883d40ae2042f6f1e12b17dd0c0d34c536d644"
+ integrity sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==
+ dependencies:
+ "@opentelemetry/api" "^1.0.1"
+ tslib "^2.2.0"
+
+"@azure/logger@^1.0.0":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.0.3.tgz#6e36704aa51be7d4a1bae24731ea580836293c96"
+ integrity sha512-aK4s3Xxjrx3daZr3VylxejK3vG5ExXck5WOHDJ8in/k9AqlfIyFMMT1uG7u8mNjX+QRILTIn0/Xgschfh/dQ9g==
+ dependencies:
+ tslib "^2.2.0"
+
+"@azure/storage-blob@^12.8.0":
+ version "12.8.0"
+ resolved "https://registry.yarnpkg.com/@azure/storage-blob/-/storage-blob-12.8.0.tgz#97b7ecc6c7b17bcbaf0281c79c16af6f512d6130"
+ integrity sha512-c8+Wz19xauW0bGkTCoqZH4dYfbtBniPiGiRQOn1ca6G5jsjr4azwaTk9gwjVY8r3vY2Taf95eivLzipfIfiS4A==
+ dependencies:
+ "@azure/abort-controller" "^1.0.0"
+ "@azure/core-http" "^2.0.0"
+ "@azure/core-lro" "^2.2.0"
+ "@azure/core-paging" "^1.1.1"
+ "@azure/core-tracing" "1.0.0-preview.13"
+ "@azure/logger" "^1.0.0"
+ events "^3.0.0"
+ tslib "^2.2.0"
+
"@babel/code-frame@^7.0.0":
version "7.12.11"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
@@ -417,6 +505,11 @@
dependencies:
"@octokit/openapi-types" "^10.2.2"
+"@opentelemetry/api@^1.0.1":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.0.3.tgz#13a12ae9e05c2a782f7b5e84c3cbfda4225eaf80"
+ integrity sha512-puWxACExDe9nxbBB3lOymQFrLYml2dVOrd7USiVRnSbgXE+KwBu+HxFvxrzfqsiSda9IWsXJG1ef7C1O2/GmKQ==
+
"@parcel/watcher@2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.2.tgz#46bef14584497147bad5247cfb41f80b24d24dfb"
@@ -629,6 +722,14 @@
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.0.tgz#3eb56d13a1de1d347ecb1957c6860c911704bc44"
integrity sha512-/Sge3BymXo4lKc31C8OINJgXLaw+7vL1/L1pGiBNpGrBiT8FQiaFpSYV0uhTaG4y78vcMBTMFsWaHDvuD+xGzQ==
+"@types/node-fetch@^2.5.0":
+ version "2.5.12"
+ resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.12.tgz#8a6f779b1d4e60b7a57fb6fd48d84fb545b9cc66"
+ integrity sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==
+ dependencies:
+ "@types/node" "*"
+ form-data "^3.0.0"
+
"@types/node@*":
version "4.2.22"
resolved "https://registry.yarnpkg.com/@types/node/-/node-4.2.22.tgz#cf488a0f6b4a9c245d09927f4f757ca278b9c8ce"
@@ -688,6 +789,13 @@
resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-1.0.6.tgz#569b8a08121d3203398290d602d84d73c8dcf5da"
integrity sha512-230RC8sFeHoT6sSUlRO6a8cAnclO06eeiq1QDfiv2FGCLWFvvERWgwIQD4FWqD9A69BN7Lzee4OXwoMVnnsWDw==
+"@types/tunnel@^0.0.3":
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/@types/tunnel/-/tunnel-0.0.3.tgz#f109e730b072b3136347561fc558c9358bb8c6e9"
+ integrity sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==
+ dependencies:
+ "@types/node" "*"
+
"@types/uglify-js@*":
version "3.0.3"
resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.0.3.tgz#801a5ca1dc642861f47c46d14b700ed2d610840b"
@@ -1657,23 +1765,6 @@ aws4@^1.8.0:
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
-azure-storage@^2.10.2:
- version "2.10.2"
- resolved "https://registry.yarnpkg.com/azure-storage/-/azure-storage-2.10.2.tgz#3bcabdbf10e72fd0990db81116e49023c4a675b6"
- integrity sha512-pOyGPya9+NDpAfm5YcFfklo57HfjDbYLXxs4lomPwvRxmb0Di/A+a+RkUmEFzaQ8S13CqxK40bRRB0sjj2ZQxA==
- dependencies:
- browserify-mime "~1.2.9"
- extend "^3.0.2"
- json-edm-parser "0.1.2"
- md5.js "1.3.4"
- readable-stream "~2.0.0"
- request "^2.86.0"
- underscore "~1.8.3"
- uuid "^3.0.0"
- validator "~9.4.1"
- xml2js "0.2.8"
- xmlbuilder "^9.0.7"
-
bach@^1.0.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880"
@@ -1883,11 +1974,6 @@ browserify-des@^1.0.0:
inherits "^2.0.1"
safe-buffer "^5.1.2"
-browserify-mime@~1.2.9:
- version "1.2.9"
- resolved "https://registry.yarnpkg.com/browserify-mime/-/browserify-mime-1.2.9.tgz#aeb1af28de6c0d7a6a2ce40adb68ff18422af31f"
- integrity sha1-rrGvKN5sDXpqLOQK22j/GEIq8x8=
-
browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
version "4.1.0"
resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d"
@@ -2478,7 +2564,7 @@ colorette@^1.2.1, colorette@^1.2.2:
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
-combined-stream@^1.0.6, combined-stream@~1.0.6:
+combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
version "1.0.8"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
@@ -4259,6 +4345,24 @@ forever-agent@~0.6.1:
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+form-data@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f"
+ integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
+form-data@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+ integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
form-data@~2.3.2:
version "2.3.3"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
@@ -4697,12 +4801,12 @@ gulp-atom-electron@1.32.0:
vinyl "^2.2.0"
vinyl-fs "^3.0.3"
-gulp-azure-storage@^0.11.1:
- version "0.11.1"
- resolved "https://registry.yarnpkg.com/gulp-azure-storage/-/gulp-azure-storage-0.11.1.tgz#0e5f5d0f789da11206f1e5a9311a6cf7107877d7"
- integrity sha512-csOwItwZV1P9GLsORVQy+CFwjYDdHNrBol89JlHdlhGx0fTgJBc1COTRZbjGRyRjgdUuVguo3YLl4ToJ10/SIQ==
+gulp-azure-storage@^0.12.1:
+ version "0.12.1"
+ resolved "https://registry.yarnpkg.com/gulp-azure-storage/-/gulp-azure-storage-0.12.1.tgz#be2be1268af7dea6fdf56045b3eb3f090335de4a"
+ integrity sha512-n/hx8bbGsqrcizruqDTX6zy2FUdkTDGAz04IdopNxNTZivZmizf8u9WLYJreUE6/qCnSJnyjS1HP82+mLk7rjg==
dependencies:
- azure-storage "^2.10.2"
+ "@azure/storage-blob" "^12.8.0"
delayed-stream "0.0.6"
event-stream "3.3.4"
mime "^1.3.4"
@@ -4961,7 +5065,7 @@ har-schema@^2.0.0:
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
-har-validator@~5.1.0, har-validator@~5.1.3:
+har-validator@~5.1.3:
version "5.1.5"
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
@@ -5950,13 +6054,6 @@ json-buffer@3.0.0:
resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=
-json-edm-parser@0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/json-edm-parser/-/json-edm-parser-0.1.2.tgz#1e60b0fef1bc0af67bc0d146dfdde5486cd615b4"
- integrity sha1-HmCw/vG8CvZ7wNFG393lSGzWFbQ=
- dependencies:
- jsonparse "~1.2.0"
-
json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
@@ -6010,11 +6107,6 @@ jsonfile@^4.0.0:
optionalDependencies:
graceful-fs "^4.1.6"
-jsonparse@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.2.0.tgz#5c0c5685107160e72fe7489bddea0b44c2bc67bd"
- integrity sha1-XAxWhRBxYOcv50ib3eoLRMK8Z70=
-
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
@@ -6397,14 +6489,6 @@ matcher@^3.0.0:
dependencies:
escape-string-regexp "^4.0.0"
-md5.js@1.3.4:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d"
- integrity sha1-6b296UogpawYsENA/Fdk1bCdkB0=
- dependencies:
- hash-base "^3.0.0"
- inherits "^2.0.1"
-
md5.js@^1.3.4:
version "1.3.5"
resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
@@ -6943,6 +7027,13 @@ node-addon-api@^4.2.0:
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.2.0.tgz#117cbb5a959dff0992e1c586ae0393573e4d2a87"
integrity sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==
+node-fetch@^2.6.0:
+ version "2.6.6"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89"
+ integrity sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==
+ dependencies:
+ whatwg-url "^5.0.0"
+
node-fetch@^2.6.1:
version "2.6.2"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.2.tgz#986996818b73785e47b1965cc34eb093a1d464d0"
@@ -8111,11 +8202,6 @@ process-nextick-args@^2.0.0, process-nextick-args@~2.0.0:
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-process-nextick-args@~1.0.6:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
- integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=
-
process@^0.11.10:
version "0.11.10"
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
@@ -8165,7 +8251,7 @@ pseudomap@^1.0.2:
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
-psl@^1.1.24, psl@^1.1.28:
+psl@^1.1.28, psl@^1.1.33:
version "1.8.0"
resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
@@ -8220,7 +8306,7 @@ punycode@1.3.2:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
-punycode@^1.2.4, punycode@^1.4.1:
+punycode@^1.2.4:
version "1.4.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
@@ -8383,18 +8469,6 @@ readable-stream@~1.0.17:
isarray "0.0.1"
string_decoder "~0.10.x"
-readable-stream@~2.0.0:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e"
- integrity sha1-j5A0HmilPMySh4jaz80Rs265t44=
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "~1.0.0"
- process-nextick-args "~1.0.6"
- string_decoder "~0.10.x"
- util-deprecate "~1.0.1"
-
readdirp@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
@@ -8534,32 +8608,6 @@ replacestream@^4.0.0:
tunnel-agent "^0.6.0"
uuid "^3.3.2"
-request@^2.86.0:
- version "2.88.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
- integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
- dependencies:
- aws-sign2 "~0.7.0"
- aws4 "^1.8.0"
- caseless "~0.12.0"
- combined-stream "~1.0.6"
- extend "~3.0.2"
- forever-agent "~0.6.1"
- form-data "~2.3.2"
- har-validator "~5.1.0"
- http-signature "~1.2.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.19"
- oauth-sign "~0.9.0"
- performance-now "^2.1.0"
- qs "~6.5.2"
- safe-buffer "^5.1.2"
- tough-cookie "~2.4.3"
- tunnel-agent "^0.6.0"
- uuid "^3.3.2"
-
requestretry@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/requestretry/-/requestretry-4.0.0.tgz#4e9e7280a7d8561bf33e9925264cf026e2be3e89"
@@ -8784,11 +8832,6 @@ safe-regex@^1.1.0:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-sax@0.5.x:
- version "0.5.8"
- resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1"
- integrity sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=
-
sax@>=0.6.0, sax@~1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
@@ -9885,13 +9928,14 @@ to-through@^2.0.0:
dependencies:
through2 "^2.0.3"
-tough-cookie@~2.4.3:
- version "2.4.3"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
- integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
+tough-cookie@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4"
+ integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==
dependencies:
- psl "^1.1.24"
- punycode "^1.4.1"
+ psl "^1.1.33"
+ punycode "^2.1.1"
+ universalify "^0.1.2"
tough-cookie@~2.5.0:
version "2.5.0"
@@ -9901,6 +9945,11 @@ tough-cookie@~2.5.0:
psl "^1.1.28"
punycode "^2.1.1"
+tr46@~0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+ integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
+
tree-kill@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
@@ -9949,6 +9998,11 @@ tslib@^1.9.0:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+tslib@^2.0.0, tslib@^2.2.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
+ integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
+
tsutils@^3.17.1:
version "3.17.1"
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759"
@@ -10063,11 +10117,6 @@ underscore@^1.12.1:
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e"
integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==
-underscore@~1.8.3:
- version "1.8.3"
- resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022"
- integrity sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=
-
undertaker-registry@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/undertaker-registry/-/undertaker-registry-1.0.1.tgz#5e4bda308e4a8a2ae584f9b9a4359a499825cc50"
@@ -10136,7 +10185,7 @@ universal-user-agent@^6.0.0:
resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee"
integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==
-universalify@^0.1.0:
+universalify@^0.1.0, universalify@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
@@ -10232,16 +10281,16 @@ util@^0.12.4:
safe-buffer "^5.1.2"
which-typed-array "^1.1.2"
-uuid@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
- integrity sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==
-
uuid@^3.3.2:
version "3.4.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+uuid@^8.3.0:
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
+ integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+
v8-compile-cache@^2.0.3:
version "2.2.0"
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132"
@@ -10274,11 +10323,6 @@ validate-npm-package-license@^3.0.1:
spdx-correct "^3.0.0"
spdx-expression-parse "^3.0.0"
-validator@~9.4.1:
- version "9.4.1"
- resolved "https://registry.yarnpkg.com/validator/-/validator-9.4.1.tgz#abf466d398b561cd243050112c6ff1de6cc12663"
- integrity sha512-YV5KjzvRmSyJ1ee/Dm5UED0G+1L4GZnLN3w6/T+zZm8scVua4sOhYKWTUrKa0H/tMiJyO9QLHMPN+9mB/aMunA==
-
value-or-function@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813"
@@ -10519,6 +10563,11 @@ watchpack@^2.2.0:
glob-to-regexp "^0.4.1"
graceful-fs "^4.1.2"
+webidl-conversions@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+ integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=
+
webpack-cli@^4.7.2:
version "4.7.2"
resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.7.2.tgz#a718db600de6d3906a4357e059ae584a89f4c1a5"
@@ -10635,6 +10684,14 @@ webpack@^5.42.0:
watchpack "^2.2.0"
webpack-sources "^2.3.0"
+whatwg-url@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+ integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0=
+ dependencies:
+ tr46 "~0.0.3"
+ webidl-conversions "^3.0.0"
+
when@^3.7.7:
version "3.7.8"
resolved "https://registry.yarnpkg.com/when/-/when-3.7.8.tgz#c7130b6a7ea04693e842cdc9e7a1f2aa39a39f82"
@@ -10809,13 +10866,6 @@ xml-name-validator@^1.0.0:
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-1.0.0.tgz#dcf82ee092322951ef8cc1ba596c9cbfd14a83f1"
integrity sha1-3Pgu4JIyKVHvjMG6WWycv9FKg/E=
-xml2js@0.2.8:
- version "0.2.8"
- resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.2.8.tgz#9b81690931631ff09d1957549faf54f4f980b3c2"
- integrity sha1-m4FpCTFjH/CdGVdUn69U9PmAs8I=
- dependencies:
- sax "0.5.x"
-
xml2js@^0.4.17:
version "0.4.23"
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"