parameters :
- name : ImageNames
type : object
default :
Linux : "ubuntu-latest"
Windows : "windows-latest"
macOS : "macos-latest"
- name : TestProjects
type : string
default : "tests/**/*Tests.csproj"
- name : DotNetSdkVersion
type : string
default : 5.0 .103
jobs :
- job : Test
displayName : Test
strategy :
matrix :
${{ each imageName in parameters.ImageNames }}:
${{ imageName.key }}:
ImageName : ${{ imageName.value }}
pool :
vmImage : "$(ImageName)"
steps :
- checkout : self
clean : true
submodules : true
persistCredentials : false
# This is required for the SonarCloud analyzer
- task : UseDotNet@2
displayName : "Install .NET SDK 5.x"
condition : eq(variables['ImageName'], 'ubuntu-latest')
inputs :
packageType : sdk
version : '5.x'
- task : UseDotNet@2
displayName : "Update DotNet"
inputs :
packageType : sdk
version : ${{ parameters.DotNetSdkVersion }}
- task : SonarCloudPrepare@1
displayName : 'Prepare analysis on SonarCloud'
condition : eq(variables['ImageName'], 'ubuntu-latest')
enabled : false
inputs :
SonarCloud : 'Sonarcloud for Jellyfin'
organization : 'jellyfin'
projectKey : 'jellyfin_jellyfin'
- task : DotNetCoreCLI@2
displayName : 'Run CLI Tests'
inputs :
command : "test"
projects : ${{ parameters.TestProjects }}
arguments : '--configuration Release --collect:"XPlat Code Coverage" --settings tests/coverletArgs.runsettings --verbosity minimal'
publishTestResults : true
testRunTitle : $(Agent.JobName)
workingDirectory : "$(Build.SourcesDirectory)"
- task : SonarCloudAnalyze@1
displayName : 'Run Code Analysis'
condition : eq(variables['ImageName'], 'ubuntu-latest')
enabled : false
- task : SonarCloudPublish@1
displayName : 'Publish Quality Gate Result'
condition : eq(variables['ImageName'], 'ubuntu-latest')
enabled : false
- task : Palmmedia.reportgenerator.reportgenerator-build-release-task.reportgenerator@4
condition : and(succeeded(), eq(variables['Agent.OS'], 'Linux')) # !! THIS is for V1 only V2 will/should support merging
displayName : 'Run ReportGenerator'
inputs :
reports : "$(Agent.TempDirectory)/**/coverage.cobertura.xml"
targetdir : "$(Agent.TempDirectory)/merged/"
reporttypes : "Cobertura"
## V2 is already in the repository but it does not work "wrong number of segments" YAML error.
- task : PublishCodeCoverageResults@1
condition : and(succeeded(), eq(variables['Agent.OS'], 'Linux')) # !! THIS is for V1 only V2 will/should support merging
displayName : 'Publish Code Coverage'
inputs :
codeCoverageTool : "cobertura"
#summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' # !!THIS IS FOR V2
summaryFileLocation : "$(Agent.TempDirectory)/merged/**.xml"
pathToSources : $(Build.SourcesDirectory)
failIfCoverageEmpty : true
- task : PublishPipelineArtifact@1
displayName : 'Publish OpenAPI Artifact'
condition : and(succeeded(), eq(variables['Agent.OS'], 'Linux'))
inputs :
targetPath : "tests/Jellyfin.Api.Tests/bin/Release/net5.0/openapi.json"
artifactName : 'OpenAPI Spec'