diff --git a/build/azure-pipelines/cli/cli-compile-and-publish.yml b/build/azure-pipelines/cli/cli-compile-and-publish.yml new file mode 100644 index 00000000000..a97446c274b --- /dev/null +++ b/build/azure-pipelines/cli/cli-compile-and-publish.yml @@ -0,0 +1,50 @@ +parameters: + - name: VSCODE_CLI_TARGET + type: string + - name: VSCODE_CLI_ARTIFACT + type: string + - name: VSCODE_CLI_ENV + type: object + default: {} + +steps: + - script: cargo build --release --target ${{ parameters.VSCODE_CLI_TARGET }} --bin=code-tunnel + displayName: Compile ${{ parameters.VSCODE_CLI_TARGET }} + workingDirectory: $(Build.SourcesDirectory)/cli + env: + VSCODE_CLI_VERSION: $(VSCODE_CLI_VERSION) + VSCODE_CLI_REMOTE_LICENSE_TEXT: $(VSCODE_CLI_REMOTE_LICENSE_TEXT) + VSCODE_CLI_REMOTE_LICENSE_PROMPT: $(VSCODE_CLI_REMOTE_LICENSE_PROMPT) + VSCODE_CLI_ASSET_NAME: ${{ parameters.VSCODE_CLI_ARTIFACT }} + VSCODE_CLI_AI_KEY: $(VSCODE_CLI_AI_KEY) + VSCODE_CLI_AI_ENDPOINT: $(VSCODE_CLI_AI_ENDPOINT) + ${{ each pair in parameters.VSCODE_CLI_ENV }}: + ${{ pair.key }}: ${{ pair.value }} + + - ${{ if or(contains(parameters.VSCODE_CLI_TARGET, '-windows-'), contains(parameters.VSCODE_CLI_TARGET, '-darwin')) }}: + - task: ArchiveFiles@2 + inputs: + ${{ if contains(parameters.VSCODE_CLI_TARGET, '-windows-')}}: + rootFolderOrFile: $(Build.SourcesDirectory)/cli/target/${{ parameters.VSCODE_CLI_TARGET }}/release/code-tunnel.exe + ${{ if contains(parameters.VSCODE_CLI_TARGET, '-darwin')}}: + rootFolderOrFile: $(Build.SourcesDirectory)/cli/target/${{ parameters.VSCODE_CLI_TARGET }}/release/code-tunnel + includeRootFolder: false + archiveType: zip + archiveFile: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.zip + + - publish: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.zip + artifact: ${{ parameters.VSCODE_CLI_ARTIFACT }} + displayName: Publish ${{ parameters.VSCODE_CLI_ARTIFACT }} artifact + + - ${{ if contains(parameters.VSCODE_CLI_TARGET, '-linux-') }}: + - task: ArchiveFiles@2 + inputs: + rootFolderOrFile: $(Build.SourcesDirectory)/cli/target/${{ parameters.VSCODE_CLI_TARGET }}/release/code-tunnel + includeRootFolder: false + archiveType: tar + tarCompression: gz + archiveFile: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.tar.gz + + - publish: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.tar.gz + artifact: ${{ parameters.VSCODE_CLI_ARTIFACT }} + displayName: Publish ${{ parameters.VSCODE_CLI_ARTIFACT }} artifact diff --git a/build/azure-pipelines/cli/cli-darwin-sign.yml b/build/azure-pipelines/cli/cli-darwin-sign.yml new file mode 100644 index 00000000000..30d2bc3b566 --- /dev/null +++ b/build/azure-pipelines/cli/cli-darwin-sign.yml @@ -0,0 +1,39 @@ +parameters: + - name: VSCODE_CLI_ARTIFACTS + type: object + default: [] + +steps: + - task: UseDotNet@2 + inputs: + version: 2.x + + - task: EsrpClientTool@1 + displayName: Download ESRPClient + + - ${{ each target in parameters.VSCODE_CLI_ARTIFACTS }}: + - task: DownloadPipelineArtifact@2 + displayName: Download ${{ target }} + inputs: + artifact: ${{ target }} + path: $(Build.ArtifactStagingDirectory)/pkg/${{ target }} + + - script: | + set -e + node build/azure-pipelines/common/sign "$(esrpclient.toolpath)/$(esrpclient.toolname)" darwin-sign $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(Build.ArtifactStagingDirectory)/pkg "*.zip" + displayName: Codesign + + - script: | + set -e + node build/azure-pipelines/common/sign "$(esrpclient.toolpath)/$(esrpclient.toolname)" darwin-notarize $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(Build.ArtifactStagingDirectory)/pkg "*.zip" + displayName: Notarize + + - ${{ each target in parameters.VSCODE_CLI_ARTIFACTS }}: + - script: | + ASSET_ID=$(echo "${{ target }}" | sed "s/unsigned_//") + mv $(Build.ArtifactStagingDirectory)/pkg/${{ target }}/${{ target }}.zip $(Build.ArtifactStagingDirectory)/pkg/${{ target }}/$ASSET_ID.zip + echo "##vso[task.setvariable variable=ASSET_ID]$ASSET_ID" + displayName: Set asset id variable + + - publish: $(Build.ArtifactStagingDirectory)/pkg/${{ target }}/$(ASSET_ID).zip + artifact: $(ASSET_ID) diff --git a/build/azure-pipelines/cli/cli-win32-sign.yml b/build/azure-pipelines/cli/cli-win32-sign.yml new file mode 100644 index 00000000000..91e069617d8 --- /dev/null +++ b/build/azure-pipelines/cli/cli-win32-sign.yml @@ -0,0 +1,65 @@ +parameters: + - name: VSCODE_CLI_ARTIFACTS + type: object + default: [] + +steps: + - task: AzureKeyVault@1 + displayName: "Azure Key Vault: Get Secrets" + inputs: + azureSubscription: "vscode-builds-subscription" + KeyVaultName: vscode + SecretsFilter: "ESRP-PKI,esrp-aad-username,esrp-aad-password" + + - task: UseDotNet@2 + displayName: "Use .NET" + inputs: + version: 3.x + + - task: EsrpClientTool@1 + displayName: "Use ESRP client" + + - ${{ each target in parameters.VSCODE_CLI_ARTIFACTS }}: + - task: DownloadPipelineArtifact@2 + displayName: Download artifacts + inputs: + artifact: ${{ target }} + path: $(Build.ArtifactStagingDirectory)/pkg/${{ target }} + + - task: ExtractFiles@1 + inputs: + archiveFilePatterns: $(Build.ArtifactStagingDirectory)/pkg/${{ target }}/*.zip + destinationFolder: $(Build.ArtifactStagingDirectory)/sign/${{ target }} + + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + $EsrpClientTool = (gci -directory -filter EsrpClientTool_* $(Agent.RootDirectory)\_tasks | Select-Object -last 1).FullName + $EsrpCliZip = (gci -recurse -filter esrpcli.*.zip $EsrpClientTool | Select-Object -last 1).FullName + mkdir -p $(Agent.TempDirectory)\esrpcli + Expand-Archive -Path $EsrpCliZip -DestinationPath $(Agent.TempDirectory)\esrpcli + $EsrpCliDllPath = (gci -recurse -filter esrpcli.dll $(Agent.TempDirectory)\esrpcli | Select-Object -last 1).FullName + echo "##vso[task.setvariable variable=EsrpCliDllPath]$EsrpCliDllPath" + displayName: Find ESRP CLI + + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + exec { node build\azure-pipelines\common\sign $env:EsrpCliDllPath windows $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(Build.ArtifactStagingDirectory)/sign "*.exe" } + displayName: "Code sign" + + - ${{ each target in parameters.VSCODE_CLI_ARTIFACTS }}: + - powershell: | + $ASSET_ID = "${{ target }}".replace("unsigned_", ""); + echo "##vso[task.setvariable variable=ASSET_ID]$ASSET_ID" + displayName: Set asset id variable + + - task: ArchiveFiles@2 + inputs: + rootFolderOrFile: $(Build.ArtifactStagingDirectory)/sign/${{ target }}/code-tunnel.exe + includeRootFolder: false + archiveType: zip + archiveFile: $(Build.ArtifactStagingDirectory)/$(ASSET_ID).zip + + - publish: $(Build.ArtifactStagingDirectory)/$(ASSET_ID).zip + artifact: $(ASSET_ID) diff --git a/build/azure-pipelines/cli/install-rust-posix.yml b/build/azure-pipelines/cli/install-rust-posix.yml index 16eee1a1b98..7dddfb5eb9b 100644 --- a/build/azure-pipelines/cli/install-rust-posix.yml +++ b/build/azure-pipelines/cli/install-rust-posix.yml @@ -25,8 +25,8 @@ steps: displayName: "Set Rust version" - ${{ each target in parameters.targets }}: - - script: rustup target add ${{ target.target }} - displayName: "🎯 Adding '${{ target.target }}'" + - script: rustup target add ${{ target }} + displayName: "Adding Rust target '${{ target }}'" - script: | rustc --version diff --git a/build/azure-pipelines/cli/install-rust-win32.yml b/build/azure-pipelines/cli/install-rust-win32.yml index 595201cc7c7..0b345892ab2 100644 --- a/build/azure-pipelines/cli/install-rust-win32.yml +++ b/build/azure-pipelines/cli/install-rust-win32.yml @@ -26,8 +26,8 @@ steps: displayName: "Set Rust version" - ${{ each target in parameters.targets }}: - - script: rustup target add ${{ target.target }} - displayName: "🎯 Adding '${{ target.target }}'" + - script: rustup target add ${{ target }} + displayName: "Adding Rust target '${{ target }}'" - script: | rustc --version diff --git a/build/azure-pipelines/darwin/cli-build-darwin.yml b/build/azure-pipelines/darwin/cli-build-darwin.yml index bb1a71c9437..42632c280e6 100644 --- a/build/azure-pipelines/darwin/cli-build-darwin.yml +++ b/build/azure-pipelines/darwin/cli-build-darwin.yml @@ -9,14 +9,6 @@ parameters: type: string default: stable -variables: - - name: VSCODE_CLI_TARGETS - value: - - ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}: - - { target: x86_64-apple-darwin, artifact: unsigned_vscode_cli_darwin_x64_cli } - - ${{ if eq(parameters.VSCODE_BUILD_MACOS_ARM64, true) }}: - - { target: aarch64-apple-darwin, artifact: unsigned_vscode_cli_darwin_arm64_cli } - steps: - task: NodeTool@0 inputs: @@ -35,27 +27,20 @@ steps: - template: ../cli/install-rust-posix.yml parameters: - targets: ${{ variables.VSCODE_CLI_TARGETS }} + targets: + - ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}: + - x86_64-apple-darwin + - ${{ if eq(parameters.VSCODE_BUILD_MACOS_ARM64, true) }}: + - aarch64-apple-darwin - - ${{ each target in variables.VSCODE_CLI_TARGETS }}: - - script: cargo build --release --target ${{ target.target }} --bin=code-tunnel - displayName: Compile ${{ target.artifact }} - workingDirectory: $(Build.SourcesDirectory)/cli - env: - VSCODE_CLI_VERSION: $(VSCODE_CLI_VERSION) - VSCODE_CLI_REMOTE_LICENSE_TEXT: $(VSCODE_CLI_REMOTE_LICENSE_TEXT) - VSCODE_CLI_REMOTE_LICENSE_PROMPT: $(VSCODE_CLI_REMOTE_LICENSE_PROMPT) - VSCODE_CLI_ASSET_NAME: ${{ target.artifact }} - VSCODE_CLI_AI_KEY: $(VSCODE_CLI_AI_KEY) - VSCODE_CLI_AI_ENDPOINT: $(VSCODE_CLI_AI_ENDPOINT) + - ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}: + - template: ../cli/cli-compile-and-publish.yml + parameters: + VSCODE_CLI_TARGET: x86_64-apple-darwin + VSCODE_CLI_ARTIFACT: unsigned_vscode_cli_darwin_x64_cli - - task: ArchiveFiles@2 - inputs: - rootFolderOrFile: $(Build.SourcesDirectory)/cli/target/${{ target.target }}/release/code-tunnel - includeRootFolder: false - archiveType: zip - archiveFile: $(Build.ArtifactStagingDirectory)/${{ target.artifact }}.zip - - - publish: $(Build.ArtifactStagingDirectory)/${{ target.artifact }}.zip - artifact: ${{ target.artifact }} - displayName: Publish ${{ target.artifact }} artifact + - ${{ if eq(parameters.VSCODE_BUILD_MACOS_ARM64, true) }}: + - template: ../cli/cli-compile-and-publish.yml + parameters: + VSCODE_CLI_TARGET: aarch64-apple-darwin + VSCODE_CLI_ARTIFACT: unsigned_vscode_cli_darwin_arm64_cli diff --git a/build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml b/build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml index b36e338d78b..431eb8ec09b 100644 --- a/build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml +++ b/build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml @@ -4,14 +4,6 @@ parameters: - name: VSCODE_BUILD_MACOS_ARM64 type: boolean -variables: - - name: VSCODE_CLI_ARTIFACTS - value: - - ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}: - - unsigned_vscode_cli_darwin_x64_cli - - ${{ if eq(parameters.VSCODE_BUILD_MACOS_ARM64, true) }}: - - unsigned_vscode_cli_darwin_arm64_cli - steps: - task: NodeTool@0 inputs: @@ -44,36 +36,10 @@ steps: done displayName: Install build dependencies - - ${{ each target in variables.VSCODE_CLI_ARTIFACTS }}: - - task: DownloadPipelineArtifact@2 - displayName: Download ${{ target }} - inputs: - artifact: ${{ target }} - path: $(Build.ArtifactStagingDirectory)/pkg/${{ target }} - - - task: UseDotNet@2 - inputs: - version: 2.x - - - task: EsrpClientTool@1 - displayName: Download ESRPClient - - - script: | - set -e - node build/azure-pipelines/common/sign "$(esrpclient.toolpath)/$(esrpclient.toolname)" darwin-sign $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(Build.ArtifactStagingDirectory)/pkg "*.zip" - displayName: Codesign - - - script: | - set -e - node build/azure-pipelines/common/sign "$(esrpclient.toolpath)/$(esrpclient.toolname)" darwin-notarize $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(Build.ArtifactStagingDirectory)/pkg "*.zip" - displayName: Notarize - - - ${{ each target in parameters.VSCODE_CLI_ARTIFACTS }}: - - script: | - ASSET_ID=$(echo "${{ target }}" | sed "s/unsigned_//") - mv $(Build.ArtifactStagingDirectory)/pkg/${{ target }}/${{ target }}.zip $(Build.ArtifactStagingDirectory)/pkg/${{ target }}/$ASSET_ID.zip - echo "##vso[task.setvariable variable=ASSET_ID]$ASSET_ID" - displayName: Set asset id variable - - - publish: $(Build.ArtifactStagingDirectory)/pkg/${{ target }}/$(ASSET_ID).zip - artifact: $(ASSET_ID) + - template: ../cli/cli-darwin-sign.yml + parameters: + VSCODE_CLI_ARTIFACTS: + - ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}: + - unsigned_vscode_cli_darwin_x64_cli + - ${{ if eq(parameters.VSCODE_BUILD_MACOS_ARM64, true) }}: + - unsigned_vscode_cli_darwin_arm64_cli diff --git a/build/azure-pipelines/darwin/product-build-darwin.yml b/build/azure-pipelines/darwin/product-build-darwin.yml index 86392ecbc43..f8e3e1d2666 100644 --- a/build/azure-pipelines/darwin/product-build-darwin.yml +++ b/build/azure-pipelines/darwin/product-build-darwin.yml @@ -185,17 +185,24 @@ steps: - ${{ if eq(parameters.VSCODE_BUILD_TUNNEL_CLI, true) }}: - task: DownloadPipelineArtifact@2 inputs: - ${{ if eq(variables.VSCODE_ARCH, 'x64') }}: - artifact: unsigned_vscode_cli_darwin_x64_cli - ${{ if eq(variables.VSCODE_ARCH, 'arm64') }}: - artifact: unsigned_vscode_cli_darwin_arm64_cli + artifact: unsigned_vscode_cli_darwin_arm64_cli patterns: '**' - path: $(Build.ArtifactStagingDirectory) + path: $(Build.ArtifactStagingDirectory)/cli displayName: Download VS Code CLI + condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64')) + + - task: DownloadPipelineArtifact@2 + inputs: + artifact: unsigned_vscode_cli_darwin_x64_cli + patterns: '**' + path: $(Build.ArtifactStagingDirectory)/cli + displayName: Download VS Code CLI + condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64')) - script: | set -e - unzip "$(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.zip" -d "$(APP_PATH)/Contents/Resources/app/bin" + ARCHIVE_NAME=$(ls "$(Build.ArtifactStagingDirectory)/cli" | head -n 1) + unzip "$(Build.ArtifactStagingDirectory)/cli/$ARCHIVE_NAME" -d "$(APP_PATH)/Contents/Resources/app/bin" chmod +x "$(APP_PATH)/Contents/Resources/app/bin/code-tunnel" if [ "$(VSCODE_QUALITY)" != "stable" ]; then mv "$(APP_PATH)/Contents/Resources/app/bin/code-tunnel" "$(APP_PATH)/Contents/Resources/app/bin/code-tunnel-$(VSCODE_QUALITY)" diff --git a/build/azure-pipelines/linux/cli-build-linux.yml b/build/azure-pipelines/linux/cli-build-linux.yml index a96a784b659..2f6db518991 100644 --- a/build/azure-pipelines/linux/cli-build-linux.yml +++ b/build/azure-pipelines/linux/cli-build-linux.yml @@ -1,28 +1,22 @@ parameters: - name: VSCODE_BUILD_LINUX_ALPINE type: boolean + default: false - name: VSCODE_BUILD_LINUX type: boolean + default: false + - name: VSCODE_BUILD_LINUX_ALPINE_ARM64 + type: boolean + default: false + - name: VSCODE_BUILD_LINUX_ARM64 + type: boolean + default: false - name: VSCODE_QUALITY type: string - name: channel type: string default: stable -variables: - - name: VSCODE_CLI_TARGETS - value: - - ${{ if eq(variables.VSCODE_ARCH, 'arm64') }}: - - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ALPINE_ARM64, true) }}: - - { target: aarch64-unknown-linux-musl, artifact: vscode_cli_alpine_arm64_cli } - - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARM64, true) }}: - - { target: aarch64-unknown-linux-gnu, artifact: vscode_cli_linux_arm64_cli } - - ${{ if eq(parameters.VSCODE_BUILD_ARCH, 'x86') }}: - - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ALPINE, true) }}: - - { target: x86_64-unknown-linux-musl, artifact: vscode_cli_alpine_x64_cli } - - ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}: - - { target: x86_64-unknown-linux-gnu, artifact: vscode_cli_linux_x64_cli } - steps: # inspired by: https://github.com/emk/rust-musl-builder/blob/main/Dockerfile - bash: | @@ -48,30 +42,42 @@ steps: - template: ../cli/install-rust-posix.yml parameters: - targets: ${{ variables.VSCODE_CLI_TARGETS }} + targets: + - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ALPINE_ARM64, true) }}: + - aarch64-unknown-linux-musl + - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ALPINE, true) }}: + - x86_64-unknown-linux-musl + - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARM64, true) }}: + - aarch64-unknown-linux-gnu + - ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}: + - x86_64-unknown-linux-gnu - - ${{ each target in variables.VSCODE_CLI_TARGETS }}: - - script: cargo build --release --target ${{ target.target }} --bin=code-tunnel - displayName: Compile ${{ target.artifact }} - workingDirectory: $(Build.SourcesDirectory)/cli - env: - VSCODE_CLI_VERSION: $(VSCODE_CLI_VERSION) - VSCODE_CLI_REMOTE_LICENSE_TEXT: $(VSCODE_CLI_REMOTE_LICENSE_TEXT) - VSCODE_CLI_REMOTE_LICENSE_PROMPT: $(VSCODE_CLI_REMOTE_LICENSE_PROMPT) - VSCODE_CLI_ASSET_NAME: ${{ target.artifact }} - VSCODE_CLI_AI_KEY: $(VSCODE_CLI_AI_KEY) - VSCODE_CLI_AI_ENDPOINT: $(VSCODE_CLI_AI_ENDPOINT) - CXX_aarch64-unknown-linux-musl: musl-g++ - CC_aarch64-unknown-linux-musl: musl-gcc + - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ALPINE_ARM64, true) }}: + - template: ../cli/cli-compile-and-publish.yml + parameters: + VSCODE_CLI_TARGET: aarch64-unknown-linux-musl + VSCODE_CLI_ARTIFACT: vscode_cli_alpine_arm64_cli + VSCODE_CLI_ENV: + CXX_aarch64-unknown-linux-musl: musl-g++ + CC_aarch64-unknown-linux-musl: musl-gcc - - task: ArchiveFiles@2 - inputs: - rootFolderOrFile: $(Build.SourcesDirectory)/cli/target/${{ target.target }}/release/code-tunnel - includeRootFolder: false - archiveType: tar - tarCompression: gz - archiveFile: $(Build.ArtifactStagingDirectory)/${{ target.artifact }}.tar.gz + - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ALPINE, true) }}: + - template: ../cli/cli-compile-and-publish.yml + parameters: + VSCODE_CLI_TARGET: x86_64-unknown-linux-musl + VSCODE_CLI_ARTIFACT: vscode_cli_alpine_x64_cli + VSCODE_CLI_ENV: + CXX_aarch64-unknown-linux-musl: musl-g++ + CC_aarch64-unknown-linux-musl: musl-gcc - - publish: $(Build.ArtifactStagingDirectory)/${{ target.artifact }}.tar.gz - artifact: ${{ target.artifact }} - displayName: Publish ${{ target.artifact }} artifact + - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARM64, true) }}: + - template: ../cli/cli-compile-and-publish.yml + parameters: + VSCODE_CLI_TARGET: aarch64-unknown-linux-gnu + VSCODE_CLI_ARTIFACT: vscode_cli_linux_arm64_cli + + - ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}: + - template: ../cli/cli-compile-and-publish.yml + parameters: + VSCODE_CLI_TARGET: x86_64-unknown-linux-gnu + VSCODE_CLI_ARTIFACT: vscode_cli_linux_x64_cli diff --git a/build/azure-pipelines/linux/product-build-linux-client.yml b/build/azure-pipelines/linux/product-build-linux-client.yml index cf2af3a2af3..13f48d400da 100644 --- a/build/azure-pipelines/linux/product-build-linux-client.yml +++ b/build/azure-pipelines/linux/product-build-linux-client.yml @@ -257,17 +257,23 @@ steps: - ${{ if eq(parameters.VSCODE_BUILD_TUNNEL_CLI, true) }}: - task: DownloadPipelineArtifact@2 inputs: - ${{ if eq(variables.VSCODE_ARCH, 'x64') }}: - artifact: vscode_cli_linux_x64_cli - ${{ if eq(variables.VSCODE_ARCH, 'arm64') }}: - artifact: vscode_cli_linux_arm64_cli + artifact: vscode_cli_linux_arm64_cli patterns: '**' - path: $(Build.ArtifactStagingDirectory) + path: $(Build.ArtifactStagingDirectory)/cli displayName: Download VS Code CLI + condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64')) + + - task: DownloadPipelineArtifact@2 + inputs: + artifact: vscode_cli_linux_x64_cli + patterns: '**' + path: $(Build.ArtifactStagingDirectory)/cli + displayName: Download VS Code CLI + condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64')) - script: | set -e - tar -xzvf $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.tar.gz -C $(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/bin + tar -xzvf $(Build.ArtifactStagingDirectory)/cli/*.tar.gz -C $(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/bin if [ "$(VSCODE_QUALITY)" != "stable" ]; then mv "$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/bin/code-tunnel" "$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/bin/code-tunnel-$(VSCODE_QUALITY)" fi diff --git a/build/azure-pipelines/product-build.yml b/build/azure-pipelines/product-build.yml index 419a8c54056..d51073fb0c4 100644 --- a/build/azure-pipelines/product-build.yml +++ b/build/azure-pipelines/product-build.yml @@ -182,20 +182,16 @@ stages: - ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true), eq(parameters.VSCODE_BUILD_LINUX_ALPINE, true)) }}: - job: LinuxX86 pool: vscode-1es-linux - variables: - VSCODE_ARCH: x64 steps: - template: ./linux/cli-build-linux.yml parameters: VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_LINUX_ALPINE: ${{ variables.VSCODE_BUILD_LINUX_ALPINE }} - VSCODE_BUILD_LINUX: ${{ variables.VSCODE_BUILD_LINUX }} + VSCODE_BUILD_LINUX_ALPINE: ${{ parameters.VSCODE_BUILD_LINUX_ALPINE }} + VSCODE_BUILD_LINUX: ${{ parameters.VSCODE_BUILD_LINUX }} - ${{ if or(eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true), eq(parameters.VSCODE_BUILD_LINUX_ALPINE_ARM64, true)) }}: - job: LinuxArm64 pool: vscode-1es-linux-20.04-arm64 - variables: - VSCODE_ARCH: arm64 steps: - task: NodeTool@0 displayName: Install Node.js @@ -210,9 +206,8 @@ stages: - template: ./linux/cli-build-linux.yml parameters: VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ARCH: arm64 - VSCODE_BUILD_LINUX_ALPINE: ${{ variables.VSCODE_BUILD_LINUX_ALPINE }} - VSCODE_BUILD_LINUX: ${{ variables.VSCODE_BUILD_LINUX }} + VSCODE_BUILD_LINUX_ALPINE_ARM64: ${{ parameters.VSCODE_BUILD_LINUX_ALPINE_ARM64 }} + VSCODE_BUILD_LINUX_ARM64: ${{ parameters.VSCODE_BUILD_LINUX_ARM64 }} - ${{ if eq(variables.VSCODE_BUILD_STAGE_MACOS, true) }}: - job: MacOS @@ -222,8 +217,8 @@ stages: - template: ./darwin/cli-build-darwin.yml parameters: VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_MACOS: ${{ variables.VSCODE_BUILD_MACOS }} - VSCODE_BUILD_MACOS_ARM64: ${{ variables.VSCODE_BUILD_MACOS_ARM64 }} + VSCODE_BUILD_MACOS: ${{ parameters.VSCODE_BUILD_MACOS }} + VSCODE_BUILD_MACOS_ARM64: ${{ parameters.VSCODE_BUILD_MACOS_ARM64 }} - ${{ if eq(variables.VSCODE_BUILD_STAGE_WINDOWS, true) }}: - job: Windows @@ -232,8 +227,8 @@ stages: - template: ./win32/cli-build-win32.yml parameters: VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_WIN32: ${{ variables.VSCODE_BUILD_WIN32 }} - VSCODE_BUILD_WIN32_ARM64: ${{ variables.VSCODE_BUILD_WIN32_ARM64 }} + VSCODE_BUILD_WIN32: ${{ parameters.VSCODE_BUILD_WIN32 }} + VSCODE_BUILD_WIN32_ARM64: ${{ parameters.VSCODE_BUILD_WIN32_ARM64 }} - ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_WINDOWS'], true)) }}: - stage: Windows @@ -294,7 +289,7 @@ stages: parameters: VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: ${{ variables.VSCODE_BUILD_TUNNEL_CLI }} + VSCODE_BUILD_TUNNEL_CLI: ${{ parameters.VSCODE_BUILD_TUNNEL_CLI }} VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} VSCODE_RUN_SMOKE_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} @@ -324,7 +319,7 @@ stages: parameters: VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: ${{ variables.VSCODE_BUILD_TUNNEL_CLI }} + VSCODE_BUILD_TUNNEL_CLI: ${{ parameters.VSCODE_BUILD_TUNNEL_CLI }} VSCODE_RUN_UNIT_TESTS: false VSCODE_RUN_INTEGRATION_TESTS: false VSCODE_RUN_SMOKE_TESTS: false @@ -335,8 +330,8 @@ stages: steps: - template: win32/product-build-win32-cli-sign.yml parameters: - VSCODE_BUILD_WIN32: ${{ variables.VSCODE_BUILD_WIN32 }} - VSCODE_BUILD_WIN32_ARM64: ${{ variables.VSCODE_BUILD_WIN32_ARM64 }} + VSCODE_BUILD_WIN32: ${{ parameters.VSCODE_BUILD_WIN32 }} + VSCODE_BUILD_WIN32_ARM64: ${{ parameters.VSCODE_BUILD_WIN32_ARM64 }} - ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_LINUX'], true)) }}: - stage: LinuxServerDependencies @@ -434,7 +429,7 @@ stages: parameters: VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: ${{ variables.VSCODE_BUILD_TUNNEL_CLI }} + VSCODE_BUILD_TUNNEL_CLI: ${{ parameters.VSCODE_BUILD_TUNNEL_CLI }} VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} VSCODE_RUN_SMOKE_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} @@ -487,7 +482,7 @@ stages: parameters: VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: ${{ variables.VSCODE_BUILD_TUNNEL_CLI }} + VSCODE_BUILD_TUNNEL_CLI: ${{ parameters.VSCODE_BUILD_TUNNEL_CLI }} VSCODE_RUN_UNIT_TESTS: false VSCODE_RUN_INTEGRATION_TESTS: false VSCODE_RUN_SMOKE_TESTS: false @@ -583,7 +578,7 @@ stages: parameters: VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: ${{ variables.VSCODE_BUILD_TUNNEL_CLI }} + VSCODE_BUILD_TUNNEL_CLI: ${{ parameters.VSCODE_BUILD_TUNNEL_CLI }} VSCODE_RUN_UNIT_TESTS: false VSCODE_RUN_INTEGRATION_TESTS: false VSCODE_RUN_SMOKE_TESTS: false @@ -632,7 +627,7 @@ stages: parameters: VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: ${{ variables.VSCODE_BUILD_TUNNEL_CLI }} + VSCODE_BUILD_TUNNEL_CLI: ${{ parameters.VSCODE_BUILD_TUNNEL_CLI }} VSCODE_RUN_UNIT_TESTS: false VSCODE_RUN_INTEGRATION_TESTS: false VSCODE_RUN_SMOKE_TESTS: false diff --git a/build/azure-pipelines/win32/cli-build-win32.yml b/build/azure-pipelines/win32/cli-build-win32.yml index 3b5525b930d..2b77bccfd2a 100644 --- a/build/azure-pipelines/win32/cli-build-win32.yml +++ b/build/azure-pipelines/win32/cli-build-win32.yml @@ -9,14 +9,6 @@ parameters: type: string default: stable -variables: - - name: VSCODE_CLI_TARGETS - value: - - ${{ if eq(parameters.VSCODE_BUILD_WIN32, true) }}: - - { target: x86_64-pc-windows-msvc, artifact: unsigned_vscode_cli_win32_x64_cli } - - ${{ if eq(parameters.VSCODE_BUILD_WIN32_ARM64, true) }}: - - { target: aarch64-pc-windows-msvc, artifact: unsigned_vscode_cli_win32_arm64_cli } - steps: - task: NodeTool@0 inputs: @@ -36,7 +28,11 @@ steps: - template: ../cli/install-rust-win32.yml parameters: - targets: ${{ parameters.VSCODE_CLI_TARGETS }} + targets: + - ${{ if eq(parameters.VSCODE_BUILD_WIN32, true) }}: + - x86_64-pc-windows-msvc + - ${{ if eq(parameters.VSCODE_BUILD_WIN32_ARM64, true) }}: + - aarch64-pc-windows-msvc - template: ../vcpkg-install.yml parameters: @@ -48,31 +44,20 @@ steps: vcpkgDir: $(Build.SourcesDirectory)/build/azure-pipelines/cli/vcpkg targetDirectory: $(Build.ArtifactStagingDirectory)/deps - - ${{ each target in parameters.VSCODE_CLI_TARGETS }}: - - script: cargo build --release --target ${{ target.target }} --bin=code-tunnel - displayName: Compile ${{ target.artifact }} - workingDirectory: $(Build.SourcesDirectory)/cli - env: - VSCODE_CLI_VERSION: $(VSCODE_CLI_VERSION) - VSCODE_CLI_REMOTE_LICENSE_TEXT: $(VSCODE_CLI_REMOTE_LICENSE_TEXT) - VSCODE_CLI_REMOTE_LICENSE_PROMPT: $(VSCODE_CLI_REMOTE_LICENSE_PROMPT) - VSCODE_CLI_ASSET_NAME: ${{ target.artifact }} - VSCODE_CLI_AI_KEY: $(VSCODE_CLI_AI_KEY) - VSCODE_CLI_AI_ENDPOINT: $(VSCODE_CLI_AI_ENDPOINT) - ${{ if eq(target, 'x86_64-pc-windows-msvc') }}: + - ${{ if eq(parameters.VSCODE_BUILD_WIN32, true) }}: + - template: ../cli/cli-compile-and-publish.yml + parameters: + VSCODE_CLI_TARGET: x86_64-pc-windows-msvc + VSCODE_CLI_ARTIFACT: unsigned_vscode_cli_win32_x64_cli + VSCODE_CLI_ENV: OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/deps/x64-windows-static-md/lib OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/deps/x64-windows-static-md/include - ${{ if eq(target, 'aarch64-pc-windows-msvc') }}: + + - ${{ if eq(parameters.VSCODE_BUILD_WIN32_ARM64, true) }}: + - template: ../cli/cli-compile-and-publish.yml + parameters: + VSCODE_CLI_TARGET: aarch64-pc-windows-msvc + VSCODE_CLI_ARTIFACT: unsigned_vscode_cli_win32_arm64_cli + VSCODE_CLI_ENV: OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/deps/arm64-windows-static-md/lib OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/deps/arm64-windows-static-md/include - - - task: ArchiveFiles@2 - inputs: - rootFolderOrFile: $(Build.SourcesDirectory)/cli/target/${{ target.target }}/release/code-tunnel.exe - includeRootFolder: false - archiveType: zip - archiveFile: $(Build.ArtifactStagingDirectory)/${{ target.artifact }}.zip - - - publish: $(Build.ArtifactStagingDirectory)/${{ target.artifact }}.zip - artifact: ${{ target.artifact }} - displayName: Publish ${{ target.artifact }} artifact diff --git a/build/azure-pipelines/win32/product-build-win32-cli-sign.yml b/build/azure-pipelines/win32/product-build-win32-cli-sign.yml index f1b2e80a117..ee493bc6f05 100644 --- a/build/azure-pipelines/win32/product-build-win32-cli-sign.yml +++ b/build/azure-pipelines/win32/product-build-win32-cli-sign.yml @@ -4,13 +4,6 @@ parameters: - name: VSCODE_BUILD_WIN32_ARM64 type: boolean -variables: - - name: VSCODE_CLI_ARTIFACTS - value: - - ${{ if eq(parameters.VSCODE_BUILD_WIN32, true) }}: - - unsigned_vscode_cli_win32_x64_cli - - ${{ if eq(parameters.VSCODE_BUILD_WIN32_ARM64, true) }}: - - unsigned_vscode_cli_win32_arm64_cli steps: - task: NodeTool@0 displayName: "Use Node.js" @@ -23,62 +16,10 @@ steps: exec { yarn } displayName: Install build dependencies - - task: AzureKeyVault@1 - displayName: "Azure Key Vault: Get Secrets" - inputs: - azureSubscription: "vscode-builds-subscription" - KeyVaultName: vscode - SecretsFilter: "ESRP-PKI,esrp-aad-username,esrp-aad-password" - - - ${{ each target in variables.VSCODE_CLI_ARTIFACTS }}: - - task: DownloadPipelineArtifact@2 - displayName: Download artifacts - inputs: - artifact: ${{ target }} - path: $(Build.ArtifactStagingDirectory)/pkg/${{ target }} - - - task: ExtractFiles@1 - inputs: - archiveFilePatterns: $(Build.ArtifactStagingDirectory)/pkg/${{ target }}/*.zip - destinationFolder: $(Build.ArtifactStagingDirectory)/sign/${{ target }} - - - task: UseDotNet@2 - displayName: "Use .NET" - inputs: - version: 3.x - - - task: EsrpClientTool@1 - displayName: "Use ESRP client" - - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - $EsrpClientTool = (gci -directory -filter EsrpClientTool_* $(Agent.RootDirectory)\_tasks | Select-Object -last 1).FullName - $EsrpCliZip = (gci -recurse -filter esrpcli.*.zip $EsrpClientTool | Select-Object -last 1).FullName - mkdir -p $(Agent.TempDirectory)\esrpcli - Expand-Archive -Path $EsrpCliZip -DestinationPath $(Agent.TempDirectory)\esrpcli - $EsrpCliDllPath = (gci -recurse -filter esrpcli.dll $(Agent.TempDirectory)\esrpcli | Select-Object -last 1).FullName - echo "##vso[task.setvariable variable=EsrpCliDllPath]$EsrpCliDllPath" - displayName: Find ESRP CLI - - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { node build\azure-pipelines\common\sign $env:EsrpCliDllPath windows $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(Build.ArtifactStagingDirectory)/sign "*.exe" } - displayName: "Code sign" - - - ${{ each target in parameters.VSCODE_CLI_ARTIFACTS }}: - - powershell: | - $ASSET_ID = "${{ target }}".replace("unsigned_", ""); - echo "##vso[task.setvariable variable=ASSET_ID]$ASSET_ID" - displayName: Set asset id variable - - - task: ArchiveFiles@2 - inputs: - rootFolderOrFile: $(Build.ArtifactStagingDirectory)/sign/${{ target }}/code-tunnel.exe - includeRootFolder: false - archiveType: zip - archiveFile: $(Build.ArtifactStagingDirectory)/$(ASSET_ID).zip - - - publish: $(Build.ArtifactStagingDirectory)/$(ASSET_ID).zip - artifact: $(ASSET_ID) + - template: ../cli/cli-win32-sign.yml + parameters: + VSCODE_CLI_ARTIFACTS: + - ${{ if eq(parameters.VSCODE_BUILD_WIN32, true) }}: + - unsigned_vscode_cli_win32_x64_cli + - ${{ if eq(parameters.VSCODE_BUILD_WIN32_ARM64, true) }}: + - unsigned_vscode_cli_win32_arm64_cli diff --git a/build/azure-pipelines/win32/product-build-win32.yml b/build/azure-pipelines/win32/product-build-win32.yml index 6827c27d5eb..0c0bcf8b40b 100644 --- a/build/azure-pipelines/win32/product-build-win32.yml +++ b/build/azure-pipelines/win32/product-build-win32.yml @@ -180,17 +180,24 @@ steps: - ${{ if eq(parameters.VSCODE_BUILD_TUNNEL_CLI, true) }}: - task: DownloadPipelineArtifact@2 inputs: - ${{ if eq(variables.VSCODE_ARCH, 'x64') }}: - artifact: unsigned_vscode_cli_win32_x64_cli - ${{ if eq(variables.VSCODE_ARCH, 'arm64') }}: - artifact: unsigned_vscode_cli_win32_arm64_cli + artifact: unsigned_vscode_cli_win32_arm64_cli patterns: '**' - path: $(Build.ArtifactStagingDirectory) + path: $(Build.ArtifactStagingDirectory)/cli displayName: Download VS Code CLI + condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64')) + + - task: DownloadPipelineArtifact@2 + inputs: + artifact: unsigned_vscode_cli_win32_x64_cli + patterns: '**' + path: $(Build.ArtifactStagingDirectory)/cli + displayName: Download VS Code CLI + condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64')) - powershell: | . build/azure-pipelines/win32/exec.ps1 - Expand-Archive -Path "$(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.zip" -DestinationPath "$(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)/bin" + $ArtifactName = (gci -Path "$(Build.ArtifactStagingDirectory)/cli" | Select-Object -last 1).FullName + Expand-Archive -Path $ArtifactName -DestinationPath "$(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)/bin" if ("$(VSCODE_QUALITY)" -ne "stable") {