# # 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: false repoName: dotnet/wpf jobs: - 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: NetCore-Public demands: ImageOverride -equals windows.vs2022preview.amd64.Open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: NetCore1ESPool-Internal demands: ImageOverride -equals windows.vs2022preview.amd64 helixRepo: $(repoName) jobs: - job: Windows_NT timeoutInMinutes: 180 # 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: NetCore-Public demands: ImageOverride -equals windows.vs2022preview.amd64.Open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: NetCore1ESPool-Internal demands: ImageOverride -equals windows.vs2022preview.amd64 variables: # needed for signing - name: _TeamName value: DotNetCore - name: _SignType value: test - 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: test - 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 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'))) - task: PowerShell@2 displayName: Replace WPF binaries inputs: targetType: 'inline' script: '.\eng\copy-wpf.ps1 -testhost -destination $(Build.SourcesDirectory)\\.dotnet\ -$(_BuildConfig) -arch $(_Platform)' condition: ne(variables['_Platform'], 'arm64') - task: DownloadPipelineArtifact@2 inputs: buildType: 'specific' project: '7ea9116e-9fac-403d-b258-b31fcf1bb293' definition: '479' buildVersionToDownload: latestFromBranch branchName: refs/heads/master checkDownloadedFiles: true artifactName: Tests.$(_BuildConfig).$(_Platform).zip downloadPath: '$(System.ArtifactsDirectory)\testbinzip\' condition: ne(variables['_Platform'], 'arm64') - task: ExtractFiles@1 displayName: Extract Test Bins inputs: archiveFilePatterns: '$(System.ArtifactsDirectory)\testbinzip\*.zip' destinationFolder: '$(System.ArtifactsDirectory)\testbins' cleanDestinationFolder: true overwriteExistingFiles: true condition: ne(variables['_Platform'], 'arm64') - task: PowerShell@2 displayName: Set Path Vars inputs: targetType: 'inline' script: $env:path = '$(Build.SourcesDirectory)\\.dotnet\;' + $env:path workingDirectory: '$(System.ArtifactsDirectory)\testbins' condition: ne(variables['_Platform'], 'arm64') continueOnError: true - task: PowerShell@2 displayName: Echo Path Vars inputs: targetType: 'inline' script: echo $env workingDirectory: '$(System.ArtifactsDirectory)\testbins' condition: ne(variables['_Platform'], 'arm64') continueOnError: true - task: PowerShell@2 displayName: Run DRTs inputs: targetType: 'inline' script: '.\RunDrts.cmd' workingDirectory: '$(System.ArtifactsDirectory)\testbins' condition: ne(variables['_Platform'], 'arm64') continueOnError: true - task: PowerShell@2 displayName: Run Microsuites inputs: targetType: 'inline' script: '.\RunTests.cmd /Keywords=Microsuite' workingDirectory: '$(System.ArtifactsDirectory)\testbins' condition: ne(variables['_Platform'], 'arm64') continueOnError: true