trigger:
  batch: true
  branches:
    include:
      - master
      - next
      - version-*

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

stages:
  - stage: generate
    jobs:
      - job: generate_api
        pool:
          vmImage: 'ubuntu-latest'
        steps:
          - task: GoTool@0
            inputs:
              version: '1.16.3'
          - task: CmdLine@2
            inputs:
              script: make gen-outpost
          - task: PublishPipelineArtifact@1
            inputs:
              targetPath: 'outpost/api/'
              artifact: 'go_api_client'
              publishLocation: 'pipeline'
  - stage: lint
    jobs:
      - job: golint
        pool:
          vmImage: 'ubuntu-latest'
        steps:
          - task: GoTool@0
            inputs:
              version: '1.16.3'
          - task: DownloadPipelineArtifact@2
            inputs:
              buildType: 'current'
              artifactName: 'go_api_client'
              path: "outpost/api/"
          - task: CmdLine@2
            inputs:
              script: |
                docker run \
                  --rm \
                  -v $(pwd):/app \
                  -w /app \
                  golangci/golangci-lint:v1.39.0 \
                  golangci-lint run -v --timeout 200s
              workingDirectory: 'outpost/'
  - stage: build_go
    jobs:
      - job: proxy_build_go
        pool:
          vmImage: 'ubuntu-latest'
        steps:
          - task: GoTool@0
            inputs:
              version: '1.16.3'
          - task: DownloadPipelineArtifact@2
            inputs:
              buildType: 'current'
              artifactName: 'go_api_client'
              path: "outpost/api/"
          - task: Go@0
            inputs:
              command: 'build'
              arguments: './cmd/proxy'
              workingDirectory: 'outpost/'
      - job: ldap_build_go
        pool:
          vmImage: 'ubuntu-latest'
        steps:
          - task: GoTool@0
            inputs:
              version: '1.16.3'
          - task: DownloadPipelineArtifact@2
            inputs:
              buildType: 'current'
              artifactName: 'go_api_client'
              path: "outpost/api/"
          - task: Go@0
            inputs:
              command: 'build'
              arguments: './cmd/ldap'
              workingDirectory: 'outpost/'
  - stage: build_docker
    jobs:
      - job: proxy_build_docker
        pool:
          vmImage: 'ubuntu-latest'
        steps:
          - task: GoTool@0
            inputs:
              version: '1.16.3'
          - task: DownloadPipelineArtifact@2
            inputs:
              buildType: 'current'
              artifactName: 'go_api_client'
              path: "outpost/api/"
          - task: Bash@3
            inputs:
              targetType: 'inline'
              script: |
                python ./scripts/az_do_set_branch.py
          - task: Docker@2
            inputs:
              containerRegistry: 'beryjuorg-harbor'
              repository: 'authentik/outpost-proxy'
              command: 'build'
              Dockerfile: 'outpost/proxy.Dockerfile'
              buildContext: 'outpost/'
              tags: |
                gh-$(branchName)
                gh-$(Build.SourceVersion)
              arguments: '--build-arg GIT_BUILD_HASH=$(Build.SourceVersion)'
          - task: Docker@2
            inputs:
              containerRegistry: 'beryjuorg-harbor'
              repository: 'authentik/outpost-proxy'
              command: 'push'
              tags: |
                gh-$(branchName)
                gh-$(Build.SourceVersion)
      - job: ldap_build_docker
        pool:
          vmImage: 'ubuntu-latest'
        steps:
          - task: GoTool@0
            inputs:
              version: '1.16.3'
          - task: DownloadPipelineArtifact@2
            inputs:
              buildType: 'current'
              artifactName: 'go_api_client'
              path: "outpost/api/"
          - task: Bash@3
            inputs:
              targetType: 'inline'
              script: |
                python ./scripts/az_do_set_branch.py
          - task: Docker@2
            inputs:
              containerRegistry: 'beryjuorg-harbor'
              repository: 'authentik/outpost-ldap'
              command: 'build'
              Dockerfile: 'outpost/ldap.Dockerfile'
              buildContext: 'outpost/'
              tags: |
                gh-$(branchName)
                gh-$(Build.SourceVersion)
              arguments: '--build-arg GIT_BUILD_HASH=$(Build.SourceVersion)'
          - task: Docker@2
            inputs:
              containerRegistry: 'beryjuorg-harbor'
              repository: 'authentik/outpost-ldap'
              command: 'push'
              tags: |
                gh-$(branchName)
                gh-$(Build.SourceVersion)
