jobs:
- job: BuildPackage
  displayName: 'Build Packages'

  strategy:
    matrix:
      CentOS:
        BuildConfiguration: centos
      Debian:
        BuildConfiguration: debian
      Fedora:
        BuildConfiguration: fedora
      Portable:
        BuildConfiguration: portable

  pool:
    vmImage: 'ubuntu-latest'

  steps:
  - script: 'docker build -f deployment/Dockerfile.$(BuildConfiguration) -t jellyfin-web-$(BuildConfiguration) deployment'
    displayName: 'Build Dockerfile'
    condition: or(startsWith(variables['Build.SourceBranch'], 'refs/tags'), 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="yes" -e BUILD_ID=$(Build.BuildNumber) jellyfin-web-$(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-web-$(BuildConfiguration)'
    displayName: 'Run Dockerfile (stable)'
    condition: startsWith(variables['Build.SourceBranch'], 'refs/tags')

  - task: PublishPipelineArtifact@1
    displayName: 'Publish Release'
    condition: or(startsWith(variables['Build.SourceBranch'], 'refs/tags'), startsWith(variables['Build.SourceBranch'], 'refs/heads/master'))
    inputs:
      targetPath: '$(Build.SourcesDirectory)/deployment/dist'
      artifactName: 'jellyfin-web-$(BuildConfiguration)'

  - task: SSH@0
    displayName: 'Create target directory on repository server'
    condition: or(startsWith(variables['Build.SourceBranch'], 'refs/tags'), startsWith(variables['Build.SourceBranch'], 'refs/heads/master'))
    inputs:
      sshEndpoint: repository
      runOptions: 'inline'
      inline: 'mkdir -p /srv/repository/incoming/azure/$(Build.BuildNumber)/$(BuildConfiguration)'

  - task: CopyFilesOverSSH@0
    displayName: 'Upload artifacts to repository server'
    condition: or(startsWith(variables['Build.SourceBranch'], 'refs/tags'), startsWith(variables['Build.SourceBranch'], 'refs/heads/master'))
    inputs:
      sshEndpoint: repository
      sourceFolder: '$(Build.SourcesDirectory)/deployment/dist'
      contents: '**'
      targetFolder: '/srv/repository/incoming/azure/$(Build.BuildNumber)/$(BuildConfiguration)'

- job: BuildDocker
  displayName: 'Build Docker'

  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-web'
      command: buildAndPush
      buildContext: '.'
      Dockerfile: 'deployment/Dockerfile.docker'
      containerRegistry: Docker Hub
      tags: |
        unstable-$(Build.BuildNumber)
        unstable

  - task: Docker@2
    displayName: 'Push Stable Image'
    condition: startsWith(variables['Build.SourceBranch'], 'refs/tags')
    inputs:
      repository: 'jellyfin/jellyfin-web'
      command: buildAndPush
      buildContext: '.'
      Dockerfile: 'deployment/Dockerfile.docker'
      containerRegistry: Docker Hub
      tags: |
        stable-$(Build.BuildNumber)
        $(JellyfinVersion)

- job: CollectArtifacts
  displayName: 'Collect Artifacts'
  dependsOn:
  - BuildPackage
  - BuildDocker
  condition: and(succeeded('BuildPackage'), succeeded('BuildDocker'))

  pool:
    vmImage: 'ubuntu-latest'

  steps:
  - task: SSH@0
    displayName: 'Update Unstable Repository'
    condition: startsWith(variables['Build.SourceBranch'], 'refs/heads/master')
    inputs:
      sshEndpoint: repository
      runOptions: 'inline'
      inline: 'sudo /srv/repository/collect-server.azure.sh /srv/repository/incoming/azure $(Build.BuildNumber) unstable'

  - task: SSH@0
    displayName: 'Update Stable Repository'
    condition: startsWith(variables['Build.SourceBranch'], 'refs/tags')
    inputs:
      sshEndpoint: repository
      runOptions: 'inline'
      inline: 'sudo /srv/repository/collect-server.azure.sh /srv/repository/incoming/azure $(Build.BuildNumber)'
