Path: blob/main/build/azure-pipelines/cli/cli-compile.yml
3520 views
parameters:1- name: VSCODE_QUALITY2type: string3- name: VSCODE_CLI_TARGET4type: string5- name: VSCODE_CLI_ARTIFACT6type: string7- name: VSCODE_CLI_ENV8type: object9default: {}10- name: VSCODE_CHECK_ONLY11type: boolean12default: false1314steps:15- ${{ if contains(parameters.VSCODE_CLI_TARGET, '-windows-') }}:16- pwsh: Write-Host "##vso[task.setvariable variable=VSCODE_CLI_PRODUCT_JSON]$(Build.SourcesDirectory)/.build/distro/mixin/${{ parameters.VSCODE_QUALITY }}/product.json"17displayName: Set product.json path18- ${{ else }}:19- script: echo "##vso[task.setvariable variable=VSCODE_CLI_PRODUCT_JSON]$(Build.SourcesDirectory)/.build/distro/mixin/${{ parameters.VSCODE_QUALITY }}/product.json"20displayName: Set product.json path2122- ${{ if parameters.VSCODE_CHECK_ONLY }}:23- script: cargo clippy --target ${{ parameters.VSCODE_CLI_TARGET }} --bin=code24displayName: Lint ${{ parameters.VSCODE_CLI_TARGET }}25workingDirectory: $(Build.SourcesDirectory)/cli26env:27CARGO_NET_GIT_FETCH_WITH_CLI: true28${{ each pair in parameters.VSCODE_CLI_ENV }}:29${{ pair.key }}: ${{ pair.value }}3031- ${{ else }}:32- ${{ if contains(parameters.VSCODE_CLI_TARGET, '-linux-') }}:33- script: |34set -e35if [ -n "$SYSROOT_ARCH" ]; then36export VSCODE_SYSROOT_DIR=$(Build.SourcesDirectory)/.build/sysroots37node -e '(async () => { const { getVSCodeSysroot } = require("../build/linux/debian/install-sysroot.js"); await getVSCodeSysroot(process.env["SYSROOT_ARCH"], process.env["IS_MUSL"] === "1"); })()'38if [ "$SYSROOT_ARCH" == "arm64" ]; then39if [ -n "$IS_MUSL" ]; then40export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER="$VSCODE_SYSROOT_DIR/output/bin/aarch64-linux-musl-gcc"41export CC_aarch64_unknown_linux_musl="$VSCODE_SYSROOT_DIR/output/bin/aarch64-linux-musl-gcc"42export CXX_aarch64_unknown_linux_musl="$VSCODE_SYSROOT_DIR/output/bin/aarch64-linux-musl-g++"43else44export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER="$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc"45export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUSTFLAGS="-C link-arg=--sysroot=$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot"46export CC_aarch64_unknown_linux_gnu="$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc --sysroot=$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot"47export PKG_CONFIG_LIBDIR_aarch64_unknown_linux_gnu="$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot/usr/lib/aarch64-linux-gnu/pkgconfig:$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot/usr/share/pkgconfig"48export PKG_CONFIG_SYSROOT_DIR_aarch64_unknown_linux_gnu="$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot"49export OBJDUMP="$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/bin/objdump"50fi51elif [ "$SYSROOT_ARCH" == "amd64" ]; then52export CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER="$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/bin/x86_64-linux-gnu-gcc"53export CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS="-C link-arg=--sysroot=$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot -C link-arg=-L$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/usr/lib/x86_64-linux-gnu"54export CC_x86_64_unknown_linux_gnu="$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/bin/x86_64-linux-gnu-gcc --sysroot=$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot"55export PKG_CONFIG_LIBDIR_x86_64_unknown_linux_gnu="$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/usr/lib/x86_64-linux-gnu/pkgconfig:$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/usr/share/pkgconfig"56export PKG_CONFIG_SYSROOT_DIR_x86_64_unknown_linux_gnu="$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot"57export OBJDUMP="$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/bin/objdump"58elif [ "$SYSROOT_ARCH" == "armhf" ]; then59export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER="$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/bin/arm-rpi-linux-gnueabihf-gcc"60export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_RUSTFLAGS="-C link-arg=--sysroot=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot"61export CC_armv7_unknown_linux_gnueabihf="$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/bin/arm-rpi-linux-gnueabihf-gcc --sysroot=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot"62export PKG_CONFIG_LIBDIR_armv7_unknown_linux_gnueabihf="$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot/usr/lib/arm-rpi-linux-gnueabihf/pkgconfig:$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot/usr/share/pkgconfig"63export PKG_CONFIG_SYSROOT_DIR_armv7_unknown_linux_gnueabihf="$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot"64export OBJDUMP="$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/bin/objdump"65fi66fi6768cargo build --release --target ${{ parameters.VSCODE_CLI_TARGET }} --bin=code6970# verify glibc requirement71if [ -n "$SYSROOT_ARCH" ] && [ -n "$OBJDUMP" ]; then72glibc_version="2.28"73while IFS= read -r line; do74if [[ $line == *"GLIBC_"* ]]; then75version=$(echo "$line" | awk '{print $5}' | tr -d '()')76version=${version#*_}77if [[ $(printf "%s\n%s" "$version" "$glibc_version" | sort -V | tail -n1) == "$version" ]]; then78glibc_version=$version79fi80fi81done < <("$OBJDUMP" -T "$PWD/target/${{ parameters.VSCODE_CLI_TARGET }}/release/code")82if [[ "$glibc_version" != "2.28" ]]; then83echo "Error: binary has dependency on GLIBC > 2.28, found $glibc_version"84exit 185else86echo "Maximum GLIBC version is $glibc_version as expected."87fi88fi89displayName: Compile ${{ parameters.VSCODE_CLI_TARGET }}90workingDirectory: $(Build.SourcesDirectory)/cli91env:92CARGO_NET_GIT_FETCH_WITH_CLI: true93VSCODE_CLI_COMMIT: $(Build.SourceVersion)94GITHUB_TOKEN: "$(github-distro-mixin-password)"95${{ each pair in parameters.VSCODE_CLI_ENV }}:96${{ pair.key }}: ${{ pair.value }}9798- ${{ else }}:99- script: cargo build --release --target ${{ parameters.VSCODE_CLI_TARGET }} --bin=code100displayName: Compile ${{ parameters.VSCODE_CLI_TARGET }}101workingDirectory: $(Build.SourcesDirectory)/cli102env:103CARGO_NET_GIT_FETCH_WITH_CLI: true104VSCODE_CLI_COMMIT: $(Build.SourceVersion)105${{ each pair in parameters.VSCODE_CLI_ENV }}:106${{ pair.key }}: ${{ pair.value }}107108- ${{ if contains(parameters.VSCODE_CLI_TARGET, '-windows-') }}:109- task: PublishSymbols@2110inputs:111IndexSources: false112SymbolsFolder: $(Build.SourcesDirectory)/cli/target/${{ parameters.VSCODE_CLI_TARGET }}/release113SearchPattern: 'code.pdb'114SymbolServerType: TeamServices115SymbolsProduct: 'code'116ArtifactServices.Symbol.AccountName: microsoft117ArtifactServices.Symbol.PAT: $(System.AccessToken)118ArtifactServices.Symbol.UseAAD: false119displayName: Publish Symbols120121- powershell: |122. build/azure-pipelines/win32/exec.ps1123$ErrorActionPreference = "Stop"124$AppProductJson = Get-Content -Raw -Path "$env:VSCODE_CLI_PRODUCT_JSON" | ConvertFrom-Json125$env:VSCODE_CLI_APPLICATION_NAME = $AppProductJson.applicationName126127Write-Host "##vso[task.setvariable variable=VSCODE_CLI_APPLICATION_NAME]$env:VSCODE_CLI_APPLICATION_NAME"128129New-Item -ItemType Directory -Force -Path "$(Build.ArtifactStagingDirectory)/cli"130Move-Item -Path $(Build.SourcesDirectory)/cli/target/${{ parameters.VSCODE_CLI_TARGET }}/release/code.exe -Destination "$(Build.ArtifactStagingDirectory)/cli/${env:VSCODE_CLI_APPLICATION_NAME}.exe"131displayName: Stage CLI132133- task: ArchiveFiles@2134displayName: Archive CLI135inputs:136rootFolderOrFile: $(Build.ArtifactStagingDirectory)/cli/$(VSCODE_CLI_APPLICATION_NAME).exe137includeRootFolder: false138archiveType: zip139archiveFile: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.zip140141- ${{ else }}:142- script: |143set -e144VSCODE_CLI_APPLICATION_NAME=$(node -p "require(\"$VSCODE_CLI_PRODUCT_JSON\").applicationName")145echo "##vso[task.setvariable variable=VSCODE_CLI_APPLICATION_NAME]$VSCODE_CLI_APPLICATION_NAME"146147mkdir -p $(Build.ArtifactStagingDirectory)/cli148mv $(Build.SourcesDirectory)/cli/target/${{ parameters.VSCODE_CLI_TARGET }}/release/code $(Build.ArtifactStagingDirectory)/cli/$VSCODE_CLI_APPLICATION_NAME149displayName: Stage CLI150151- task: ArchiveFiles@2152displayName: Archive CLI153inputs:154rootFolderOrFile: $(Build.ArtifactStagingDirectory)/cli/$(VSCODE_CLI_APPLICATION_NAME)155includeRootFolder: false156${{ if contains(parameters.VSCODE_CLI_TARGET, '-darwin') }}:157archiveType: zip158archiveFile: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.zip159${{ else }}:160archiveType: tar161tarCompression: gz162archiveFile: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.tar.gz163164165