From 8ab0f8de8af5e682ed49c5ab3b6994958ddf7bea Mon Sep 17 00:00:00 2001 From: Karthik Macherla Date: Mon, 27 Nov 2023 11:57:54 -0800 Subject: [PATCH] Update Continuous-Integration.yml for Azure Pipelines --- .../yaml/Continuous-Integration.yml | 347 +++++++++++++++--- 1 file changed, 286 insertions(+), 61 deletions(-) diff --git a/Exdi/exdigdbsrv/yaml/Continuous-Integration.yml b/Exdi/exdigdbsrv/yaml/Continuous-Integration.yml index ffb8472..d38142e 100644 --- a/Exdi/exdigdbsrv/yaml/Continuous-Integration.yml +++ b/Exdi/exdigdbsrv/yaml/Continuous-Integration.yml @@ -1,91 +1,316 @@ +################################################################################# +# OneBranch Pipelines - Official # +# This pipeline was created by EasyStart from a sample located at: # +# https://aka.ms/obpipelines/easystart/samples # +# Documentation: https://aka.ms/obpipelines # +# Yaml Schema: https://aka.ms/obpipelines/yaml/schema # +# Retail Tasks: https://aka.ms/obpipelines/tasks # +# Support: https://aka.ms/onebranchsup # +################################################################################# -name: $(TeamProject)_$(BuildDefinitionName)_$(SourceBranchName)_$(Date:yyyyMMdd)$(Rev:.r) - -trigger: +trigger: + batch: true branches: include: - - master - paths: - include: - - Exdi/exdigdbsrv + - main -pool: - vmImage: 'windows-2022' +parameters: # parameters are shown up in ADO UI in a build queue time +- name: 'debug' + displayName: 'Enable debug output' + type: boolean + default: true # set for now in order to test variables: + ProjectName: 'ExdiGdbSrv' + buildDisplayName: 'Build ExdiGdbSrv VPack' buildConfiguration: 'Release' - major: 1 - minor: 1 - majorDotMinor: '$(major).$(minor)' - revision: $[counter(variables['majorDotMinor'], 0)] + CDP_DEFINITION_BUILD_COUNT: $[counter('', 0)] # needed for onebranch.pipeline.version task https://aka.ms/obpipelines/versioning + system.debug: ${{ parameters.debug }} + WindowsContainerImage: 'onebranch.azurecr.io/windows/ltsc2022/vse2022:latest' #'onebranch.azurecr.io/windows/ltsc2022/vse2022:latest' # Docker image which is used to build the project https://aka.ms/obpipelines/containers + ENABLE_PRS_DELAYSIGN: 1 -steps: -- template: Build-Steps.yml +resources: + repositories: + - repository: templates + type: git + name: OneBranch.Pipelines/GovernedTemplates + ref: refs/heads/main + +extends: + template: v2/Microsoft.Official.yml@templates # https://aka.ms/obpipelines/templates parameters: - BuildConfiguration: $(buildConfiguration) + platform: + name: 'windows_undocked' + cloudvault: # Please refer the wiki for more information: https://aka.ms/obpipelines/cloudvault + enabled: false + globalSdl: # Refer the wiki for more options in this parameter: https://aka.ms/obpipelines/sdl + tsa: + enabled: false # onebranch publish all sdl results to TSA. If TSA is disabled all SDL tools will forced into 'break' build mode. Please provide TSAOptions.json. + binskim: + break: true # always break the build on binskim issues in addition to TSA upload + policheck: + break: true # always break the build on policheck issues. You can disable it by setting to 'false' + # suppression: + # suppressionFile: $(Build.SourcesDirectory)\.gdn\global.gdnsuppress + featureFlags: + # Use Windows 2022 for OneBranch's own containers, as with WindowsContainerImage above. + WindowsHostVersion: '1ESWindows2022' -- task: PublishBuildArtifacts@1 - displayName: 'Publish Artifact: bin' - inputs: - PathtoPublish: '$(Build.SourcesDirectory)\Exdi\exdigdbsrv\$(buildConfiguration)' + stages: + - stage: build + jobs: + - job: PrepareBuildNumber + pool: + type: windows # read more about custom job pool types at https://aka.ms/obpipelines/yaml/jobs + + variables: # More settings at https://aka.ms/obpipelines/yaml/jobs + ob_outputDirectory: '$(Build.ArtifactStagingDirectory)' # this directory is uploaded to pipeline artifacts, reddog and cloudvault. More info at https://aka.ms/obpipelines/artifacts + # https://aka.ms/obpipelines/sdl + ob_sdl_binskim_break: true # always break the build on binskim issues, even if TSA enabled. You can disable it by setting to 'false' + ob_sdl_roslyn_break: true + ob_sdl_codeSignValidation_excludes: -|**\*.pdb;-|**\Newtonsoft.Json.dll;-|**\*.js;-|**\*.json;-|**\*.txt;-|**\*.nuspec;-|**\*.nupkg + ob_symbolsPublishing_enabled: false # https://aka.ms/obpipelines/symbols + # Use "vnext" for the checks so "CheckCFlags" works. As of this writing it fails with this error:"[CheckCFlags]Missing symbol file for binary: C:\__w\1\a\build\Microsoft.Identity.Client.dll." + # TODO: Consider removing when no longer needed. + Windows_SDL_Container_Version: 'vnext' + # ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/main') }}: # conditionally enable symbolsPublishing for master branch only + # ob_symbolsPublishing_enabled: true # https://aka.ms/obpipelines/symbols + # ${{ else }}: + # ob_sdl_suppression_suppressionFile: $(Build.SourcesDirectory)\.gdn\job.gdnsuppress -- task: PublishSymbols@2 - displayName: 'Source index symbols 2' - inputs: - SearchPattern: '$(Build.SourcesDirectory)\Exdi\exdigdbsrv\$(buildConfiguration)\**\*.pdb' - SymbolServerType: 'TeamServices' + steps: + - script: echo '$(Build.BuildNumber)' + displayName: Display BuildNumber 1 + + - task: onebranch.pipeline.version@1 # generates automatic version. For other versioning options check https://aka.ms/obpipelines/versioning + displayName: Setup BuildNumber + inputs: + system: 'RevisionCounter' + major: '1' + minor: '3' + exclude_commit: true + + - script: echo '$(Build.BuildNumber)' + displayName: Display BuildNumber 2 + + - powershell: | + Write-Host "Build Number: $(Build.BuildNumber)" # looks like 1.3.02306.79 + + $curDate = Get-Date + + # Maximum number for either of the version parts can't be above 65534 - https://stackoverflow.com/questions/37941195/the-specified-version-string-does-not-conform-to-the-required-format-major-mi + + $packageVersion = "$($curDate.ToString("yyyy.MMdd")).$(CDP_PATCH_NUMBER)" # like 2023.0425.0230679 + Write-Host "Custom Package version: $($packageVersion)" + + $buildVersion = "$($curDate.ToString("yyyy.MMdd")).$(CDP_BUILD_NUMBER).$(CDP_REVISION_NUMBER)" # like 2023.0425.02306.79 + Write-Host "Custom Build version: $($buildVersion)" + + Write-Host "##vso[task.setvariable variable=Package_Version;isOutput=true]$($packageVersion)" + Write-Host "##vso[task.setvariable variable=Build_Version;isOutput=true]$($buildVersion)" + displayName: 'Prepare custom release version' + name: CustomBuildNumber -- task: ms-vscs-artifact.build-tasks.artifactSymbolTask-1.artifactSymbolTask@0 - displayName: 'Publish to Symbols to Artifact Services' - inputs: - symbolServiceURI: 'https://microsoft.artifacts.visualstudio.com/DefaultCollection' - requestName: 'DebuggingExperiences/$(Build.BuildNumber)/$(Build.BuildId)' - sourcePath: '$(Build.SourcesDirectory)\Exdi\exdigdbsrv' - expirationInDays: '365' + - job: build_release + pool: + type: windows -#Add the ExdiGdbSrv vpack steps. + variables: + # this directory is uploaded to pipeline artifacts, reddog and cloudvault. More info at https://aka.ms/obpipelines/artifacts + ob_outputDirectory: '$(Build.SourcesDirectory)\build' + ob_artifactBaseName: release + GITHUB_CHECKOUT_PATH: 'Windbg-Samples' + WindbgSamplesREPOROOT: $(Pipeline.Workspace)\Windbg-Samples -- task: CmdLine@2 - displayName: dir files for debugging - inputs: - script: > - echo dir Build.SourcesDirectory... + steps: + - task: NuGetToolInstaller@1 - dir /s/b $(Build.SourcesDirectory)\Exdi\exdigdbsrv + - task: 333b11bd-d341-40d9-afcf-b32d5ce6f23b@2 + inputs: + restoreSolution: '$(Build.SourcesDirectory)\Exdi\**\*.sln' + + - task: PowerShell@2 + displayName: "Create sourcelink file for current commit" + timeoutInMinutes: 30 + inputs: + filePath: $(Build.SourcesDirectory)\Exdi\exdigdbsrv\exdigdbsrv\SourceLinkGeneration.ps1 + arguments: "-SourcesDir $(WindbgSamplesREPOROOT) -OutputDir $(Build.SourcesDirectory)\\Exdi\\exdigdbsrv\\exdigdbsrv\\ -GitRelativePath /Exdi/exdigdbsrv -GitOwner microsoft" + pwsh: true - echo dir Exdi\exdigdbsrv\Release\x64... + - task: VSBuild@1 + displayName: 'Build x64' + inputs: + platform: 'x64' + solution: '$(Build.SourcesDirectory)\Exdi\**\*.sln' + configuration: '$(buildConfiguration)' - dir $(Build.SourcesDirectory)\Exdi\exdigdbsrv\Release\x64 + - task: VSBuild@1 + displayName: 'Build ARM64' + inputs: + platform: 'ARM64' + solution: '$(WindbgSamplesREPOROOT)\Exdi\**\*.sln' + configuration: '$(buildConfiguration)' - echo dir Exdi\exdigdbsrv\Release\ARM64... + - powershell: | + echo "dir -r $(WindbgSamplesREPOROOT)" + dir -r $(WindbgSamplesREPOROOT) - dir $(Build.SourcesDirectory)\Exdi\exdigdbsrv\Release\ARM64 + displayName: 'Debug Print' + + # prepare vpack folder here + - task: CmdLine@2 + displayName: Prepare VPack Output Folder + inputs: + script: > + echo -- dir Build.SourcesDirectory - md $(Agent.TempDirectory) + dir /s/b $(Build.SourcesDirectory) - md $(Agent.TempDirectory)\ExdiGdbSrv.vpack.temp + md $(ob_outputDirectory) - md $(Agent.TempDirectory)\ExdiGdbSrv.vpack.temp\x64 + md $(ob_outputDirectory)\x64\ - md $(Agent.TempDirectory)\ExdiGdbSrv.vpack.temp\ARM64 + md $(ob_outputDirectory)\ARM64\ - echo Copy files ... + echo Copy files ... + + copy $(WindbgSamplesREPOROOT)\Exdi\exdigdbsrv\Release\x64\ExdiGdbSrv.dll $(ob_outputDirectory)\x64 + + copy $(WindbgSamplesREPOROOT)\Exdi\exdigdbsrv\GdbSrvControllerLib\systemregisters.xml $(ob_outputDirectory)\x64 + + copy $(WindbgSamplesREPOROOT)\Exdi\exdigdbsrv\GdbSrvControllerLib\exdiConfigData.xml $(ob_outputDirectory)\x64 + + copy $(WindbgSamplesREPOROOT)\Exdi\exdigdbsrv\Release\ARM64\ExdiGdbSrv.dll $(ob_outputDirectory)\ARM64 + + copy $(WindbgSamplesREPOROOT)\Exdi\exdigdbsrv\GdbSrvControllerLib\systemregisters.xml $(ob_outputDirectory)\ARM64 + + copy $(WindbgSamplesREPOROOT)\Exdi\exdigdbsrv\GdbSrvControllerLib\exdiConfigData.xml $(ob_outputDirectory)\ARM64 + - copy $(Build.SourcesDirectory)\Exdi\exdigdbsrv\Release\x64\ExdiGdbSrv.dll $(Agent.TempDirectory)\ExdiGdbSrv.vpack.temp\x64 - - copy $(Build.SourcesDirectory)\Exdi\exdigdbsrv\GdbSrvControllerLib\systemregisters.xml $(Agent.TempDirectory)\ExdiGdbSrv.vpack.temp\x64 + rmdir /s /q $(WindbgSamplesREPOROOT) - copy $(Build.SourcesDirectory)\Exdi\exdigdbsrv\GdbSrvControllerLib\exdiConfigData.xml $(Agent.TempDirectory)\ExdiGdbSrv.vpack.temp\x64 + - job: build_vpack + dependsOn: + - PrepareBuildNumber + - build_release + pool: + type: windows # read more about custom job pool types at https://aka.ms/obpipelines/yaml/jobs + + # For VPack creation you can refer to the following links: + # https://www.osgwiki.com/wiki/OneBranch_Windows_Undocked_Pipelines + # https://www.osgwiki.com/wiki/Submit_Files_to_Git_in_Package_ES + + variables: + REPOROOT: $(Build.SourcesDirectory) + DBG_VPACK_NAME: 'Windows.Debugger.ExdiGdbSrv' + DBG_PR_WORK_ITEM: '46960971' + DBG_VPACK_MAN_FILE: 'ExdiGdbSrv.man' + DBG_VPACK_MAN_FOLDER: '/onecore/sdktools/debuggers/external/vpack' + Package_Version: $[ dependencies.PrepareBuildNumber.outputs['CustomBuildNumber.Package_Version'] ] + ob_outputDirectory: '$(System.DefaultWorkingDirectory)\build_and_pack' # this directory is uploaded to pipeline artifacts, reddog and cloudvault. More info at https://aka.ms/obpipelines/artifacts + + ## createVPack: # information for Vpack (Learn more: https://www.osgwiki.com/wiki/OneBranch_Windows_Undocked_Pipelines) + ob_createvpack_enabled: true + ob_createvpack_packagename: '$(DBG_VPACK_NAME)' # "$(VpackPrefix).release.$(buildPlatform)" + ob_createvpack_description: '$(DBG_VPACK_NAME) release' # "$(VpackPrefix)" + # ob_artifactSuffix: $(binId) + # ob_createvpack_relPath: $(Provider_Build_Folder) + # ob_createvpack_targetDestinationDirectory: $(Provider_Build_Folder) + ob_createvpack_targetDestinationDirectory: '$(Destination)' + ob_createvpack_versionAs: string + ob_createvpack_version: $(Package_Version) + ob_createvpack_owneralias: 'dex-triage@microsoft.com' + ob_createvpack_provData: true + ob_createvpack_propsFile: false + ob_createvpack_verbose: true + # updateOSManifest: #information for GitSubmit + ob_updateOSManifest_enabled: true + ob_updateOSManifest_osbranch: 'official/oc_es_debug' + ob_updateOSManifest_source: "$(DBG_VPACK_MAN_FOLDER)/$(DBG_VPACK_MAN_FILE)" + ob_updateOSManifest_destination: '$(REPOROOT)' + ob_updateOSManifest_gitcheckinConfigPath: '' + ob_updateOSManifest_manifest: '' + ## << Please refer wiki for more Vpack options >> + + steps: + - task: DownloadPipelineArtifact@2 + displayName: 'Download build artifacts' + inputs: + artifact: release + path: $(System.DefaultWorkingDirectory)\extracted - copy $(Build.SourcesDirectory)\Exdi\exdigdbsrv\Release\ARM64\ExdiGdbSrv.dll $(Agent.TempDirectory)\ExdiGdbSrv.vpack.temp\ARM64 + - script: | + robocopy "$(System.DefaultWorkingDirectory)\extracted" "$(System.DefaultWorkingDirectory)\build_and_pack" *.* /s - copy $(Build.SourcesDirectory)\Exdi\exdigdbsrv\GdbSrvControllerLib\systemregisters.xml $(Agent.TempDirectory)\ExdiGdbSrv.vpack.temp\ARM64 + dir /s/b $(System.DefaultWorkingDirectory)\build_and_pack - copy $(Build.SourcesDirectory)\Exdi\exdigdbsrv\GdbSrvControllerLib\exdiConfigData.xml $(Agent.TempDirectory)\ExdiGdbSrv.vpack.temp\ARM64 + exit 0 + displayName: 'Copy files to build_and_pack' + + - task: CmdLine@2 + displayName: Copy Checkin.json file + inputs: + script: > + copy /Y $(REPOROOT)\Scripts\GitCheckin.json $(REPOROOT)\GitCheckin.json + + echo done. -- task: PkgESVPack@12 - displayName: 'Create ExdiGdbSrv VPack ' - inputs: - sourceDirectory: '$(Agent.TempDirectory)\ExdiGdbSrv.vpack.temp' - description: 'ExdiGdbSrv binary' - pushPkgName: ExdiGdbSrv.vpack.binary + - pwsh: | + Write-Host "PS Version (pwsh task): $($PSVersionTable.PSVersion.ToString())" + $jsonFileName = Join-Path -Path "$(REPOROOT)"-ChildPath "GitCheckin.json" + $fileContent = Get-Content -Path $jsonFileName -Raw + + # PowerShell 7.x verion of 'ConvertFrom-Json' strips out the comments from JSON file + $fileContentAsJson = ConvertFrom-Json $fileContent + $fileContent = $fileContentAsJson | ConvertTo-Json -depth 100 + + $fileContent = $fileContent -replace 'DBG_VPACK_PT_TITLE', "Sync to latest $(DBG_VPACK_NAME) VPack update $(Package_Version)" + $fileContent = $fileContent -replace 'DBG_PR_WORK_ITEM', "$(DBG_PR_WORK_ITEM)" + $fileContent = $fileContent -replace 'DBG_VPACK_MAN_FOLDER', "$(DBG_VPACK_MAN_FOLDER)" + $fileContent = $fileContent -replace 'DBG_VPACK_MAN_FILE', "$(DBG_VPACK_MAN_FILE)" + + [System.IO.File]::WriteAllText($jsonFileName, $fileContent) + # + displayName: 'Update GitCheckin.json' + + - task: CmdLine@2 + displayName: 'Debug print 2' + inputs: + script: > + echo --- GitCheckin.json + + type $(REPOROOT)\GitCheckin.json + + echo --- Package_Version + + echo $(Package_Version) + + echo --- all variables + + set + + echo --- dir Build.SourcesDirectory + + dir /s/b $(Build.SourcesDirectory) + + echo --- dir Build.BinariesDirectory + + dir /s/b $(Build.BinariesDirectory) + + echo --- dir System.DefaultWorkingDirectory + + dir /s/b $(System.DefaultWorkingDirectory) + + echo --- dir Build.ArtifactStagingDirectory + + dir /s/b "$(Build.ArtifactStagingDirectory)" + + echo --- dir $(System.DefaultWorkingDirectory)\build_and_pack + + dir /s/b "$(System.DefaultWorkingDirectory)\build_and_pack" + + echo --- dir $(REPOROOT) + + dir /s/b $(REPOROOT) + + echo --- done. \ No newline at end of file