Path: blob/main/build/azure-pipelines/darwin/product-build-darwin-universal.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,macos-developer-certificate,macos-developer-certificate-key"1617- script: node build/setup-npm-registry.js $NPM_REGISTRY build18condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))19displayName: Setup NPM Registry2021- script: |22set -e23# Set the private NPM registry to the global npmrc file24# so that authentication works for subfolders like build/, remote/, extensions/ etc25# which does not have their own .npmrc file26npm config set registry "$NPM_REGISTRY"27echo "##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)"28condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))29displayName: Setup NPM3031- task: npmAuthenticate@032inputs:33workingFile: $(NPMRC_PATH)34condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))35displayName: Setup NPM Authentication3637- script: |38set -e3940for i in {1..5}; do # try 5 times41npm ci && break42if [ $i -eq 5 ]; then43echo "Npm install failed too many times" >&244exit 145fi46echo "Npm install failed $i, trying again..."47done48workingDirectory: build49env:50GITHUB_TOKEN: "$(github-distro-mixin-password)"51displayName: Install build dependencies5253- pwsh: node build/azure-pipelines/common/waitForArtifacts.js unsigned_vscode_client_darwin_x64_archive unsigned_vscode_client_darwin_arm64_archive54env:55SYSTEM_ACCESSTOKEN: $(System.AccessToken)56displayName: Wait for x64 and arm64 artifacts5758- download: current59artifact: unsigned_vscode_client_darwin_x64_archive60displayName: Download x64 artifact6162- download: current63artifact: unsigned_vscode_client_darwin_arm64_archive64displayName: Download arm64 artifact6566- script: node build/azure-pipelines/distro/mixin-quality67displayName: Mixin distro quality6869- script: |70set -e71unzip $(Pipeline.Workspace)/unsigned_vscode_client_darwin_x64_archive/VSCode-darwin-x64.zip -d $(agent.builddirectory)/VSCode-darwin-x64 &72unzip $(Pipeline.Workspace)/unsigned_vscode_client_darwin_arm64_archive/VSCode-darwin-arm64.zip -d $(agent.builddirectory)/VSCode-darwin-arm64 &73wait74DEBUG=* node build/darwin/create-universal-app.js $(agent.builddirectory)75displayName: Create Universal App7677- script: |78set -e79APP_ROOT="$(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH)"80APP_NAME="`ls $APP_ROOT | head -n 1`"81APP_PATH="$APP_ROOT/$APP_NAME" node build/darwin/verify-macho.js universal82displayName: Verify arch of Mach-O objects8384- script: |85set -e86security create-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain87security default-keychain -s $(agent.tempdirectory)/buildagent.keychain88security unlock-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain89echo "$(macos-developer-certificate)" | base64 -D > $(agent.tempdirectory)/cert.p1290security import $(agent.tempdirectory)/cert.p12 -k $(agent.tempdirectory)/buildagent.keychain -P "$(macos-developer-certificate-key)" -T /usr/bin/codesign91export CODESIGN_IDENTITY=$(security find-identity -v -p codesigning $(agent.tempdirectory)/buildagent.keychain | grep -oEi "([0-9A-F]{40})" | head -n 1)92security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k pwd $(agent.tempdirectory)/buildagent.keychain93DEBUG=electron-osx-sign* node build/darwin/sign.js $(agent.builddirectory)94displayName: Set Hardened Entitlements9596- script: |97set -e98mkdir -p $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive99pushd $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) && zip -r -X -y $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin-$(VSCODE_ARCH).zip * && popd100displayName: Archive build101102- task: UseDotNet@2103inputs:104version: 6.x105106- task: EsrpCodeSigning@5107inputs:108UseMSIAuthentication: true109ConnectedServiceName: vscode-esrp110AppRegistrationClientId: $(ESRP_CLIENT_ID)111AppRegistrationTenantId: $(ESRP_TENANT_ID)112AuthAKVName: vscode-esrp113AuthSignCertName: esrp-sign114FolderPath: .115Pattern: noop116displayName: 'Install ESRP Tooling'117118- script: node build/azure-pipelines/common/sign $(Agent.RootDirectory)/_tasks/EsrpCodeSigning_*/*/net6.0/esrpcli.dll sign-darwin $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive VSCode-darwin-$(VSCODE_ARCH).zip119env:120SYSTEM_ACCESSTOKEN: $(System.AccessToken)121displayName: ✍️ Codesign122123- script: node build/azure-pipelines/common/sign $(Agent.RootDirectory)/_tasks/EsrpCodeSigning_*/*/net6.0/esrpcli.dll notarize-darwin $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive VSCode-darwin-$(VSCODE_ARCH).zip124env:125SYSTEM_ACCESSTOKEN: $(System.AccessToken)126displayName: ✍️ Notarize127128- script: unzip $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin-$(VSCODE_ARCH).zip -d $(Build.ArtifactStagingDirectory)/VSCode-darwin-$(VSCODE_ARCH)129displayName: Extract signed app130131- script: |132set -e133APP_ROOT="$(Build.ArtifactStagingDirectory)/VSCode-darwin-$(VSCODE_ARCH)"134APP_NAME="`ls $APP_ROOT | head -n 1`"135APP_PATH="$APP_ROOT/$APP_NAME"136codesign -dv --deep --verbose=4 "$APP_PATH"137"$APP_PATH/Contents/Resources/app/bin/code" --export-default-configuration=.build138displayName: Verify signature139condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64'))140141- script: mv $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin-x64.zip $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin.zip142displayName: Rename x64 build to its legacy name143condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'))144145- template: ../common/publish-artifact.yml@self146parameters:147targetPath: $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin-universal.zip148artifactName: vscode_client_darwin_$(VSCODE_ARCH)_archive149displayName: Publish client archive150sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/VSCode-darwin-$(VSCODE_ARCH)151sbomPackageName: "VS Code macOS $(VSCODE_ARCH)"152sbomPackageVersion: $(Build.SourceVersion)153154155