Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/build/azure-pipelines/cli/cli-compile.yml
3520 views
1
parameters:
2
- name: VSCODE_QUALITY
3
type: string
4
- name: VSCODE_CLI_TARGET
5
type: string
6
- name: VSCODE_CLI_ARTIFACT
7
type: string
8
- name: VSCODE_CLI_ENV
9
type: object
10
default: {}
11
- name: VSCODE_CHECK_ONLY
12
type: boolean
13
default: false
14
15
steps:
16
- ${{ if contains(parameters.VSCODE_CLI_TARGET, '-windows-') }}:
17
- pwsh: Write-Host "##vso[task.setvariable variable=VSCODE_CLI_PRODUCT_JSON]$(Build.SourcesDirectory)/.build/distro/mixin/${{ parameters.VSCODE_QUALITY }}/product.json"
18
displayName: Set product.json path
19
- ${{ else }}:
20
- script: echo "##vso[task.setvariable variable=VSCODE_CLI_PRODUCT_JSON]$(Build.SourcesDirectory)/.build/distro/mixin/${{ parameters.VSCODE_QUALITY }}/product.json"
21
displayName: Set product.json path
22
23
- ${{ if parameters.VSCODE_CHECK_ONLY }}:
24
- script: cargo clippy --target ${{ parameters.VSCODE_CLI_TARGET }} --bin=code
25
displayName: Lint ${{ parameters.VSCODE_CLI_TARGET }}
26
workingDirectory: $(Build.SourcesDirectory)/cli
27
env:
28
CARGO_NET_GIT_FETCH_WITH_CLI: true
29
${{ each pair in parameters.VSCODE_CLI_ENV }}:
30
${{ pair.key }}: ${{ pair.value }}
31
32
- ${{ else }}:
33
- ${{ if contains(parameters.VSCODE_CLI_TARGET, '-linux-') }}:
34
- script: |
35
set -e
36
if [ -n "$SYSROOT_ARCH" ]; then
37
export VSCODE_SYSROOT_DIR=$(Build.SourcesDirectory)/.build/sysroots
38
node -e '(async () => { const { getVSCodeSysroot } = require("../build/linux/debian/install-sysroot.js"); await getVSCodeSysroot(process.env["SYSROOT_ARCH"], process.env["IS_MUSL"] === "1"); })()'
39
if [ "$SYSROOT_ARCH" == "arm64" ]; then
40
if [ -n "$IS_MUSL" ]; then
41
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER="$VSCODE_SYSROOT_DIR/output/bin/aarch64-linux-musl-gcc"
42
export CC_aarch64_unknown_linux_musl="$VSCODE_SYSROOT_DIR/output/bin/aarch64-linux-musl-gcc"
43
export CXX_aarch64_unknown_linux_musl="$VSCODE_SYSROOT_DIR/output/bin/aarch64-linux-musl-g++"
44
else
45
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER="$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc"
46
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUSTFLAGS="-C link-arg=--sysroot=$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot"
47
export 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"
48
export 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"
49
export PKG_CONFIG_SYSROOT_DIR_aarch64_unknown_linux_gnu="$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot"
50
export OBJDUMP="$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/bin/objdump"
51
fi
52
elif [ "$SYSROOT_ARCH" == "amd64" ]; then
53
export CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER="$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/bin/x86_64-linux-gnu-gcc"
54
export 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"
55
export 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"
56
export 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"
57
export PKG_CONFIG_SYSROOT_DIR_x86_64_unknown_linux_gnu="$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot"
58
export OBJDUMP="$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/bin/objdump"
59
elif [ "$SYSROOT_ARCH" == "armhf" ]; then
60
export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER="$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/bin/arm-rpi-linux-gnueabihf-gcc"
61
export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_RUSTFLAGS="-C link-arg=--sysroot=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot"
62
export 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"
63
export 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"
64
export PKG_CONFIG_SYSROOT_DIR_armv7_unknown_linux_gnueabihf="$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot"
65
export OBJDUMP="$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/bin/objdump"
66
fi
67
fi
68
69
cargo build --release --target ${{ parameters.VSCODE_CLI_TARGET }} --bin=code
70
71
# verify glibc requirement
72
if [ -n "$SYSROOT_ARCH" ] && [ -n "$OBJDUMP" ]; then
73
glibc_version="2.28"
74
while IFS= read -r line; do
75
if [[ $line == *"GLIBC_"* ]]; then
76
version=$(echo "$line" | awk '{print $5}' | tr -d '()')
77
version=${version#*_}
78
if [[ $(printf "%s\n%s" "$version" "$glibc_version" | sort -V | tail -n1) == "$version" ]]; then
79
glibc_version=$version
80
fi
81
fi
82
done < <("$OBJDUMP" -T "$PWD/target/${{ parameters.VSCODE_CLI_TARGET }}/release/code")
83
if [[ "$glibc_version" != "2.28" ]]; then
84
echo "Error: binary has dependency on GLIBC > 2.28, found $glibc_version"
85
exit 1
86
else
87
echo "Maximum GLIBC version is $glibc_version as expected."
88
fi
89
fi
90
displayName: Compile ${{ parameters.VSCODE_CLI_TARGET }}
91
workingDirectory: $(Build.SourcesDirectory)/cli
92
env:
93
CARGO_NET_GIT_FETCH_WITH_CLI: true
94
VSCODE_CLI_COMMIT: $(Build.SourceVersion)
95
GITHUB_TOKEN: "$(github-distro-mixin-password)"
96
${{ each pair in parameters.VSCODE_CLI_ENV }}:
97
${{ pair.key }}: ${{ pair.value }}
98
99
- ${{ else }}:
100
- script: cargo build --release --target ${{ parameters.VSCODE_CLI_TARGET }} --bin=code
101
displayName: Compile ${{ parameters.VSCODE_CLI_TARGET }}
102
workingDirectory: $(Build.SourcesDirectory)/cli
103
env:
104
CARGO_NET_GIT_FETCH_WITH_CLI: true
105
VSCODE_CLI_COMMIT: $(Build.SourceVersion)
106
${{ each pair in parameters.VSCODE_CLI_ENV }}:
107
${{ pair.key }}: ${{ pair.value }}
108
109
- ${{ if contains(parameters.VSCODE_CLI_TARGET, '-windows-') }}:
110
- task: PublishSymbols@2
111
inputs:
112
IndexSources: false
113
SymbolsFolder: $(Build.SourcesDirectory)/cli/target/${{ parameters.VSCODE_CLI_TARGET }}/release
114
SearchPattern: 'code.pdb'
115
SymbolServerType: TeamServices
116
SymbolsProduct: 'code'
117
ArtifactServices.Symbol.AccountName: microsoft
118
ArtifactServices.Symbol.PAT: $(System.AccessToken)
119
ArtifactServices.Symbol.UseAAD: false
120
displayName: Publish Symbols
121
122
- powershell: |
123
. build/azure-pipelines/win32/exec.ps1
124
$ErrorActionPreference = "Stop"
125
$AppProductJson = Get-Content -Raw -Path "$env:VSCODE_CLI_PRODUCT_JSON" | ConvertFrom-Json
126
$env:VSCODE_CLI_APPLICATION_NAME = $AppProductJson.applicationName
127
128
Write-Host "##vso[task.setvariable variable=VSCODE_CLI_APPLICATION_NAME]$env:VSCODE_CLI_APPLICATION_NAME"
129
130
New-Item -ItemType Directory -Force -Path "$(Build.ArtifactStagingDirectory)/cli"
131
Move-Item -Path $(Build.SourcesDirectory)/cli/target/${{ parameters.VSCODE_CLI_TARGET }}/release/code.exe -Destination "$(Build.ArtifactStagingDirectory)/cli/${env:VSCODE_CLI_APPLICATION_NAME}.exe"
132
displayName: Stage CLI
133
134
- task: ArchiveFiles@2
135
displayName: Archive CLI
136
inputs:
137
rootFolderOrFile: $(Build.ArtifactStagingDirectory)/cli/$(VSCODE_CLI_APPLICATION_NAME).exe
138
includeRootFolder: false
139
archiveType: zip
140
archiveFile: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.zip
141
142
- ${{ else }}:
143
- script: |
144
set -e
145
VSCODE_CLI_APPLICATION_NAME=$(node -p "require(\"$VSCODE_CLI_PRODUCT_JSON\").applicationName")
146
echo "##vso[task.setvariable variable=VSCODE_CLI_APPLICATION_NAME]$VSCODE_CLI_APPLICATION_NAME"
147
148
mkdir -p $(Build.ArtifactStagingDirectory)/cli
149
mv $(Build.SourcesDirectory)/cli/target/${{ parameters.VSCODE_CLI_TARGET }}/release/code $(Build.ArtifactStagingDirectory)/cli/$VSCODE_CLI_APPLICATION_NAME
150
displayName: Stage CLI
151
152
- task: ArchiveFiles@2
153
displayName: Archive CLI
154
inputs:
155
rootFolderOrFile: $(Build.ArtifactStagingDirectory)/cli/$(VSCODE_CLI_APPLICATION_NAME)
156
includeRootFolder: false
157
${{ if contains(parameters.VSCODE_CLI_TARGET, '-darwin') }}:
158
archiveType: zip
159
archiveFile: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.zip
160
${{ else }}:
161
archiveType: tar
162
tarCompression: gz
163
archiveFile: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.tar.gz
164
165