Path: blob/main/build/azure-pipelines/darwin/product-build-darwin-universal.yml
5413 views
jobs:1- job: macOSUniversal2displayName: macOS (UNIVERSAL)3timeoutInMinutes: 904variables:5VSCODE_ARCH: universal6BUILDS_API_URL: $(System.CollectionUri)$(System.TeamProject)/_apis/build/builds/$(Build.BuildId)/7templateContext:8outputs:9- output: pipelineArtifact10targetPath: $(Build.ArtifactStagingDirectory)/out/vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin-universal.zip11artifactName: vscode_client_darwin_$(VSCODE_ARCH)_archive12displayName: Publish client archive13sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/VSCode-darwin-$(VSCODE_ARCH)14sbomPackageName: "VS Code macOS $(VSCODE_ARCH)"15sbomPackageVersion: $(Build.SourceVersion)16- output: pipelineArtifact17targetPath: $(Build.ArtifactStagingDirectory)/out/vscode_client_darwin_$(VSCODE_ARCH)_dmg/VSCode-darwin-$(VSCODE_ARCH).dmg18artifactName: vscode_client_darwin_$(VSCODE_ARCH)_dmg19displayName: Publish client DMG20sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/VSCode-darwin-$(VSCODE_ARCH)21sbomPackageName: "VS Code macOS $(VSCODE_ARCH)"22sbomPackageVersion: $(Build.SourceVersion)23steps:24- template: ../common/checkout.yml@self2526- task: NodeTool@027inputs:28versionSource: fromFile29versionFilePath: .nvmrc3031- template: ../distro/download-distro.yml@self3233- task: AzureKeyVault@234displayName: "Azure Key Vault: Get Secrets"35inputs:36azureSubscription: vscode37KeyVaultName: vscode-build-secrets38SecretsFilter: "github-distro-mixin-password,macos-developer-certificate,macos-developer-certificate-key"3940- script: node build/setup-npm-registry.ts $NPM_REGISTRY build41condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))42displayName: Setup NPM Registry4344- 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['NPM_REGISTRY'], 'none'))52displayName: Setup NPM5354- task: npmAuthenticate@055inputs:56workingFile: $(NPMRC_PATH)57condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))58displayName: Setup NPM Authentication5960- script: |61set -e6263for i in {1..5}; do # try 5 times64npm ci && break65if [ $i -eq 5 ]; then66echo "Npm install failed too many times" >&267exit 168fi69echo "Npm install failed $i, trying again..."70done71workingDirectory: build72env:73GITHUB_TOKEN: "$(github-distro-mixin-password)"74displayName: Install build dependencies7576- pwsh: node -- build/azure-pipelines/common/waitForArtifacts.ts unsigned_vscode_client_darwin_x64_archive unsigned_vscode_client_darwin_arm64_archive77env:78SYSTEM_ACCESSTOKEN: $(System.AccessToken)79displayName: Wait for x64 and arm64 artifacts8081- download: current82artifact: unsigned_vscode_client_darwin_x64_archive83displayName: Download x64 artifact8485- download: current86artifact: unsigned_vscode_client_darwin_arm64_archive87displayName: Download arm64 artifact8889- script: node build/azure-pipelines/distro/mixin-quality.ts90displayName: Mixin distro quality9192- script: |93set -e94unzip $(Pipeline.Workspace)/unsigned_vscode_client_darwin_x64_archive/VSCode-darwin-x64.zip -d $(agent.builddirectory)/VSCode-darwin-x64 &95unzip $(Pipeline.Workspace)/unsigned_vscode_client_darwin_arm64_archive/VSCode-darwin-arm64.zip -d $(agent.builddirectory)/VSCode-darwin-arm64 &96wait97DEBUG=* node build/darwin/create-universal-app.ts $(agent.builddirectory)98displayName: Create Universal App99100- script: |101set -e102APP_ROOT="$(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH)"103APP_NAME="`ls $APP_ROOT | head -n 1`"104APP_PATH="$APP_ROOT/$APP_NAME"105EXEC_NAME=$(node -p "require(\"$APP_PATH/Contents/Resources/app/product.json\").nameShort")106# Create a symlink from 'Electron' to the actual executable for backward compatibility107# This ensures apps that relied on the hardcoded path 'Contents/MacOS/Electron' continue to work108# Remove this step once main branch is on 1.112 release.109if [ "$EXEC_NAME" != "Electron" ] && [ ! -L "$APP_PATH/Contents/MacOS/Electron" ]; then110ln -s "$EXEC_NAME" "$APP_PATH/Contents/MacOS/Electron"111fi112displayName: Create Electron symlink for backward compatibility113114- script: |115set -e116APP_ROOT="$(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH)"117APP_NAME="`ls $APP_ROOT | head -n 1`"118APP_PATH="$APP_ROOT/$APP_NAME" node build/darwin/verify-macho.ts universal119displayName: Verify arch of Mach-O objects120121- script: |122set -e123security create-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain124security default-keychain -s $(agent.tempdirectory)/buildagent.keychain125security unlock-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain126echo "$(macos-developer-certificate)" | base64 -D > $(agent.tempdirectory)/cert.p12127security import $(agent.tempdirectory)/cert.p12 -k $(agent.tempdirectory)/buildagent.keychain -P "$(macos-developer-certificate-key)" -T /usr/bin/codesign128export CODESIGN_IDENTITY=$(security find-identity -v -p codesigning $(agent.tempdirectory)/buildagent.keychain | grep -oEi "([0-9A-F]{40})" | head -n 1)129security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k pwd $(agent.tempdirectory)/buildagent.keychain130DEBUG=electron-osx-sign* node build/darwin/sign.ts $(agent.builddirectory)131displayName: Set Hardened Entitlements132133- script: |134set -e135DMG_OUT="$(Pipeline.Workspace)/vscode_client_darwin_$(VSCODE_ARCH)_dmg"136mkdir -p $DMG_OUT137node build/darwin/create-dmg.ts $(agent.builddirectory) $DMG_OUT138python3 build/darwin/patch-dmg.py $DMG_OUT/VSCode-darwin-$(VSCODE_ARCH).dmg resources/darwin/disk.icns139echo "##vso[task.setvariable variable=DMG_PATH]$DMG_OUT/VSCode-darwin-$(VSCODE_ARCH).dmg"140displayName: Create DMG installer141142- script: |143set -e144mkdir -p $(Pipeline.Workspace)/vscode_client_darwin_$(VSCODE_ARCH)_archive145pushd $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) && zip -r -X -y $(Pipeline.Workspace)/vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin-$(VSCODE_ARCH).zip * && popd146displayName: Archive build147148- task: UseDotNet@2149inputs:150version: 6.x151152- task: EsrpCodeSigning@5153inputs:154UseMSIAuthentication: true155ConnectedServiceName: vscode-esrp156AppRegistrationClientId: $(ESRP_CLIENT_ID)157AppRegistrationTenantId: $(ESRP_TENANT_ID)158AuthAKVName: vscode-esrp159AuthSignCertName: esrp-sign160FolderPath: .161Pattern: noop162displayName: 'Install ESRP Tooling'163164- pwsh: |165. build/azure-pipelines/win32/exec.ps1166$ErrorActionPreference = "Stop"167$EsrpCodeSigningTool = (gci -directory -filter EsrpCodeSigning_* $(Agent.RootDirectory)/_tasks | Select-Object -last 1).FullName168$Version = (gci -directory $EsrpCodeSigningTool | Select-Object -last 1).FullName169echo "##vso[task.setvariable variable=EsrpCliDllPath]$Version/net6.0/esrpcli.dll"170displayName: Find ESRP CLI171172- script: node build/azure-pipelines/darwin/codesign.ts173env:174EsrpCliDllPath: $(EsrpCliDllPath)175SYSTEM_ACCESSTOKEN: $(System.AccessToken)176displayName: ✍️ Codesign & Notarize177178- script: unzip $(Pipeline.Workspace)/vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin-$(VSCODE_ARCH).zip -d $(Build.ArtifactStagingDirectory)/VSCode-darwin-$(VSCODE_ARCH)179displayName: Extract signed app180181- script: |182set -e183APP_ROOT="$(Build.ArtifactStagingDirectory)/VSCode-darwin-$(VSCODE_ARCH)"184APP_NAME="`ls $APP_ROOT | head -n 1`"185APP_PATH="$APP_ROOT/$APP_NAME"186codesign -dv --deep --verbose=4 "$APP_PATH"187"$APP_PATH/Contents/Resources/app/bin/code" --export-default-configuration=.build188displayName: Verify signature189190- script: |191set -e192mkdir -p $(Build.ArtifactStagingDirectory)/out/vscode_client_darwin_$(VSCODE_ARCH)_archive193mv $(Pipeline.Workspace)/vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin-$(VSCODE_ARCH).zip $(Build.ArtifactStagingDirectory)/out/vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin-$(VSCODE_ARCH).zip194195mkdir -p $(Build.ArtifactStagingDirectory)/out/vscode_client_darwin_$(VSCODE_ARCH)_dmg196mv $(DMG_PATH) $(Build.ArtifactStagingDirectory)/out/vscode_client_darwin_$(VSCODE_ARCH)_dmg/VSCode-darwin-$(VSCODE_ARCH).dmg197displayName: Move artifact to out directory198199200