trigger:
  - master

variables:
  ${{ if startsWith(variables['Build.SourceBranch'], 'refs/heads/') }}:
    branchName: ${{ replace(variables['Build.SourceBranchName'], 'refs/heads/', '') }}
  ${{ if startsWith(variables['Build.SourceBranch'], 'refs/pull/') }}:
    branchName: ${{ replace(variables['System.PullRequest.SourceBranch'], 'refs/heads/', '') }}

stages:
  - stage: generate
    jobs:
      - job: swagger_generate
        pool:
          vmImage: 'ubuntu-latest'
        steps:
          - task: GoTool@0
            inputs:
              version: '1.15'
          - task: CmdLine@2
            inputs:
              script: |
                sudo apt install gnupg ca-certificates
                sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 379CE192D401AB61
                echo "deb https://dl.bintray.com/go-swagger/goswagger-debian ubuntu main" | sudo tee /etc/apt/sources.list.d/goswagger.list
                sudo apt update
                sudo apt install swagger
                mkdir -p $(go env GOPATH)
                swagger generate client -f ../swagger.yaml -A authentik -t pkg/
              workingDirectory: 'proxy/'
          - task: PublishPipelineArtifact@1
            inputs:
              targetPath: 'proxy/pkg/'
              artifact: 'swagger_client'
              publishLocation: 'pipeline'
  - stage: lint
    jobs:
      - job: golint
        pool:
          vmImage: 'ubuntu-latest'
        steps:
          - task: GoTool@0
            inputs:
              version: '1.15'
          - task: Go@0
            inputs:
              command: 'get'
              arguments: '-u golang.org/x/lint/golint'
          - task: DownloadPipelineArtifact@2
            inputs:
              buildType: 'current'
              artifactName: 'swagger_client'
              path: "proxy/pkg/"
          - task: CmdLine@2
            inputs:
              script: |
                $(go list -f {{.Target}} golang.org/x/lint/golint) ./...
              workingDirectory: 'proxy/'
  - stage: build_go
    jobs:
      - job: build_go
        pool:
          vmImage: 'ubuntu-latest'
        steps:
          - task: GoTool@0
            inputs:
              version: '1.15'
          - task: DownloadPipelineArtifact@2
            inputs:
              buildType: 'current'
              artifactName: 'swagger_client'
              path: "proxy/pkg/"
          - task: Go@0
            inputs:
              command: 'build'
              workingDirectory: 'proxy/'
  - stage: build_docker
    jobs:
      - job: build_proxy
        pool:
          vmImage: 'ubuntu-latest'
        steps:
          - task: GoTool@0
            inputs:
              version: '1.15'
          - task: DownloadPipelineArtifact@2
            inputs:
              buildType: 'current'
              artifactName: 'swagger_client'
              path: "proxy/pkg/"
          - task: Docker@2
            inputs:
              containerRegistry: 'dockerhub'
              repository: 'beryju/authentik-proxy'
              command: 'buildAndPush'
              Dockerfile: 'proxy/Dockerfile'
              buildContext: 'proxy/'
              tags: "gh-${{ variables.branchName }}"