346581bb2a
Also adds SourceLink support and symbols that are pushed to Nuget. Add symbols to main nuget packages for unstable builds (Azure Artifacts does not support symbols outside of the main package) SourceLink will enable stepping during debugging.
215 lines
7.5 KiB
YAML
215 lines
7.5 KiB
YAML
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
|
|
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)'
|
|
condition: startsWith(variables['Build.SourceBranch'], 'refs/heads/master')
|
|
|
|
- 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)'
|
|
condition: startsWith(variables['Build.SourceBranch'], 'refs/tags')
|
|
|
|
- task: PublishPipelineArtifact@1
|
|
displayName: 'Publish Release'
|
|
inputs:
|
|
targetPath: '$(Build.SourcesDirectory)/deployment/dist'
|
|
artifactName: 'jellyfin-server-$(BuildConfiguration)'
|
|
|
|
- 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)'
|
|
|
|
- task: CopyFilesOverSSH@0
|
|
displayName: 'Upload artifacts to repository server'
|
|
inputs:
|
|
sshEndpoint: repository
|
|
sourceFolder: '$(Build.SourcesDirectory)/deployment/dist'
|
|
contents: '**'
|
|
targetFolder: '/srv/repository/incoming/azure/$(Build.BuildNumber)/$(BuildConfiguration)'
|
|
|
|
- job: BuildDocker
|
|
displayName: 'Build Docker'
|
|
|
|
strategy:
|
|
matrix:
|
|
amd64:
|
|
BuildConfiguration: amd64
|
|
arm64:
|
|
BuildConfiguration: arm64
|
|
armhf:
|
|
BuildConfiguration: armhf
|
|
|
|
pool:
|
|
vmImage: 'ubuntu-latest'
|
|
|
|
variables:
|
|
- name: JellyfinVersion
|
|
value: 0.0.0
|
|
|
|
steps:
|
|
- script: echo "##vso[task.setvariable variable=JellyfinVersion]$( awk -F '/' '{ print $NF }' <<<'$(Build.SourceBranch)' | sed 's/^v//' )"
|
|
displayName: Set release version (stable)
|
|
condition: startsWith(variables['Build.SourceBranch'], 'refs/tags')
|
|
|
|
- task: Docker@2
|
|
displayName: 'Push Unstable Image'
|
|
condition: startsWith(variables['Build.SourceBranch'], 'refs/heads/master')
|
|
inputs:
|
|
repository: 'jellyfin/jellyfin-server'
|
|
command: buildAndPush
|
|
buildContext: '.'
|
|
Dockerfile: 'deployment/Dockerfile.docker.$(BuildConfiguration)'
|
|
containerRegistry: Docker Hub
|
|
tags: |
|
|
unstable-$(Build.BuildNumber)-$(BuildConfiguration)
|
|
unstable-$(BuildConfiguration)
|
|
|
|
- task: Docker@2
|
|
displayName: 'Push Stable Image'
|
|
condition: startsWith(variables['Build.SourceBranch'], 'refs/tags')
|
|
inputs:
|
|
repository: 'jellyfin/jellyfin-server'
|
|
command: buildAndPush
|
|
buildContext: '.'
|
|
Dockerfile: 'deployment/Dockerfile.docker.$(BuildConfiguration)'
|
|
containerRegistry: Docker Hub
|
|
tags: |
|
|
stable-$(Build.BuildNumber)-$(BuildConfiguration)
|
|
$(JellyfinVersion)-$(BuildConfiguration)
|
|
|
|
- job: CollectArtifacts
|
|
timeoutInMinutes: 20
|
|
displayName: 'Collect Artifacts'
|
|
continueOnError: true
|
|
dependsOn:
|
|
- BuildPackage
|
|
- BuildDocker
|
|
condition: and(succeeded('BuildPackage'), succeeded('BuildDocker'))
|
|
|
|
pool:
|
|
vmImage: 'ubuntu-latest'
|
|
|
|
steps:
|
|
- task: SSH@0
|
|
displayName: 'Update Unstable Repository'
|
|
continueOnError: true
|
|
condition: startsWith(variables['Build.SourceBranch'], 'refs/heads/master')
|
|
inputs:
|
|
sshEndpoint: repository
|
|
runOptions: 'commands'
|
|
commands: sudo nohup -n /srv/repository/collect-server.azure.sh /srv/repository/incoming/azure $(Build.BuildNumber) unstable &
|
|
|
|
- task: SSH@0
|
|
displayName: 'Update Stable Repository'
|
|
continueOnError: true
|
|
condition: startsWith(variables['Build.SourceBranch'], 'refs/tags')
|
|
inputs:
|
|
sshEndpoint: repository
|
|
runOptions: 'commands'
|
|
commands: sudo nohup -n /srv/repository/collect-server.azure.sh /srv/repository/incoming/azure $(Build.BuildNumber) &
|
|
|
|
- job: PublishNuget
|
|
displayName: 'Publish NuGet packages'
|
|
dependsOn:
|
|
- BuildPackage
|
|
condition: succeeded('BuildPackage')
|
|
|
|
pool:
|
|
vmImage: 'ubuntu-latest'
|
|
|
|
steps:
|
|
- task: DotNetCoreCLI@2
|
|
displayName: 'Build Stable Nuget packages'
|
|
condition: startsWith(variables['Build.SourceBranch'], 'refs/tags')
|
|
inputs:
|
|
command: 'pack'
|
|
packagesToPack: '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'
|
|
versioningScheme: 'off'
|
|
|
|
- task: DotNetCoreCLI@2
|
|
displayName: 'Build Unstable Nuget packages'
|
|
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'
|
|
arguments: '--version-suffix $(Build.BuildNumber) -o $(Build.ArtifactStagingDirectory) -p:Stability=Unstable'
|
|
|
|
- task: PublishBuildArtifacts@1
|
|
displayName: 'Publish Nuget packages'
|
|
inputs:
|
|
pathToPublish: $(Build.ArtifactStagingDirectory)
|
|
artifactName: Jellyfin Nuget Packages
|
|
|
|
- task: NuGetAuthenticate@0
|
|
displayName: 'Authenticate to stable Nuget feed'
|
|
condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/v')
|
|
inputs:
|
|
nuGetServiceConnections: 'NugetOrg'
|
|
|
|
- task: NuGetCommand@2
|
|
displayName: 'Push Nuget packages to stable feed'
|
|
condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/v')
|
|
inputs:
|
|
command: 'push'
|
|
packagesToPush: '$(Build.ArtifactStagingDirectory)/**/*.nupkg;$(Build.ArtifactStagingDirectory)/**/*.snupkg'
|
|
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')
|
|
inputs:
|
|
command: 'push'
|
|
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
|