Skip to content

Commit ee76f29

Browse files
authored
Enable docker on java docindex, release and unified pipeline (Azure#26009)
1 parent 4f22a3e commit ee76f29

File tree

3 files changed

+66
-9
lines changed

3 files changed

+66
-9
lines changed

eng/pipelines/docindex.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,4 +106,4 @@ jobs:
106106
-Project "Content%20CI"
107107
-DefinitionId 3188
108108
-Base64EncodedAuthToken "$(azuresdk-apidrop-devops-queue-build-pat)"
109-
-BuildParametersJson (@{ params = (Get-Content ./eng/dailydocsconfig.json -Raw) -replace '%%DailyDocsBranchName%%', "$(DailyDocsBranchName)" } | ConvertTo-Json)
109+
-BuildParametersJson (@{ params = (Get-Content ./eng/dailydocsconfig.json -Raw) -replace '%%DailyDocsBranchName%%', "$(DailyDocsBranchName)" } | ConvertTo-Json)

eng/pipelines/templates/stages/archetype-java-release.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,9 @@ stages:
212212
pool:
213213
name: azsdk-pool-mms-ubuntu-2004-general
214214
vmImage: MMSUbuntu20.04
215+
216+
variables:
217+
DocValidationImageId: azuresdkimages.azurecr.io/javarefautocr:latest
215218
strategy:
216219
runOnce:
217220
deploy:
@@ -228,6 +231,15 @@ stages:
228231
- .github/CODEOWNERS
229232
- '!sdk/**/test-recordings'
230233
- '!sdk/**/session-records'
234+
- download: current
235+
displayName: 'Download Artifact: ${{parameters.ArtifactName}}'
236+
artifact: ${{parameters.ArtifactName}}
237+
# Pull and build the docker image.
238+
- template: /eng/common/pipelines/templates/steps/docker-pull-image.yml
239+
parameters:
240+
ContainerRegistryClientId: $(azuresdkimages-cr-clientid)
241+
ContainerRegistryClientSecret: $(azuresdkimages-cr-clientsecret)
242+
ImageId: "$(DocValidationImageId)"
231243
- template: /eng/common/pipelines/templates/steps/update-docsms-metadata.yml
232244
parameters:
233245
PackageInfoLocations:
@@ -239,6 +251,7 @@ stages:
239251
SparseCheckoutPaths:
240252
- docs-ref-services/
241253
- metadata/
254+
DocValidationImageId: "$(DocValidationImageId)"
242255

243256
- ${{if ne(artifact.skipPublishDocGithubIo, 'true')}}:
244257
- deployment: PublishDocs
@@ -386,6 +399,8 @@ stages:
386399
pool:
387400
name: azsdk-pool-mms-ubuntu-2004-general
388401
vmImage: MMSUbuntu20.04
402+
variables:
403+
DocValidationImageId: azuresdkimages.azurecr.io/javarefautocr:latest
389404
steps:
390405
- download: current
391406
displayName: 'Download Artifact: ${{parameters.ArtifactName}}'
@@ -421,3 +436,4 @@ stages:
421436
SparseCheckoutPaths:
422437
- docs-ref-services/
423438
- metadata/
439+
DocValidationImageId: "$(DocValidationImageId)"

eng/scripts/Language-Settings.ps1

Lines changed: 49 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ function SourcePackageHasComFolder($artifactNamePrefix, $packageDirectory) {
274274
$mvnResults = mvn `
275275
dependency:copy `
276276
-Dartifact="$packageArtifact" `
277-
-DoutputDirectory="$packageDirectory" | Out-Null
277+
-DoutputDirectory="$packageDirectory"
278278

279279
if ($LASTEXITCODE) {
280280
LogWarning "Could not download source artifact: $packageArtifact"
@@ -309,7 +309,7 @@ function PackageDependenciesResolve($artifactNamePrefix, $packageDirectory) {
309309
$artifactDownloadOutput = mvn `
310310
dependency:copy `
311311
-Dartifact="$pomArtifactName" `
312-
-DoutputDirectory="$packageDirectory" | Out-Null
312+
-DoutputDirectory="$packageDirectory"
313313

314314
if ($LASTEXITCODE) {
315315
LogWarning "Could not download pom artifact: $pomArtifactName"
@@ -325,7 +325,7 @@ function PackageDependenciesResolve($artifactNamePrefix, $packageDirectory) {
325325
-f $downloadedPomPath `
326326
dependency:copy-dependencies `
327327
-P '!azure-mgmt-sdk-test-jar' `
328-
-DoutputDirectory="$packageDirectory" | Out-Null
328+
-DoutputDirectory="$packageDirectory"
329329

330330
if ($LASTEXITCODE) {
331331
LogWarning "Could not resolve dependencies for: $pomArtifactName"
@@ -336,7 +336,7 @@ function PackageDependenciesResolve($artifactNamePrefix, $packageDirectory) {
336336
return $true
337337
}
338338

339-
function ValidatePackage($groupId, $artifactId, $version) {
339+
function ValidatePackage($groupId, $artifactId, $version, $DocValidationImageId) {
340340
$workingDirectory = Join-Path ([System.IO.Path]::GetTempPath()) "validation"
341341
if (!(Test-Path $workingDirectory)) {
342342
New-Item -ItemType Directory -Force -Path $workingDirectory | Out-Null
@@ -349,8 +349,49 @@ function ValidatePackage($groupId, $artifactId, $version) {
349349
"${groupId}__${artifactId}__${version}"
350350
New-Item -ItemType Directory -Path $packageDirectory -Force | Out-Null
351351

352-
return (SourcePackageHasComFolder $artifactNamePrefix $packageDirectory) `
353-
-and (PackageDependenciesResolve $artifactNamePrefix $packageDirectory)
352+
# Add more validation by replicating as much of the docs CI process as
353+
# possible
354+
# https://github.com/Azure/azure-sdk-for-python/issues/20109
355+
if (!$DocValidationImageId)
356+
{
357+
Write-Host "Validating using mvn command directly on $artifactId."
358+
return FallbackValidation -artifactNamePrefix $artifactNamePrefix -workingDirectory $packageDirectory
359+
}
360+
else
361+
{
362+
Write-Host "Validating using $DocValidationImageId on $artifactId."
363+
return DockerValidation -packageName "$artifactId" -packageVersion "$version" -groupId "$groudId" -DocValidationImageId $DocValidationImageId -workingDirectory $packageDirectory
364+
}
365+
}
366+
367+
function FallbackValidation ($artifactNamePrefix, $workingDirectory)
368+
{
369+
return (SourcePackageHasComFolder $artifactNamePrefix $workingDirectory) `
370+
-and (PackageDependenciesResolve $artifactNamePrefix $workingDirectory)
371+
}
372+
373+
function DockerValidation($packageName, $packageVersion, $groupId, $DocValidationImageId, $workingdirectory)
374+
{
375+
376+
$output = docker run -v "${workingDirectory}:/workdir/out" `
377+
-e TARGET_PACKAGE=$packageName -e TARGET_VERSION=$packageVersion -e TARGET_GROUP_ID=$groupId -t $DocValidationImageId 2>&1
378+
# The docker exit codes: https://docs.docker.com/engine/reference/run/#exit-status
379+
# If the docker failed because of docker itself instead of the application,
380+
# we should skip the validation and keep the packages.
381+
$artifactNamePrefix = "${groupId}:${packageName}:${packageVersion}"
382+
if ($LASTEXITCODE -eq 125 -Or $LASTEXITCODE -eq 126 -Or $LASTEXITCODE -eq 127)
383+
{
384+
LogWarning "The `docker` command does not work with exit code $LASTEXITCODE. Fall back to mvn install $artifactNamePrefix directly."
385+
$output | Write-Host
386+
FallbackValidation -artifactNamePrefix "$artifactNamePrefix" -workingDirectory $workingdirectory
387+
}
388+
elseif ($LASTEXITCODE -ne 0)
389+
{
390+
LogWarning "Package $artifactNamePrefix ref docs validation failed."
391+
$output | Write-Host
392+
return $false
393+
}
394+
return $true
354395
}
355396

356397
function Update-java-DocsMsPackages($DocsRepoLocation, $DocsMetadata, $DocValidationImageId) {
@@ -616,9 +657,9 @@ function Get-java-DocsMsMetadataForPackage($PackageInfo) {
616657

617658
function Validate-java-DocMsPackages ($PackageInfo, $DocValidationImageId)
618659
{
619-
if (!(ValidatePackage $PackageInfo.Group $PackageInfo.Name $PackageInfo.Version))
660+
if (!(ValidatePackage $PackageInfo.Group $PackageInfo.Name $PackageInfo.Version $DocValidationImageId))
620661
{
621-
exit 1
662+
Write-Error "Package $PackageInfo.Name failed on validation" -ErrorAction Stop
622663
}
623664
return
624665
}

0 commit comments

Comments
 (0)