Path: blob/main/build/azure-pipelines/web/product-build-web.yml
3520 views
steps:1- template: ../common/checkout.yml@self23- task: NodeTool@04inputs:5versionSource: fromFile6versionFilePath: .nvmrc78- template: ../distro/download-distro.yml@self910- task: AzureKeyVault@211displayName: "Azure Key Vault: Get Secrets"12inputs:13azureSubscription: vscode14KeyVaultName: vscode-build-secrets15SecretsFilter: "github-distro-mixin-password"1617- task: DownloadPipelineArtifact@218inputs:19artifact: Compilation20path: $(Build.ArtifactStagingDirectory)21displayName: Download compilation output2223- script: tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz24displayName: Extract compilation output2526- script: node build/setup-npm-registry.js $NPM_REGISTRY27condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))28displayName: Setup NPM Registry2930- script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js web $(node -p process.arch) > .build/packagelockhash31displayName: Prepare node_modules cache key3233- task: Cache@234inputs:35key: '"node_modules" | .build/packagelockhash'36path: .build/node_modules_cache37cacheHitVar: NODE_MODULES_RESTORED38displayName: Restore node_modules cache3940- script: tar -xzf .build/node_modules_cache/cache.tgz41condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true'))42displayName: Extract node_modules cache4344- script: |45set -e46# Set the private NPM registry to the global npmrc file47# so that authentication works for subfolders like build/, remote/, extensions/ etc48# which does not have their own .npmrc file49npm config set registry "$NPM_REGISTRY"50echo "##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)"51condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))52displayName: Setup NPM5354- task: npmAuthenticate@055inputs:56workingFile: $(NPMRC_PATH)57condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))58displayName: Setup NPM Authentication5960- script: |61set -e62./build/azure-pipelines/linux/apt-retry.sh sudo apt-get update63./build/azure-pipelines/linux/apt-retry.sh sudo apt-get install -y libkrb5-dev64displayName: Setup system services65condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))6667- script: |68set -e6970for i in {1..5}; do # try 5 times71npm ci && break72if [ $i -eq 5 ]; then73echo "Npm install failed too many times" >&274exit 175fi76echo "Npm install failed $i, trying again..."77done78env:79ELECTRON_SKIP_BINARY_DOWNLOAD: 180PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 181GITHUB_TOKEN: "$(github-distro-mixin-password)"82displayName: Install dependencies83condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))8485- script: node build/azure-pipelines/distro/mixin-npm86condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))87displayName: Mixin distro node modules8889- script: |90set -e91node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt92mkdir -p .build/node_modules_cache93tar -czf .build/node_modules_cache/cache.tgz --files-from .build/node_modules_list.txt94condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))95displayName: Create node_modules archive9697- script: node build/azure-pipelines/distro/mixin-quality98displayName: Mixin distro quality99100- template: ../common/install-builtin-extensions.yml@self101102- script: |103set -e104npm run gulp vscode-web-min-ci105ARCHIVE_PATH=".build/web/vscode-web.tar.gz"106mkdir -p $(dirname $ARCHIVE_PATH)107tar --owner=0 --group=0 -czf $ARCHIVE_PATH -C .. vscode-web108echo "##vso[task.setvariable variable=WEB_PATH]$ARCHIVE_PATH"109env:110GITHUB_TOKEN: "$(github-distro-mixin-password)"111displayName: Build112113- task: AzureCLI@2114displayName: Fetch secrets from Azure115inputs:116azureSubscription: vscode117scriptType: pscore118scriptLocation: inlineScript119addSpnToEnvironment: true120inlineScript: |121Write-Host "##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId"122Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_ID]$env:servicePrincipalId"123Write-Host "##vso[task.setvariable variable=AZURE_ID_TOKEN;issecret=true]$env:idToken"124125- script: |126set -e127AZURE_STORAGE_ACCOUNT="vscodeweb" \128AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \129AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \130AZURE_ID_TOKEN="$(AZURE_ID_TOKEN)" \131node build/azure-pipelines/upload-cdn132displayName: Upload to CDN133134- script: |135set -e136AZURE_STORAGE_ACCOUNT="vscodeweb" \137AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \138AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \139AZURE_ID_TOKEN="$(AZURE_ID_TOKEN)" \140node build/azure-pipelines/upload-sourcemaps out-vscode-web-min out-vscode-web-min/vs/workbench/workbench.web.main.js.map141displayName: Upload sourcemaps (Web Main)142143- script: |144set -e145AZURE_STORAGE_ACCOUNT="vscodeweb" \146AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \147AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \148AZURE_ID_TOKEN="$(AZURE_ID_TOKEN)" \149node build/azure-pipelines/upload-sourcemaps out-vscode-web-min out-vscode-web-min/vs/workbench/workbench.web.main.internal.js.map150displayName: Upload sourcemaps (Web Internal)151152- script: |153set -e154AZURE_STORAGE_ACCOUNT="vscodeweb" \155AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \156AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \157AZURE_ID_TOKEN="$(AZURE_ID_TOKEN)" \158node build/azure-pipelines/upload-nlsmetadata159displayName: Upload NLS Metadata160161- script: echo "##vso[task.setvariable variable=ARTIFACT_PREFIX]attempt$(System.JobAttempt)_"162condition: and(succeededOrFailed(), notIn(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues'))163displayName: Generate artifact prefix164165- template: ../common/publish-artifact.yml@self166parameters:167targetPath: $(WEB_PATH)168artifactName: $(ARTIFACT_PREFIX)vscode_web_linux_standalone_archive-unsigned169displayName: Publish web archive170sbomBuildDropPath: $(Agent.BuildDirectory)/vscode-web171sbomPackageName: "VS Code Web"172sbomPackageVersion: $(Build.SourceVersion)173condition: and(succeededOrFailed(), ne(variables['WEB_PATH'], ''))174175176