# # This file should be kept in sync across https://www.github.com/dotnet/wpf and dotnet-wpf-int repos. # # parameters: # Needed because runAsPublic is used in template expressions, which can't read from user-defined variables # Defaults to true runAsPublic: true repoName: dotnet/wpf jobs: - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.SourceBranch'], 'refs/heads/main')) }}: - template: /eng/common/templates/job/onelocbuild.yml parameters: MirrorRepo: wpf LclSource: lclFilesfromPackage LclPackageId: 'LCL-JUNO-PROD-WPF' - template: /eng/common/templates/jobs/jobs.yml parameters: enableMicrobuild: true enablePublishBuildArtifacts: true enablePublishTestResults: false # tests run in helix enablePublishBuildAssets: true enablePublishUsingPipelines: true enableTelemetry: true enableSourceIndex: true sourceIndexParams: condition: eq(variables['Build.SourceBranch'], 'refs/heads/main') binlogPath: artifacts/log/Debug/x86/Build.binlog pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: NetCore1ESPool-Public demands: ImageOverride -equals Build.Windows.Amd64.VS2022.Pre.Open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: NetCore1ESPool-Internal demands: ImageOverride -equals Build.Windows.Amd64.VS2022.Pre helixRepo: $(repoName) jobs: - job: Windows_NT timeoutInMinutes: 120 # how long to run the job before automatically cancelling; see https://github.com/dotnet/wpf/issues/952 pool: # For public jobs, use the hosted pool. For internal jobs use the internal pool. # Will eventually change this to two BYOC pools. # agent pool can't be read from a user-defined variable (Azure DevOps limitation) ${{ if eq(variables['System.TeamProject'], 'public') }}: name: NetCore1ESPool-Public demands: ImageOverride -equals Build.Windows.Amd64.VS2022.Pre.Open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: NetCore1ESPool-Internal demands: ImageOverride -equals Build.Windows.Amd64.VS2022.Pre variables: # needed for signing - name: _TeamName value: DotNetCore - name: _SignType value: real - name: _SignArgs value: '' - name: _PublishArgs value: '' - name: _OfficialBuildIdArgs value: '' - name: _Platform value: x86 - name: _PlatformArgs value: /p:Platform=$(_Platform) - name: _PublicBuildPipeline # We will run Helix tests when building in the open, but do not repeat when building and publishing again using the internal build-pipeline value: true - name: _TestHelixAgentPool value: 'Windows.10.Amd64.ClientRS5.Open' # Preferred:'Windows.10.Amd64.Open%3bWindows.7.Amd64.Open%3bWindows.10.Amd64.ClientRS5.Open'; See https://github.com/dotnet/wpf/issues/952 - name: _HelixStagingDir value: $(BUILD.STAGINGDIRECTORY)\helix\functests - name: _HelixSource value: ${{ parameters.repoName }}/$(Build.SourceBranch) - name: _HelixToken value: '' - name: _HelixCreator value: ${{ parameters.repoName }} - ${{ if ne(variables['System.TeamProject'], 'internal') }}: - name: _InternalRuntimeDownloadArgs value: '' - ${{ if eq(variables['System.TeamProject'], 'internal') }}: - group: DotNetBuilds storage account read tokens - group: AzureDevOps-Artifact-Feeds-Pats - name: _InternalRuntimeDownloadArgs value: >- /p:DotNetRuntimeSourceFeed=https://dotnetbuilds.blob.core.windows.net/internal /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) # Override some values if we're building internally - ${{ if eq(parameters.runAsPublic, 'false') }}: # note: You have to use list syntax here (- name: value) or you will get errors about declaring the same variable multiple times - name: _SignType value: real - group: DotNet-HelixApi-Access # note: Even though they are referenced here, user defined variables (like $(_SignType)) are not resolved # until the agent is running on the machine. They can be overridden any time before they are resolved, # like in the job matrix below (see Build_Debug) - name: _SignArgs value: /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName) - name: _PublishArgs value: /p:DotNetPublishUsingPipelines=true - name: _OfficialBuildIdArgs value: /p:OfficialBuildId=$(BUILD.BUILDNUMBER) - name: _PublicBuildPipeline value: false - name: _HelixSource value: official/${{ parameters.repoName }}/$(Build.SourceBranch) - name: _HelixToken value: '$(HelixApiAccessToken)' # from DotNet-HelixApi-Access group - name: _HelixCreator value: '' #if _HelixToken is set, Creator must be empty - name: _TestHelixAgentPool value: 'Windows.10.Amd64.ClientRS5' # Preferred: 'Windows.10.Amd64%3bWindows.7.Amd64%3bWindows.10.Amd64.ClientRS5' strategy: matrix: ${{ if eq(parameters.runAsPublic, 'true') }}: Build_Debug_x86: _BuildConfig: Debug # override some variables for debug # _SignType has to be real for package publishing to succeed - do not override to test. Build_Release_x86: _BuildConfig: Release ${{ if eq(parameters.runAsPublic, 'true') }}: Build_Debug_x64: _BuildConfig: Debug # override some variables for debug # _SignType has to be real for package publishing to succeed - do not override to test. _Platform: x64 Build_Release_x64: _BuildConfig: Release _Platform: x64 ${{ if eq(parameters.runAsPublic, 'true') }}: Build_Debug_arm64: _BuildConfig: Debug # override some variables for debug # _SignType has to be real for package publishing to succeed - do not override to test. _Platform: arm64 Build_Release_arm64: _BuildConfig: Release _Platform: arm64 steps: - checkout: self clean: true # Set VSO Variable(s) - powershell: eng\pre-build.ps1 displayName: Pre-Build - Set VSO Variables - ${{ if ne(variables['System.TeamProject'], 'public') }}: - task: PowerShell@2 displayName: Setup Private Feeds Credentials inputs: filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1 arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token env: Token: $(dn-bot-dnceng-artifact-feeds-rw) # Use utility script to run script command dependent on agent OS. - script: eng\common\cibuild.cmd -configuration $(_BuildConfig) -prepareMachine $(_PublishArgs) $(_SignArgs) $(_OfficialBuildIdArgs) $(_PlatformArgs) $(_InternalRuntimeDownloadArgs) displayName: Windows Build / Publish # This condition should be kept in sync with the condition for 'Run DRTs' step # When building on a regular pipeline (!_HelixPipeline), build as usual # When building on a Helix pipeline, only build Release configs # (!_HelixPipeline) || # (_HelixPipeline && _PublicBuildPipeline && _ContinuousIntegrationTestsEnabled && _BuildConfig == Release) condition: or(ne(variables['_HelixPipeline'], 'true'), and(eq(variables['_HelixPipeline'], 'true') ,eq(variables['_BuildConfig'], 'Release'), eq(variables['_PublicBuildPipeline'], 'true'), eq(variables['_ContinuousIntegrationTestsEnabled'], 'true'))) # Run DRTs - powershell: eng\common\cibuild.cmd -configuration $(_BuildConfig) $(_OfficialBuildIdArgs) $(_PlatformArgs) -projects $(Build.SourcesDirectory)\eng\helixpublish.proj /bl:$(BUILD.SOURCESDIRECTORY)\artifacts\log\$(_BuildConfig)\HelixDrt.binlog displayName: Run Developer Regression Tests on Helix Machine (Release) env: HelixSource: $(_HelixSource) HelixType: 'tests/drt' HelixBuild: $(Build.BuildNumber) HelixTargetQueues: $(_TestHelixAgentPool) HelixAccessToken: $(_HelixToken) # only defined for internal CI Creator: $(_HelixCreator) SYSTEM_ACCESSTOKEN: $(System.AccessToken) # This condition should be kept in sync with the condition for cibuild.cmd step with displayName: "Windows Build / Publish" # Only run ... # ...When building on a Helix pipeline, only build Release configs # # (_HelixPipeline && _PublicBuildPipeline && _ContinuousIntegrationTestsEnabled && _BuildConfig == Release) # condition: and(succeeded(), eq(variables['_HelixPipeline'], 'true') ,eq(variables['_BuildConfig'], 'Release'), eq(variables['_PublicBuildPipeline'], 'true'), eq(variables['_ContinuousIntegrationTestsEnabled'], 'true')) - task: PowerShell@2 displayName: Replace WPF binaries inputs: targetType: 'inline' script: '.\eng\copy-wpf.ps1 -testhost -destination .dotnet -$(_BuildConfig) -arch $(_Platform)' - task: DownloadBuildArtifacts@1 displayName: Fetch Test Binaries inputs: buildType: 'specific' project: '9ee6d478-d288-47f7-aacc-f6e6d082ae6d' pipeline: '1145' buildVersionToDownload: 'specific' buildId: '1934148' downloadPath: '$(System.ArtifactsDirectory)\testbinzip\' checkDownloadedFiles: true - task: ExtractFiles@1 displayName: Extract Test Bins inputs: archiveFilePatterns: '$(System.ArtifactsDirectory)\testbinzip\*.zip' destinationFolder: '$(System.ArtifactsDirectory)\testbins' cleanDestinationFolder: true overwriteExistingFiles: false - task: PowerShell@2 displayName: Run Tests inputs: targetType: 'inline' script: '.\CIRunDrts.cmd' workingDirectory: '$(System.ArtifactsDirectory)\testbins'