Path: blob/main/build/azure-pipelines/product-compile.yml
5335 views
jobs:1- job: Compile2timeoutInMinutes: 603templateContext:4outputs:5- output: pipelineArtifact6targetPath: $(Build.ArtifactStagingDirectory)/compilation.tar.gz7artifactName: Compilation8displayName: Publish compilation artifact9isProduction: false10sbomEnabled: false11steps:12- template: ./common/checkout.yml@self1314- task: NodeTool@015inputs:16versionSource: fromFile17versionFilePath: .nvmrc1819- template: ./distro/download-distro.yml@self2021- task: AzureKeyVault@222displayName: "Azure Key Vault: Get Secrets"23inputs:24azureSubscription: vscode25KeyVaultName: vscode-build-secrets26SecretsFilter: "github-distro-mixin-password"2728- script: node build/setup-npm-registry.ts $NPM_REGISTRY29condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))30displayName: Setup NPM Registry3132- script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.ts compile $(node -p process.arch) > .build/packagelockhash33displayName: Prepare node_modules cache key3435- task: Cache@236inputs:37key: '"node_modules" | .build/packagelockhash'38path: .build/node_modules_cache39cacheHitVar: NODE_MODULES_RESTORED40displayName: Restore node_modules cache4142- script: tar -xzf .build/node_modules_cache/cache.tgz43condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true'))44displayName: Extract node_modules cache4546- script: |47set -e48# Set the private NPM registry to the global npmrc file49# so that authentication works for subfolders like build/, remote/, extensions/ etc50# which does not have their own .npmrc file51npm config set registry "$NPM_REGISTRY"52echo "##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)"53condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))54displayName: Setup NPM5556- task: npmAuthenticate@057inputs:58workingFile: $(NPMRC_PATH)59condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))60displayName: Setup NPM Authentication6162- script: |63set -e6465for i in {1..5}; do # try 5 times66npm ci && break67if [ $i -eq 5 ]; then68echo "Npm install failed too many times" >&269exit 170fi71echo "Npm install failed $i, trying again..."72done73env:74ELECTRON_SKIP_BINARY_DOWNLOAD: 175PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 176GITHUB_TOKEN: "$(github-distro-mixin-password)"77displayName: Install dependencies78condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))7980- script: node build/azure-pipelines/distro/mixin-npm.ts81condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))82displayName: Mixin distro node modules8384- script: |85set -e86node build/azure-pipelines/common/listNodeModules.ts .build/node_modules_list.txt87mkdir -p .build/node_modules_cache88tar -czf .build/node_modules_cache/cache.tgz --files-from .build/node_modules_list.txt89condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))90displayName: Create node_modules archive9192- script: node build/azure-pipelines/distro/mixin-quality.ts93displayName: Mixin distro quality9495- template: common/install-builtin-extensions.yml@self9697- script: npm exec -- npm-run-all2 -lp core-ci extensions-ci hygiene eslint valid-layers-check define-class-fields-check vscode-dts-compile-check tsec-compile-check test-build-scripts98env:99GITHUB_TOKEN: "$(github-distro-mixin-password)"100displayName: Compile & Hygiene101102- script: |103set -e104105[ -d "out-build" ] || { echo "ERROR: out-build folder is missing" >&2; exit 1; }106[ -n "$(find out-build -mindepth 1 2>/dev/null | head -1)" ] || { echo "ERROR: out-build folder is empty" >&2; exit 1; }107echo "out-build exists and is not empty"108109ls -d out-vscode-* >/dev/null 2>&1 || { echo "ERROR: No out-vscode-* folders found" >&2; exit 1; }110for folder in out-vscode-*; do111[ -d "$folder" ] || { echo "ERROR: $folder is missing" >&2; exit 1; }112[ -n "$(find "$folder" -mindepth 1 2>/dev/null | head -1)" ] || { echo "ERROR: $folder is empty" >&2; exit 1; }113echo "$folder exists and is not empty"114done115116echo "All required compilation folders checked."117displayName: Validate compilation folders118119- script: |120set -e121npm run compile122displayName: Compile smoke test suites (non-OSS)123workingDirectory: test/smoke124condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))125126- script: |127set -e128npm run compile129displayName: Compile integration test suites (non-OSS)130workingDirectory: test/integration/browser131condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))132133- task: AzureCLI@2134displayName: Fetch secrets135inputs:136azureSubscription: vscode137scriptType: pscore138scriptLocation: inlineScript139addSpnToEnvironment: true140inlineScript: |141Write-Host "##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId"142Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_ID]$env:servicePrincipalId"143Write-Host "##vso[task.setvariable variable=AZURE_ID_TOKEN;issecret=true]$env:idToken"144145- script: |146set -e147AZURE_STORAGE_ACCOUNT="vscodeweb" \148AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \149AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \150AZURE_ID_TOKEN="$(AZURE_ID_TOKEN)" \151node build/azure-pipelines/upload-sourcemaps.ts152displayName: Upload sourcemaps to Azure153154- script: ./build/azure-pipelines/common/extract-telemetry.sh155displayName: Generate lists of telemetry events156157- script: tar -cz --exclude='.build/node_modules_cache' --exclude='.build/node_modules_list.txt' --exclude='.build/distro' -f $(Build.ArtifactStagingDirectory)/compilation.tar.gz $(ls -d .build out-* test/integration/browser/out test/smoke/out test/automation/out 2>/dev/null)158displayName: Compress compilation artifact159160- script: npm run download-builtin-extensions-cg161env:162GITHUB_TOKEN: "$(github-distro-mixin-password)"163displayName: Download component details of built-in extensions164165- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0166displayName: "Component Detection"167inputs:168sourceScanPath: $(Build.SourcesDirectory)169alertWarningLevel: Medium170continueOnError: true171172173