Skip to content

Commit 7f0d8a2

Browse files
committed
ci: also test with MS Visual C on Azure Pipelines
... because we can, now. We specifically reduce the number of parallel links for MSVC, as RAM usage is an issue with MSVC's parallel mode, manifested in the symptom: fatal error LNK1318: Unexpected PDB error; OK (0) '' Signed-off-by: Johannes Schindelin <[email protected]>
1 parent f349423 commit 7f0d8a2

File tree

3 files changed

+154
-2
lines changed

3 files changed

+154
-2
lines changed

Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3027,6 +3027,10 @@ rpm::
30273027
@false
30283028
.PHONY: rpm
30293029

3030+
ifneq ($(INCLUDE_DLLS_IN_ARTIFACTS),)
3031+
OTHER_PROGRAMS += $(shell echo *.dll t/helper/*.dll)
3032+
endif
3033+
30303034
artifacts-tar:: $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) $(OTHER_PROGRAMS) \
30313035
GIT-BUILD-OPTIONS $(TEST_PROGRAMS) $(test_bindir_programs) \
30323036
$(MOFILES)

azure-pipelines.yml

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,147 @@ jobs:
130130
PathtoPublish: t/failed-test-artifacts
131131
ArtifactName: failed-test-artifacts
132132

133+
- job: msvc_build
134+
displayName: Windows (MSVC) Build
135+
condition: succeeded()
136+
pool: Hosted VS2017
137+
timeoutInMinutes: 240
138+
steps:
139+
- powershell: |
140+
if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
141+
net use s: \\gitfileshare.file.core.windows.net\test-cache "$GITFILESHAREPWD" /user:AZURE\gitfileshare /persistent:no
142+
cmd /c mklink /d "$(Build.SourcesDirectory)\test-cache" S:\
143+
}
144+
displayName: 'Mount test-cache'
145+
env:
146+
GITFILESHAREPWD: $(gitfileshare.pwd)
147+
- powershell: |
148+
$urlbase = "https://dev.azure.com/git/git/_apis/build/builds"
149+
$id = ((Invoke-WebRequest -UseBasicParsing "${urlbase}?definitions=9&statusFilter=completed&resultFilter=succeeded&`$top=1").content | ConvertFrom-JSON).value[0].id
150+
$downloadUrl = ((Invoke-WebRequest -UseBasicParsing "${urlbase}/$id/artifacts").content | ConvertFrom-JSON).value[0].resource.downloadUrl
151+
(New-Object Net.WebClient).DownloadFile($downloadUrl, "compat.zip")
152+
Expand-Archive compat.zip -DestinationPath . -Force
153+
Remove-Item compat.zip
154+
displayName: 'Download vcpkg artifacts'
155+
- powershell: |
156+
$urlbase = "https://dev.azure.com/git-for-windows/git/_apis/build/builds"
157+
$id = ((Invoke-WebRequest -UseBasicParsing "${urlbase}?definitions=22&statusFilter=completed&resultFilter=succeeded&`$top=1").content | ConvertFrom-JSON).value[0].id
158+
$downloadUrl = ((Invoke-WebRequest -UseBasicParsing "${urlbase}/$id/artifacts").content | ConvertFrom-JSON).value[1].resource.downloadUrl
159+
(New-Object Net.WebClient).DownloadFile($downloadUrl, "git-sdk-64-minimal.zip")
160+
Expand-Archive git-sdk-64-minimal.zip -DestinationPath . -Force
161+
Remove-Item git-sdk-64-minimal.zip
162+
163+
# Let Git ignore the SDK and the test-cache
164+
"/git-sdk-64-minimal/`n/test-cache/`n" | Out-File -NoNewLine -Encoding ascii -Append "$(Build.SourcesDirectory)\.git\info\exclude"
165+
displayName: 'Download git-sdk-64-minimal'
166+
- powershell: |
167+
& compat\vcbuild\vcpkg_copy_dlls.bat release
168+
if (!$?) { exit(1) }
169+
& git-sdk-64-minimal\usr\bin\bash.exe -lc @"
170+
INCLUDE_DLLS_IN_ARTIFACTS=YesPlease \
171+
ci/make-test-artifacts.sh artifacts
172+
"@
173+
if (!$?) { exit(1) }
174+
displayName: Build
175+
env:
176+
HOME: $(Build.SourcesDirectory)
177+
MSYSTEM: MINGW64
178+
DEVELOPER: 1
179+
NO_PERL: 1
180+
MSVC: 1
181+
VCPKG_ROOT: $(Build.SourcesDirectory)\compat\vcbuild\vcpkg
182+
- task: PublishPipelineArtifact@0
183+
displayName: 'Publish Pipeline Artifact: MSVC test artifacts'
184+
inputs:
185+
artifactName: 'msvc-artifacts'
186+
targetPath: '$(Build.SourcesDirectory)\artifacts'
187+
- task: PublishPipelineArtifact@0
188+
displayName: 'Publish Pipeline Artifact: git-sdk-64-min-msvc'
189+
inputs:
190+
artifactName: 'git-sdk-64-min-msvc'
191+
targetPath: '$(Build.SourcesDirectory)\git-sdk-64-minimal'
192+
- powershell: |
193+
if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
194+
cmd /c rmdir "$(Build.SourcesDirectory)\test-cache"
195+
}
196+
displayName: 'Unmount test-cache'
197+
condition: true
198+
env:
199+
GITFILESHAREPWD: $(gitfileshare.pwd)
200+
201+
- job: msvc_test
202+
displayName: Windows (MSVC) Test
203+
dependsOn: msvc_build
204+
condition: succeeded()
205+
pool: Hosted
206+
timeoutInMinutes: 240
207+
strategy:
208+
parallel: 10
209+
steps:
210+
- powershell: |
211+
if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
212+
net use s: \\gitfileshare.file.core.windows.net\test-cache "$GITFILESHAREPWD" /user:AZURE\gitfileshare /persistent:no
213+
cmd /c mklink /d "$(Build.SourcesDirectory)\test-cache" S:\
214+
}
215+
displayName: 'Mount test-cache'
216+
env:
217+
GITFILESHAREPWD: $(gitfileshare.pwd)
218+
- task: DownloadPipelineArtifact@0
219+
displayName: 'Download Pipeline Artifact: MSVC test artifacts'
220+
inputs:
221+
artifactName: 'msvc-artifacts'
222+
targetPath: '$(Build.SourcesDirectory)'
223+
- task: DownloadPipelineArtifact@0
224+
displayName: 'Download Pipeline Artifact: git-sdk-64-min-msvc'
225+
inputs:
226+
artifactName: 'git-sdk-64-min-msvc'
227+
targetPath: '$(Build.SourcesDirectory)\git-sdk-64-minimal'
228+
- powershell: |
229+
& git-sdk-64-minimal\usr\bin\bash.exe -lc @"
230+
test -f artifacts.tar.gz || {
231+
echo No test artifacts found\; skipping >&2
232+
exit 0
233+
}
234+
tar xf artifacts.tar.gz || exit 1
235+
236+
# Let Git ignore the SDK and the test-cache
237+
printf '%s\n' /git-sdk-64-minimal/ /test-cache/ >>.git/info/exclude
238+
239+
ci/run-test-slice.sh `$SYSTEM_JOBPOSITIONINPHASE `$SYSTEM_TOTALJOBSINPHASE || {
240+
ci/print-test-failures.sh
241+
exit 1
242+
}
243+
"@
244+
if (!$?) { exit(1) }
245+
displayName: 'Test (parallel)'
246+
env:
247+
HOME: $(Build.SourcesDirectory)
248+
MSYSTEM: MINGW64
249+
NO_SVN_TESTS: 1
250+
GIT_TEST_SKIP_REBASE_P: 1
251+
- powershell: |
252+
if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
253+
cmd /c rmdir "$(Build.SourcesDirectory)\test-cache"
254+
}
255+
displayName: 'Unmount test-cache'
256+
condition: true
257+
env:
258+
GITFILESHAREPWD: $(gitfileshare.pwd)
259+
- task: PublishTestResults@2
260+
displayName: 'Publish Test Results **/TEST-*.xml'
261+
inputs:
262+
mergeTestResults: true
263+
testRunTitle: 'msvc'
264+
platform: Windows
265+
publishRunAttachments: false
266+
condition: succeededOrFailed()
267+
- task: PublishBuildArtifacts@1
268+
displayName: 'Publish trash directories of failed tests'
269+
condition: failed()
270+
inputs:
271+
PathtoPublish: t/failed-test-artifacts
272+
ArtifactName: failed-msvc-test-artifacts
273+
133274
- job: linux_clang
134275
displayName: linux-clang
135276
condition: succeeded()

ci/lib.sh

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,13 @@ then
116116
CI_OS_NAME="$(echo "$AGENT_OS" | tr A-Z a-z)"
117117
test darwin != "$CI_OS_NAME" || CI_OS_NAME=osx
118118
CI_REPO_SLUG="$(expr "$BUILD_REPOSITORY_URI" : '.*/\([^/]*/[^/]*\)$')"
119+
jobs=10
120+
if test -n "$MSVC"
121+
then
122+
CC=compat/vcbuild/scripts/clink.pl
123+
jobname=windows-msvc
124+
jobs=4
125+
fi
119126
CC="${CC:-gcc}"
120127

121128
# use a subdirectory of the cache dir (because the file share is shared
@@ -127,9 +134,9 @@ then
127134
}
128135

129136
BREW_INSTALL_PACKAGES=gcc@8
130-
export GIT_PROVE_OPTS="--timer --jobs 10 --state=failed,slow,save"
137+
export GIT_PROVE_OPTS="--timer --jobs $jobs --state=failed,slow,save"
131138
export GIT_TEST_OPTS="--verbose-log -x --write-junit-xml"
132-
MAKEFLAGS="$MAKEFLAGS --jobs=10"
139+
MAKEFLAGS="$MAKEFLAGS --jobs=$jobs"
133140
test windows_nt != "$CI_OS_NAME" ||
134141
GIT_TEST_OPTS="--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS"
135142
else

0 commit comments

Comments
 (0)