123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- name: $(Date:yyyyMMdd)$(Rev:.r)
- variables:
- - name: TestProjects
- value: 'Jellyfin.Server.Tests/Jellyfin.Server.Tests.csproj'
- - name: RestoreBuildProjects
- value: 'Jellyfin.Server/Jellyfin.Server.csproj'
- pr:
- autoCancel: true
- trigger:
- batch: true
- jobs:
- - job: main_build
- displayName: Main Build
- pool:
- vmImage: ubuntu-16.04
- strategy:
- matrix:
- release:
- BuildConfiguration: Release
- debug:
- BuildConfiguration: Debug
- maxParallel: 2
- steps:
- - checkout: self
- clean: true
- submodules: true
- persistCredentials: false
- - task: DotNetCoreCLI@2
- displayName: Restore
- inputs:
- command: restore
- projects: '$(RestoreBuildProjects)'
- - task: DotNetCoreCLI@2
- displayName: Build
- inputs:
- projects: '$(RestoreBuildProjects)'
- arguments: '--configuration $(BuildConfiguration)'
- - task: DotNetCoreCLI@2
- displayName: Test
- inputs:
- command: test
- projects: '$(RestoreBuildProjects)'
- arguments: '--configuration $(BuildConfiguration)'
- enabled: false
- - task: DotNetCoreCLI@2
- displayName: Publish
- inputs:
- command: publish
- publishWebProjects: false
- projects: '$(RestoreBuildProjects)'
- arguments: '--configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory)'
- zipAfterPublish: false
- # - task: PublishBuildArtifacts@1
- # displayName: 'Publish Artifact'
- # inputs:
- # PathtoPublish: '$(build.artifactstagingdirectory)'
- # artifactName: 'jellyfin-build-$(BuildConfiguration)'
- # zipAfterPublish: true
- - task: PublishBuildArtifacts@1
- displayName: 'Publish Artifact Naming'
- condition: and(eq(variables['BuildConfiguration'], 'Release'), succeeded())
- inputs:
- PathtoPublish: '$(build.artifactstagingdirectory)/Jellyfin.Server/Emby.Naming.dll'
- artifactName: 'Jellyfin.Naming'
- - task: PublishBuildArtifacts@1
- displayName: 'Publish Artifact Controller'
- condition: and(eq(variables['BuildConfiguration'], 'Release'), succeeded())
- inputs:
- PathtoPublish: '$(build.artifactstagingdirectory)/Jellyfin.Server/MediaBrowser.Controller.dll'
- artifactName: 'Jellyfin.Controller'
- - task: PublishBuildArtifacts@1
- displayName: 'Publish Artifact Model'
- condition: and(eq(variables['BuildConfiguration'], 'Release'), succeeded())
- inputs:
- PathtoPublish: '$(build.artifactstagingdirectory)/Jellyfin.Server/MediaBrowser.Model.dll'
- artifactName: 'Jellyfin.Model'
- - task: PublishBuildArtifacts@1
- displayName: 'Publish Artifact Common'
- condition: and(eq(variables['BuildConfiguration'], 'Release'), succeeded())
- inputs:
- PathtoPublish: '$(build.artifactstagingdirectory)/Jellyfin.Server/MediaBrowser.Common.dll'
- artifactName: 'Jellyfin.Common'
- - job: dotnet_compat
- displayName: Compatibility Check
- pool:
- vmImage: ubuntu-16.04
- dependsOn: main_build
- condition: and(succeeded(), variables['System.PullRequest.PullRequestNumber']) # Only execute if the pullrequest numer is defined. (So not for normal CI builds)
- strategy:
- matrix:
- Naming:
- NugetPackageName: Jellyfin.Naming
- AssemblyFileName: Emby.Naming.dll
- Controller:
- NugetPackageName: Jellyfin.Controller
- AssemblyFileName: MediaBrowser.Controller.dll
- Model:
- NugetPackageName: Jellyfin.Model
- AssemblyFileName: MediaBrowser.Model.dll
- Common:
- NugetPackageName: Jellyfin.Common
- AssemblyFileName: MediaBrowser.Common.dll
- maxParallel: 2
- steps:
- - checkout: none
- - task: DownloadBuildArtifacts@0
- displayName: Download the Reference Assembly Build Artifact
- inputs:
- buildType: 'specific' # Options: current, specific
- project: $(System.TeamProjectId) # Required when buildType == Specific
- pipeline: $(System.DefinitionId) # Required when buildType == Specific, not sure if this will take a name too
- #specificBuildWithTriggering: false # Optional
- buildVersionToDownload: 'latestFromBranch' # Required when buildType == Specific# Options: latest, latestFromBranch, specific
- allowPartiallySucceededBuilds: false # Optional
- branchName: '$(System.PullRequest.TargetBranch)' # Required when buildType == Specific && BuildVersionToDownload == LatestFromBranch
- #buildId: # Required when buildType == Specific && BuildVersionToDownload == Specific
- #tags: # Optional
- downloadType: 'single' # Options: single, specific
- artifactName: '$(NugetPackageName)'# Required when downloadType == Single
- #itemPattern: '**' # Optional
- downloadPath: '$(System.ArtifactsDirectory)/current-artifacts'
- #parallelizationLimit: '8' # Optional
- - task: CopyFiles@2
- displayName: Copy Nuget Assembly to current-release folder
- inputs:
- sourceFolder: $(System.ArtifactsDirectory)/current-artifacts # Optional
- contents: '**/*.dll'
- targetFolder: $(System.ArtifactsDirectory)/current-release
- cleanTargetFolder: true # Optional
- overWrite: true # Optional
- flattenFolders: true # Optional
- - task: DownloadBuildArtifacts@0
- displayName: Download the New Assembly Build Artifact
- inputs:
- buildType: 'current' # Options: current, specific
- allowPartiallySucceededBuilds: false # Optional
- downloadType: 'single' # Options: single, specific
- artifactName: '$(NugetPackageName)' # Required when downloadType == Single
- downloadPath: '$(System.ArtifactsDirectory)/new-artifacts'
- - task: CopyFiles@2
- displayName: Copy Artifact Assembly to new-release folder
- inputs:
- sourceFolder: $(System.ArtifactsDirectory)/new-artifacts # Optional
- contents: '**/*.dll'
- targetFolder: $(System.ArtifactsDirectory)/new-release
- cleanTargetFolder: true # Optional
- overWrite: true # Optional
- flattenFolders: true # Optional
- - task: DownloadGitHubRelease@0
- displayName: Download ABI compatibility check tool from GitHub
- inputs:
- connection: Jellyfin GitHub
- userRepository: EraYaN/dotnet-compatibility
- defaultVersionType: 'latest' # Options: latest, specificVersion, specificTag
- #version: # Required when defaultVersionType != Latest
- itemPattern: '**-ci.zip' # Optional
- downloadPath: '$(System.ArtifactsDirectory)'
- - task: ExtractFiles@1
- displayName: Extract ABI compatibility check tool
- inputs:
- archiveFilePatterns: '$(System.ArtifactsDirectory)/*-ci.zip'
- destinationFolder: $(System.ArtifactsDirectory)/tools
- cleanDestinationFolder: true
- - task: CmdLine@2
- displayName: Execute ABI compatibility check tool
- inputs:
- script: 'dotnet tools/CompatibilityCheckerCoreCLI.dll current-release/$(AssemblyFileName) new-release/$(AssemblyFileName)'
- workingDirectory: $(System.ArtifactsDirectory) # Optional
- #failOnStderr: false # Optional
|