msbuild/.vsts-dotnet-ci.yml

376 строки
14 KiB
YAML

trigger:
- main
- exp/*
- vs*
jobs:
- job: CheckVersionBumpOnReleaseBranches
displayName: "Check Version Bump On Release Branches"
steps:
- powershell: |
$versionsFile = "eng/Versions.props"
$changedFiles = git diff --name-only HEAD HEAD~1
$changedVersionsFile = $changedFiles | Where-Object { $_ -eq $versionsFile }
$isInitialCommit = $false
$isVersionBumped = $false
if ($changedVersionsFile -ne $null) {
$difference = git diff HEAD~1 $versionsFile
$changedContent = $difference -join "%"
# 'DotNetFinalVersionKind' is expected to be added only during the initial setup of the release branch
$initialCommitPattern = '-\s*<VersionPrefix>\d+\.\d+\.\d+<\/VersionPrefix>%.*\+\s*<VersionPrefix>\d+\.\d+\.\d+<\/VersionPrefix><DotNetFinalVersionKind>release<\/DotNetFinalVersionKind>'
$isInitialCommit = $changedContent -match $initialCommitPattern
$pattern = '-\s*<VersionPrefix>\d+\.\d+\.(?<previous>\d+)<\/VersionPrefix>.*%\+\s*<VersionPrefix>\d+\.\d+\.(?<current>\d+)<\/VersionPrefix>'
if (!($isInitialCommit) -and ($changedContent -match $pattern)) {
try {
$previousPatch = [Convert]::ToInt32($Matches.previous)
$currentPatch = [Convert]::ToInt32($Matches.current)
if ($currentPatch -gt $previousPatch) {
$isVersionBumped = $true
}
} catch {
Write-Host "An error occurred during conversion: $_"
}
}
}
if (!($isInitialCommit -or $isVersionBumped)) {
throw "Hello! I noticed that you're targeting one of our servicing branches. You need to increase the revision version number (the last part) of 'VersionPrefix' in eng/Versions.props."
}
condition: startsWith(variables['System.PullRequest.TargetBranch'], 'vs')
displayName: "Check if patch version is bumped up"
- job: IfOnlyDocumentionChanged
dependsOn: CheckVersionBumpOnReleaseBranches
displayName: "Check whether Test Results need to be executed"
steps:
- powershell: |
$changedFiles = git diff --name-only HEAD HEAD~1
$changedFiles
$onlyDocChanged = 1
foreach ($file in $changedFiles) {
$isUnderDocumentation = $file -match "^documentation/"
if(!$isUnderDocumentation)
{
$onlyDocChanged = 0
break;
}
}
Write-Host "##vso[task.setvariable variable=onlyDocChanged;isoutput=true]$onlyDocChanged"
name: SetIfOnlyDocumentionChangedVaribale
displayName: Check whether only documentation has been updated
- job: BootstrapMSBuildOnFullFrameworkWindows
dependsOn: IfOnlyDocumentionChanged
variables:
onlyDocChanged: $[ dependencies.IfOnlyDocumentionChanged.outputs['SetIfOnlyDocumentionChangedVaribale.onlyDocChanged'] ]
displayName: "Windows Full"
pool:
vmImage: 'windows-2022'
steps:
- task: BatchScript@1
displayName: cibuild_bootstrapped_msbuild.cmd
inputs:
filename: 'eng/cibuild_bootstrapped_msbuild.cmd'
arguments: -onlyDocChanged $(onlyDocChanged)
- task: PublishTestResults@2
displayName: Publish .NET Framework Test Results
inputs:
testRunTitle: 'Windows-on-full Full Framework'
testRunner: XUnit
testResultsFiles: 'artifacts/TestResults/Debug/*UnitTests_net472*.xml'
publishRunAttachments: true
mergeTestResults: true
continueOnError: true
condition: eq(variables.onlyDocChanged, 0)
- task: PublishTestResults@2
displayName: Publish .NET Test Results
inputs:
testRunTitle: 'Windows-on-full .NET'
testRunner: XUnit
testResultsFiles: |
artifacts/TestResults/**/*.xml
!**/*UnitTests_net472*.xml
publishRunAttachments: true
mergeTestResults: true
continueOnError: true
condition: eq(variables.onlyDocChanged, 0)
- task: CmdLine@2
displayName: 'Set flag to publish Verify *.received.* files when test step fails'
condition: failed()
inputs:
script: 'echo "##vso[task.setvariable variable=publishverify]Yes"'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: logs'
inputs:
PathtoPublish: 'artifacts/log/Debug'
ArtifactName: 'FullOnWindows build logs'
continueOnError: true
condition: always()
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: TestResults'
inputs:
PathtoPublish: 'artifacts/TestResults'
ArtifactName: 'FullOnWindows test logs'
continueOnError: true
condition: eq(variables.onlyDocChanged, 0)
- task: CopyFiles@2
condition: eq(variables['publishverify'], 'Yes')
displayName: 'Copy Verify *.received.* files to Artifact Staging'
inputs:
contents: '**\*.received.*'
targetFolder: '$(Build.ArtifactStagingDirectory)\Verify'
cleanTargetFolder: true
overWrite: true
- task: PublishBuildArtifacts@1
displayName: 'Publish Verify *.received.* files as Artifacts'
name: 'verifypublish'
condition: eq(variables['publishverify'], 'Yes')
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)\Verify'
ArtifactName: 'Windows-on-full Verify $(System.JobAttempt)'
- job: BootstrapMSBuildOnCoreWindows
displayName: "Windows Core"
dependsOn: IfOnlyDocumentionChanged
variables:
onlyDocChanged: $[ dependencies.IfOnlyDocumentionChanged.outputs['SetIfOnlyDocumentionChangedVaribale.onlyDocChanged'] ]
pool:
vmImage: 'windows-2022'
steps:
- task: BatchScript@1
displayName: cibuild_bootstrapped_msbuild.cmd
inputs:
filename: 'eng/cibuild_bootstrapped_msbuild.cmd'
arguments: '-msbuildEngine dotnet -onlyDocChanged $(onlyDocChanged)'
- task: PublishTestResults@2
displayName: Publish .NET Framework Test Results
inputs:
testRunTitle: 'Windows-on-Core Full Framework'
testRunner: XUnit
testResultsFiles: 'artifacts/TestResults/Debug/*UnitTests_net472*.xml'
publishRunAttachments: true
mergeTestResults: true
continueOnError: true
condition: eq(variables.onlyDocChanged, 0)
- task: PublishTestResults@2
displayName: Publish .NET Test Results
inputs:
testRunTitle: 'Windows-on-Core .NET'
testRunner: XUnit
testResultsFiles: |
artifacts/TestResults/**/*.xml
!**/*UnitTests_net472*.xml
publishRunAttachments: true
mergeTestResults: true
continueOnError: true
condition: eq(variables.onlyDocChanged, 0)
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: logs'
inputs:
PathtoPublish: 'artifacts/log/Debug'
ArtifactName: 'CoreOnWindows build logs'
continueOnError: true
condition: always()
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: TestResults'
inputs:
PathtoPublish: 'artifacts/TestResults'
ArtifactName: 'CoreOnWindows test logs'
continueOnError: true
condition: eq(variables.onlyDocChanged, 0)
- job: FullReleaseOnWindows
displayName: "Windows Full Release (no bootstrap)"
dependsOn: IfOnlyDocumentionChanged
variables:
onlyDocChanged: $[ dependencies.IfOnlyDocumentionChanged.outputs['SetIfOnlyDocumentionChangedVaribale.onlyDocChanged'] ]
pool:
${{ if eq(variables['System.TeamProject'], 'public') }}:
name: NetCore-Public
demands: ImageOverride -equals windows.vs2022preview.amd64.open
${{ if ne(variables['System.TeamProject'], 'public') }}:
name: VSEngSS-MicroBuild2022-1ES
demands: agent.os -equals Windows_NT
steps:
- task: BatchScript@1
displayName: cibuild.cmd
inputs:
filename: 'eng/cibuild.cmd'
arguments: '-configuration Release -test'
condition: eq(variables.onlyDocChanged, 0)
- task: BatchScript@1
displayName: cibuild.cmd without test
inputs:
filename: 'eng/cibuild.cmd'
arguments: '-configuration Release'
condition: eq(variables.onlyDocChanged, 1)
- task: PublishTestResults@2
displayName: Publish .NET Framework Test Results
inputs:
testRunTitle: 'Windows-on-full Release Full Framework'
testRunner: XUnit
testResultsFiles: 'artifacts/TestResults/Release/*UnitTests_net472*.xml'
publishRunAttachments: true
mergeTestResults: true
continueOnError: true
condition: eq(variables.onlyDocChanged, 0)
- task: PublishTestResults@2
displayName: Publish .NET Test Results
inputs:
testRunTitle: 'Windows-on-full Release .NET'
testRunner: XUnit
testResultsFiles: |
artifacts/TestResults/**/*.xml
!**/*UnitTests_net472*.xml
publishRunAttachments: true
mergeTestResults: true
continueOnError: true
condition: eq(variables.onlyDocChanged, 0)
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: logs'
inputs:
PathtoPublish: 'artifacts/Log/Release'
ArtifactName: 'FullOnWindows Release build logs'
continueOnError: true
condition: always()
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: TestResults'
inputs:
PathtoPublish: 'artifacts/TestResults'
ArtifactName: 'FullOnWindows Release test logs'
continueOnError: true
condition: eq(variables.onlyDocChanged, 0)
# Unavailable in dnceng-public as of 9/1/2022; should be restored soon.
# - job: RichCodeNavIndex
# displayName: "Windows Code Indexing"
# pool:
# vmImage: 'windows-2022'
# steps:
# - task: BatchScript@1
# displayName: build.cmd
# inputs:
# filename: 'build.cmd'
# - task: RichCodeNavIndexer@0
# displayName: RichCodeNav Upload
# inputs:
# languages: 'csharp'
# continueOnError: true
# condition: succeeded()
- job: CoreBootstrappedOnLinux
displayName: "Linux Core"
dependsOn: IfOnlyDocumentionChanged
variables:
onlyDocChanged: $[ dependencies.IfOnlyDocumentionChanged.outputs['SetIfOnlyDocumentionChangedVaribale.onlyDocChanged'] ]
pool:
vmImage: 'ubuntu-latest'
steps:
- bash: . 'eng/cibuild_bootstrapped_msbuild.sh' --onlyDocChanged $(onlyDocChanged)
displayName: CI Build
- task: PublishTestResults@2
displayName: Publish .NET Test Results
inputs:
testRunTitle: 'Linux .NET'
testRunner: XUnit
testResultsFiles: |
artifacts/TestResults/**/*.xml
!**/*UnitTests_net472*.xml
publishRunAttachments: true
mergeTestResults: true
continueOnError: true
condition: eq(variables.onlyDocChanged, 0)
- task: CmdLine@2
displayName: 'Set flag to publish Verify *.received.* files when test step fails'
condition: failed()
inputs:
script: 'echo "##vso[task.setvariable variable=publishverify]Yes"'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: logs'
inputs:
PathtoPublish: 'artifacts/log/Debug'
ArtifactName: 'CoreOnLinux build logs'
continueOnError: true
condition: always()
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: TestResults'
inputs:
PathtoPublish: 'artifacts/TestResults'
ArtifactName: 'CoreOnLinux test logs'
continueOnError: true
condition: eq(variables.onlyDocChanged, 0)
- task: CopyFiles@2
condition: eq(variables['publishverify'], 'Yes')
displayName: 'Copy Verify *.received.* files to Artifact Staging'
inputs:
contents: '**/*.received.*'
targetFolder: '$(Build.ArtifactStagingDirectory)/Verify'
cleanTargetFolder: true
overWrite: true
- task: PublishBuildArtifacts@1
displayName: 'Publish Verify *.received.* files as Artifacts'
name: 'verifypublish'
condition: eq(variables['publishverify'], 'Yes')
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)/Verify'
ArtifactName: 'Linux Verify $(System.JobAttempt)'
- job: CoreOnMac
displayName: "macOS Core"
dependsOn: IfOnlyDocumentionChanged
variables:
onlyDocChanged: $[ dependencies.IfOnlyDocumentionChanged.outputs['SetIfOnlyDocumentionChangedVaribale.onlyDocChanged'] ]
pool:
vmImage: 'macOS-latest'
steps:
- bash: . 'eng/cibuild_bootstrapped_msbuild.sh' --onlyDocChanged $(onlyDocChanged)
displayName: CI Build
- task: PublishTestResults@2
displayName: Publish .NET Test Results
inputs:
testRunTitle: 'macOS .NET'
testRunner: XUnit
testResultsFiles: |
artifacts/TestResults/**/*.xml
!**/*UnitTests_net472*.xml
publishRunAttachments: true
mergeTestResults: true
continueOnError: true
condition: eq(variables.onlyDocChanged, 0)
- task: CmdLine@2
displayName: 'Set flag to publish Verify *.received.* files when test step fails'
condition: failed()
inputs:
script: 'echo "##vso[task.setvariable variable=publishverify]Yes"'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: logs'
inputs:
PathtoPublish: 'artifacts/log/Debug'
ArtifactName: 'CoreOnMac build logs'
continueOnError: true
condition: always()
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: TestResults'
inputs:
PathtoPublish: 'artifacts/TestResults'
ArtifactName: 'CoreOnMac test logs'
continueOnError: true
condition: eq(variables.onlyDocChanged, 0)
- task: CopyFiles@2
condition: eq(variables['publishverify'], 'Yes')
displayName: 'Copy Verify *.received.* files to Artifact Staging'
inputs:
contents: '**/*.received.*'
targetFolder: '$(Build.ArtifactStagingDirectory)/Verify'
cleanTargetFolder: true
overWrite: true
- task: PublishBuildArtifacts@1
displayName: 'Publish Verify *.received.* files as Artifacts'
name: 'verifypublish'
condition: eq(variables['publishverify'], 'Yes')
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)/Verify'
ArtifactName: 'macOS Verify $(System.JobAttempt)'
- template: /eng/common/templates/jobs/source-build.yml