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: 7.0.x 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.Server.Integration.Tests/bin/Release/net7.0/openapi.json" artifactName: 'OpenAPI Spec'