2020-06-19 13:25:11 -07:00
jobs :
- job : BuildPackage
displayName : 'Build Packages'
strategy :
matrix :
CentOS.amd64 :
BuildConfiguration : centos.amd64
Fedora.amd64 :
BuildConfiguration : fedora.amd64
Debian.amd64 :
BuildConfiguration : debian.amd64
Debian.arm64 :
BuildConfiguration : debian.arm64
Debian.armhf :
BuildConfiguration : debian.armhf
Ubuntu.amd64 :
BuildConfiguration : ubuntu.amd64
Ubuntu.arm64 :
BuildConfiguration : ubuntu.arm64
Ubuntu.armhf :
BuildConfiguration : ubuntu.armhf
Linux.amd64 :
BuildConfiguration : linux.amd64
2020-12-19 13:57:08 -07:00
Linux.amd64-musl :
BuildConfiguration : linux.amd64-musl
Linux.arm64 :
BuildConfiguration : linux.arm64
Linux.armhf :
BuildConfiguration : linux.armhf
2020-06-19 13:25:11 -07:00
Windows.amd64 :
BuildConfiguration : windows.amd64
MacOS :
BuildConfiguration : macos
Portable :
BuildConfiguration : portable
pool :
vmImage : 'ubuntu-latest'
steps :
- script : 'docker build -f deployment/Dockerfile.$(BuildConfiguration) -t jellyfin-server-$(BuildConfiguration) deployment'
displayName : 'Build Dockerfile'
- script : 'docker image ls -a && docker run -v $(pwd)/deployment/dist:/dist -v $(pwd):/jellyfin -e IS_UNSTABLE="yes" -e BUILD_ID=$(Build.BuildNumber) jellyfin-server-$(BuildConfiguration)'
displayName : 'Run Dockerfile (unstable)'
2020-06-20 12:03:25 -07:00
condition : startsWith(variables['Build.SourceBranch'], 'refs/heads/master')
2020-06-19 13:25:11 -07:00
- script : 'docker image ls -a && docker run -v $(pwd)/deployment/dist:/dist -v $(pwd):/jellyfin -e IS_UNSTABLE="no" -e BUILD_ID=$(Build.BuildNumber) jellyfin-server-$(BuildConfiguration)'
displayName : 'Run Dockerfile (stable)'
2020-09-02 13:53:33 -07:00
condition : startsWith(variables['Build.SourceBranch'], 'refs/tags/v')
2020-06-19 13:25:11 -07:00
- task : PublishPipelineArtifact@1
displayName : 'Publish Release'
inputs :
targetPath : '$(Build.SourcesDirectory)/deployment/dist'
artifactName : 'jellyfin-server-$(BuildConfiguration)'
2020-07-13 11:36:07 -07:00
- task : SSH@0
displayName : 'Create target directory on repository server'
inputs :
sshEndpoint : repository
runOptions : 'inline'
inline : 'mkdir -p /srv/repository/incoming/azure/$(Build.BuildNumber)/$(BuildConfiguration)'
2020-06-19 13:25:11 -07:00
- task : CopyFilesOverSSH@0
displayName : 'Upload artifacts to repository server'
inputs :
sshEndpoint : repository
sourceFolder : '$(Build.SourcesDirectory)/deployment/dist'
contents : '**'
2020-11-06 10:00:00 -07:00
targetFolder : '/srv/repository/incoming/azure/$(Build.BuildNumber)/$(BuildConfiguration)'
2020-10-01 08:57:40 -07:00
- job : OpenAPISpec
dependsOn : Test
condition : or(startsWith(variables['Build.SourceBranch'], 'refs/heads/master'),startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))
displayName : 'Push OpenAPI Spec to repository'
pool :
vmImage : 'ubuntu-latest'
steps :
- task : DownloadPipelineArtifact@2
displayName : 'Download OpenAPI Spec'
inputs :
source : 'current'
artifact : "OpenAPI Spec"
path : "$(System.ArtifactsDirectory)/openapispec"
runVersion : "latest"
- task : SSH@0
displayName : 'Create target directory on repository server'
inputs :
sshEndpoint : repository
runOptions : 'inline'
inline : 'mkdir -p /srv/repository/incoming/azure/$(Build.BuildNumber)'
- task : CopyFilesOverSSH@0
displayName : 'Upload artifacts to repository server'
inputs :
sshEndpoint : repository
sourceFolder : '$(System.ArtifactsDirectory)/openapispec'
contents : 'openapi.json'
targetFolder : '/srv/repository/incoming/azure/$(Build.BuildNumber)'
2020-06-19 13:25:11 -07:00
- job : BuildDocker
displayName : 'Build Docker'
2020-06-19 14:20:48 -07:00
strategy :
matrix :
2020-06-19 14:33:07 -07:00
amd64 :
2020-06-19 14:20:48 -07:00
BuildConfiguration : amd64
2020-06-19 14:33:07 -07:00
arm64 :
2020-06-19 14:20:48 -07:00
BuildConfiguration : arm64
2020-06-19 14:33:07 -07:00
armhf :
2020-06-19 14:20:48 -07:00
BuildConfiguration : armhf
2020-06-19 13:25:11 -07:00
pool :
vmImage : 'ubuntu-latest'
2020-07-27 18:35:57 -07:00
variables :
- name : JellyfinVersion
value : 0.0 .0
2020-06-19 13:25:11 -07:00
steps :
2020-07-27 21:21:30 -07:00
- script : echo "##vso[task.setvariable variable=JellyfinVersion]$( awk -F '/' '{ print $NF }' <<<'$(Build.SourceBranch)' | sed 's/^v//' )"
2020-07-27 18:35:57 -07:00
displayName : Set release version (stable)
2020-09-02 13:53:33 -07:00
condition : startsWith(variables['Build.SourceBranch'], 'refs/tags/v')
2020-07-27 18:35:57 -07:00
2020-06-19 13:25:11 -07:00
- task : Docker@2
displayName : 'Push Unstable Image'
2020-06-20 12:03:25 -07:00
condition : startsWith(variables['Build.SourceBranch'], 'refs/heads/master')
2020-06-19 13:25:11 -07:00
inputs :
repository : 'jellyfin/jellyfin-server'
command : buildAndPush
buildContext : '.'
2020-06-19 14:20:48 -07:00
Dockerfile : 'deployment/Dockerfile.docker.$(BuildConfiguration)'
2020-06-19 13:25:11 -07:00
containerRegistry : Docker Hub
tags : |
2020-06-19 14:20:48 -07:00
unstable-$(Build.BuildNumber)-$(BuildConfiguration)
unstable-$(BuildConfiguration)
2020-06-19 13:25:11 -07:00
- task : Docker@2
displayName : 'Push Stable Image'
2020-09-02 13:53:33 -07:00
condition : startsWith(variables['Build.SourceBranch'], 'refs/tags/v')
2020-06-19 13:25:11 -07:00
inputs :
repository : 'jellyfin/jellyfin-server'
command : buildAndPush
buildContext : '.'
2020-06-19 14:20:48 -07:00
Dockerfile : 'deployment/Dockerfile.docker.$(BuildConfiguration)'
2020-06-19 13:25:11 -07:00
containerRegistry : Docker Hub
tags : |
2020-06-19 14:20:48 -07:00
stable-$(Build.BuildNumber)-$(BuildConfiguration)
2020-07-27 18:35:57 -07:00
$(JellyfinVersion)-$(BuildConfiguration)
2020-06-19 13:25:11 -07:00
- job : CollectArtifacts
2020-08-10 03:24:56 -07:00
timeoutInMinutes : 20
2020-06-19 13:25:11 -07:00
displayName : 'Collect Artifacts'
2020-08-10 03:24:56 -07:00
continueOnError : true
2020-06-19 13:25:11 -07:00
dependsOn :
- BuildPackage
- BuildDocker
pool :
vmImage : 'ubuntu-latest'
steps :
- task : SSH@0
displayName : 'Update Unstable Repository'
2020-08-10 03:24:56 -07:00
continueOnError : true
2020-06-20 12:03:25 -07:00
condition : startsWith(variables['Build.SourceBranch'], 'refs/heads/master')
2020-06-19 13:25:11 -07:00
inputs :
sshEndpoint : repository
2020-07-31 15:20:47 -07:00
runOptions : 'commands'
2020-11-06 11:00:59 -07:00
commands : nohup sudo /srv/repository/collect-server.azure.sh /srv/repository/incoming/azure $(Build.BuildNumber) unstable &
2020-06-19 13:25:11 -07:00
- task : SSH@0
2020-09-02 13:42:00 -07:00
displayName : 'Update Stable Repository'
2020-08-10 03:24:56 -07:00
continueOnError : true
2020-09-02 13:53:33 -07:00
condition : startsWith(variables['Build.SourceBranch'], 'refs/tags/v')
2020-06-19 13:25:11 -07:00
inputs :
sshEndpoint : repository
2020-07-31 15:32:25 -07:00
runOptions : 'commands'
2020-11-06 11:00:59 -07:00
commands : nohup sudo /srv/repository/collect-server.azure.sh /srv/repository/incoming/azure $(Build.BuildNumber) &
2020-09-02 13:42:00 -07:00
2020-07-19 10:59:07 -07:00
- job : PublishNuget
displayName : 'Publish NuGet packages'
2020-07-31 15:20:47 -07:00
2020-07-19 10:59:07 -07:00
pool :
vmImage : 'ubuntu-latest'
2021-01-01 06:56:14 -07:00
variables :
- name : JellyfinVersion
2021-01-05 15:01:46 -07:00
value : $[replace(variables['Build.SourceBranch'],'refs/tags/v','')]
2021-01-01 06:56:14 -07:00
2020-07-19 10:59:07 -07:00
steps :
2020-11-16 21:27:14 -07:00
- task : UseDotNet@2
displayName : 'Use .NET 5.0 sdk'
inputs :
packageType : 'sdk'
version : '5.0.x'
2020-08-13 06:22:12 -07:00
- task : DotNetCoreCLI@2
2020-08-13 10:03:47 -07:00
displayName : 'Build Stable Nuget packages'
2020-09-02 13:53:33 -07:00
condition : startsWith(variables['Build.SourceBranch'], 'refs/tags/v')
2020-07-19 10:59:07 -07:00
inputs :
2021-01-01 06:56:14 -07:00
command : 'custom'
projects : |
Jellyfin.Data/Jellyfin.Data.csproj
MediaBrowser.Common/MediaBrowser.Common.csproj
MediaBrowser.Controller/MediaBrowser.Controller.csproj
MediaBrowser.Model/MediaBrowser.Model.csproj
Emby.Naming/Emby.Naming.csproj
custom : 'pack'
arguments : -o $(Build.ArtifactStagingDirectory) -p:Version=$(JellyfinVersion)
2020-07-19 10:59:07 -07:00
2020-08-13 10:03:47 -07:00
- task : DotNetCoreCLI@2
displayName : 'Build Unstable Nuget packages'
2020-12-24 02:18:32 -07:00
condition : startsWith(variables['Build.SourceBranch'], 'refs/heads/master')
2020-08-13 10:03:47 -07:00
inputs :
command : 'custom'
projects : |
Jellyfin.Data/Jellyfin.Data.csproj
MediaBrowser.Common/MediaBrowser.Common.csproj
MediaBrowser.Controller/MediaBrowser.Controller.csproj
MediaBrowser.Model/MediaBrowser.Model.csproj
Emby.Naming/Emby.Naming.csproj
custom : 'pack'
2020-09-02 13:42:00 -07:00
arguments : '--version-suffix $(Build.BuildNumber) -o $(Build.ArtifactStagingDirectory) -p:Stability=Unstable'
2020-08-13 10:03:47 -07:00
2020-08-13 06:35:56 -07:00
- task : PublishBuildArtifacts@1
2020-08-13 10:03:47 -07:00
displayName : 'Publish Nuget packages'
2020-08-13 06:35:56 -07:00
inputs :
pathToPublish : $(Build.ArtifactStagingDirectory)
artifactName : Jellyfin Nuget Packages
2020-07-19 10:59:07 -07:00
- task : NuGetCommand@2
2020-09-02 13:42:00 -07:00
displayName : 'Push Nuget packages to stable feed'
condition : startsWith(variables['Build.SourceBranch'], 'refs/tags/v')
inputs :
command : 'push'
2021-01-01 06:56:14 -07:00
packagesToPush : '$(Build.ArtifactStagingDirectory)/**/*.nupkg'
2020-09-02 13:42:00 -07:00
nuGetFeedType : 'external'
publishFeedCredentials : 'NugetOrg'
allowPackageConflicts : true # This ignores an error if the version already exists
- task : NuGetAuthenticate@0
displayName : 'Authenticate to unstable Nuget feed'
condition : startsWith(variables['Build.SourceBranch'], 'refs/heads/master')
- task : NuGetCommand@2
displayName : 'Push Nuget packages to unstable feed'
condition : startsWith(variables['Build.SourceBranch'], 'refs/heads/master')
2020-07-19 10:59:07 -07:00
inputs :
command : 'push'
2020-09-02 13:42:00 -07:00
packagesToPush : '$(Build.ArtifactStagingDirectory)/**/*.nupkg;!$(Build.ArtifactStagingDirectory)/**/*.symbols.nupkg' # No symbols since Azure Artifact does not support it
nuGetFeedType : 'internal'
publishVstsFeed : '7cce6c46-d610-45e3-9fb7-65a6bfd1b671/a5746b79-f369-42db-93ff-59cd066f9327'
allowPackageConflicts : true # This ignores an error if the version already exists