1515 include :
1616 - main
1717 - support/v1
18+
1819variables :
1920 buildPlatform : ' Any CPU'
2021 buildConfiguration : ' Release'
2122 ProductBinPath : ' $(Build.SourcesDirectory)\src\Microsoft.OpenApi\bin\$(BuildConfiguration)'
23+ REGISTRY : ' msgraphprodregistry.azurecr.io'
24+ IMAGE_NAME : ' public/openapi/hidi'
25+ PREVIEW_BRANCH : ' refs/heads/main'
26+
2227resources :
2328 repositories :
2429 - repository : 1ESPipelineTemplates
@@ -313,3 +318,119 @@ extends:
313318 assets : ' $(Pipeline.Workspace)\**\*.exe'
314319 addChangeLog : false
315320
321+ - stage : Build_and_deploy_docker_images
322+ displayName : ' Build and deploy docker images'
323+ condition : or(eq(variables['build.sourceBranch'], 'refs/tags/v'), eq(variables['build.sourceBranch'], variables['PREVIEW_BRANCH']))
324+ dependsOn : build
325+ pool :
326+ name : Azure-Pipelines-1ESPT-ExDShared
327+ image : ubuntu-latest
328+ os : linux
329+ jobs :
330+ - job : buildAndPush
331+ steps :
332+ - task : AzureCLI@2
333+ displayName : ' Login to Azure Container Registry'
334+ inputs :
335+ azureSubscription : ' ACR Images Push Service Connection'
336+ scriptType : bash
337+ scriptLocation : inlineScript
338+ inlineScript : |
339+ az acr login --name msgraphprodregistry
340+
341+ - powershell : |
342+ $content = [XML](Get-Content ./Directory.Build.props)
343+ Write-Host "XML loaded, finding version..."
344+
345+ # Handle PropertyGroup as either a single element or array
346+ $version = $null
347+ if ($content.Project.PropertyGroup -is [array]) {
348+ Write-Host "PropertyGroup is an array, checking each entry..."
349+ foreach ($pg in $content.Project.PropertyGroup) {
350+ if ($pg.Version) {
351+ $version = $pg.Version.ToString().Trim()
352+ Write-Host "Found version in PropertyGroup array: $version"
353+ break
354+ }
355+ }
356+ } else {
357+ # Single PropertyGroup
358+ $version = $content.Project.PropertyGroup.Version
359+ if ($version) {
360+ $version = $version.ToString().Trim()
361+ Write-Host "Found version in PropertyGroup: $version"
362+ }
363+ }
364+
365+ if (-not $version) {
366+ Write-Host "##vso[task.logissue type=error]Version not found in Directory.Build.props"
367+ exit 1
368+ }
369+
370+ Write-Host "Version found: $version"
371+ Write-Host "##vso[task.setvariable variable=version;isoutput=true]$version"
372+ Write-Host "##vso[task.setvariable variable=VERSION]$version"
373+ displayName: 'Get version from csproj'
374+ name: getversion
375+
376+ - bash : |
377+ # Debug output to verify version variable
378+ echo "Version from previous step: $VERSION"
379+ displayName: 'Verify version variable'
380+
381+ - bash : |
382+ echo "Build Number: $(Build.BuildNumber)"
383+ # Extract the last 3 characters for the run number
384+ runnumber=$(echo "$(Build.BuildNumber)" | grep -o '[0-9]\+$')
385+ echo "Extracted Run Number: $runnumber"
386+
387+ # If extraction fails, set a default
388+ if [ -z "$runnumber" ]; then
389+ echo "Extraction failed, using default value"
390+ runnumber=$(date +"%S%N" | cut -c1-3)
391+ echo "Generated fallback run number: $runnumber"
392+ fi
393+
394+ # Set the variable for later steps
395+ echo "##vso[task.setvariable variable=RUNNUMBER]$runnumber"
396+ echo "##vso[task.setvariable variable=RUNNUMBER;isOutput=true]$runnumber"
397+ displayName: 'Get truncated run number'
398+ name: getrunnumber
399+ condition: eq(variables['Build.SourceBranch'], variables['PREVIEW_BRANCH'])
400+
401+ - bash : |
402+ date=$(date +'%Y%m%d')
403+ echo "Date value: $date"
404+ echo "##vso[task.setvariable variable=BUILDDATE;isOutput=true]$date"
405+ echo "##vso[task.setvariable variable=BUILDDATE]$date"
406+ displayName: 'Get current date'
407+ name: setdate
408+ condition: eq(variables['Build.SourceBranch'], variables['PREVIEW_BRANCH'])
409+
410+ - bash : |
411+ echo "Building Docker image..."
412+ echo "Using build date: ${BUILDDATE}"
413+ # Using quotes around tags to prevent flag interpretation
414+ docker build \
415+ -t "$(REGISTRY)/$(IMAGE_NAME):nightly" \
416+ -t "$(REGISTRY)/$(IMAGE_NAME):${VERSION}.${BUILDDATE}${RUNNUMBER}" \
417+ "$(Build.SourcesDirectory)"
418+
419+ echo "Pushing Docker image with nightly tag..."
420+ docker push "$(REGISTRY)/$(IMAGE_NAME):nightly"
421+ docker push "$(REGISTRY)/$(IMAGE_NAME):${VERSION}.${BUILDDATE}${RUNNUMBER}"
422+ displayName: 'Build and Push Nightly Image'
423+ condition: eq(variables['Build.SourceBranch'], variables['PREVIEW_BRANCH'])
424+
425+ - bash : |
426+ echo "Building Docker image for release..."
427+ docker build \
428+ -t "$(REGISTRY)/$(IMAGE_NAME):latest" \
429+ -t "$(REGISTRY)/$(IMAGE_NAME):${VERSION}.${BUILDDATE}${RUNNUMBER}" \
430+ "$(Build.SourcesDirectory)"
431+
432+ echo "Pushing Docker image with latest and version tags..."
433+ docker push "$(REGISTRY)/$(IMAGE_NAME):latest"
434+ docker push "$(REGISTRY)/$(IMAGE_NAME):${VERSION}.${BUILDDATE}${RUNNUMBER}"
435+ displayName: 'Build and Push Release Image'
436+ condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/v')
0 commit comments