Path: blob/main/build/azure-pipelines/web/product-build-web.yml
5352 views
jobs:1- job: Web2displayName: Web3timeoutInMinutes: 304pool:5name: 1es-ubuntu-22.04-x646os: linux7variables:8VSCODE_ARCH: x649templateContext:10outputs:11- output: pipelineArtifact12targetPath: $(Build.ArtifactStagingDirectory)/out/web/vscode-web.tar.gz13artifactName: vscode_web_linux_standalone_archive-unsigned14displayName: Publish web archive15sbomBuildDropPath: $(Agent.BuildDirectory)/vscode-web16sbomPackageName: "VS Code Linux x64 Web (Standalone)"17sbomPackageVersion: $(Build.SourceVersion)18steps:19- template: ../common/checkout.yml@self2021- task: NodeTool@022inputs:23versionSource: fromFile24versionFilePath: .nvmrc2526- template: ../distro/download-distro.yml@self2728- task: AzureKeyVault@229displayName: "Azure Key Vault: Get Secrets"30inputs:31azureSubscription: vscode32KeyVaultName: vscode-build-secrets33SecretsFilter: "github-distro-mixin-password"3435- task: DownloadPipelineArtifact@236inputs:37artifact: Compilation38path: $(Build.ArtifactStagingDirectory)39displayName: Download compilation output4041- script: tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz42displayName: Extract compilation output4344- script: node build/setup-npm-registry.ts $NPM_REGISTRY45condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))46displayName: Setup NPM Registry4748- script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.ts web $(node -p process.arch) > .build/packagelockhash49displayName: Prepare node_modules cache key5051- task: Cache@252inputs:53key: '"node_modules" | .build/packagelockhash'54path: .build/node_modules_cache55cacheHitVar: NODE_MODULES_RESTORED56displayName: Restore node_modules cache5758- script: tar -xzf .build/node_modules_cache/cache.tgz59condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true'))60displayName: Extract node_modules cache6162- script: |63set -e64# Set the private NPM registry to the global npmrc file65# so that authentication works for subfolders like build/, remote/, extensions/ etc66# which does not have their own .npmrc file67npm config set registry "$NPM_REGISTRY"68echo "##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)"69condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))70displayName: Setup NPM7172- task: npmAuthenticate@073inputs:74workingFile: $(NPMRC_PATH)75condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))76displayName: Setup NPM Authentication7778- script: |79set -e80./build/azure-pipelines/linux/apt-retry.sh sudo apt-get update81./build/azure-pipelines/linux/apt-retry.sh sudo apt-get install -y libkrb5-dev82displayName: Setup system services83condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))8485- script: |86set -e8788for i in {1..5}; do # try 5 times89npm ci && break90if [ $i -eq 5 ]; then91echo "Npm install failed too many times" >&292exit 193fi94echo "Npm install failed $i, trying again..."95done96env:97ELECTRON_SKIP_BINARY_DOWNLOAD: 198PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 199GITHUB_TOKEN: "$(github-distro-mixin-password)"100displayName: Install dependencies101condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))102103- script: node build/azure-pipelines/distro/mixin-npm.ts104condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))105displayName: Mixin distro node modules106107- script: |108set -e109node build/azure-pipelines/common/listNodeModules.ts .build/node_modules_list.txt110mkdir -p .build/node_modules_cache111tar -czf .build/node_modules_cache/cache.tgz --files-from .build/node_modules_list.txt112condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))113displayName: Create node_modules archive114115- script: node build/azure-pipelines/distro/mixin-quality.ts116displayName: Mixin distro quality117118- template: ../common/install-builtin-extensions.yml@self119120- script: |121set -e122npm run gulp vscode-web-min-ci123ARCHIVE_PATH="$(Build.ArtifactStagingDirectory)/out/web/vscode-web.tar.gz"124mkdir -p $(dirname $ARCHIVE_PATH)125tar --owner=0 --group=0 -czf $ARCHIVE_PATH -C .. vscode-web126echo "##vso[task.setvariable variable=WEB_PATH]$ARCHIVE_PATH"127env:128GITHUB_TOKEN: "$(github-distro-mixin-password)"129displayName: Build130131- task: AzureCLI@2132displayName: Fetch secrets from Azure133inputs:134azureSubscription: vscode135scriptType: pscore136scriptLocation: inlineScript137addSpnToEnvironment: true138inlineScript: |139Write-Host "##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId"140Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_ID]$env:servicePrincipalId"141Write-Host "##vso[task.setvariable variable=AZURE_ID_TOKEN;issecret=true]$env:idToken"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-cdn.ts150displayName: Upload to CDN151152- 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-sourcemaps.ts out-vscode-web-min out-vscode-web-min/vs/workbench/workbench.web.main.internal.js.map159displayName: Upload sourcemaps (Web)160161- script: |162set -e163AZURE_STORAGE_ACCOUNT="vscodeweb" \164AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \165AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \166AZURE_ID_TOKEN="$(AZURE_ID_TOKEN)" \167node build/azure-pipelines/upload-nlsmetadata.ts168displayName: Upload NLS Metadata169170171