# Docker
# Build a Docker image
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker
name: 1.0.0-$(SourceBranchName)-$(Rev:r)

trigger:
    - main

parameters:
    - name: forcePush
      displayName: Force push
      type: boolean
      default: false

resources:
    - repo: self
variables:
    tag: "$(Build.BuildNumber)"
    imageName: "redis-api"
    isMaster: $[eq(variables['Build.SourceBranchName'], 'master')]
    shouldPush: $[or(eq(${{parameters.forcePush}}, True), eq(variables['isMaster'], True))]
    tags: |

stages:
    - stage: Build
      displayName: Set version
      jobs:
          - job: CreateArtifact
            displayName: Create version artifact
            steps:
                - task: Bash@3
                  displayName: Write buildnumber
                  inputs:
                      targetType: "inline"
                      script: |
                          echo '$(Build.BuildNumber)' > $(Pipeline.Workspace)/.version

                - task: PublishPipelineArtifact@1
                  inputs:
                      targetPath: "$(Pipeline.Workspace)/.version"
                      artifact: "Version"
                      publishLocation: "pipeline"
                - task: Bash@3
                  displayName: Add tag main-latest if main branch
                  inputs:
                      targetType: "inline"
                      script: |
                          localTags = $(tag)
                          localTags += "\nlatest"
                          if [ $[isMaster] ]; then
                            localTags += "\nlatest-main"
                            echo -e "##vso[task.setvariable variable=tags;]$localTags"
                          fi
                          echo -e $localTags

          - job: Build
            displayName: Build
            pool:
                vmImage: ubuntu-latest
            steps:
                - task: Bash@3
                  inputs:
                      targetType: "inline"
                      script: |
                          echo "VERSION=$(tag)" >> .env.production
                          echo "ShouldPush=$(shouldPush)"
                          echo "ForcePush=${{ parameters.forcePush }}"
                          echo "isMaster=$(isMaster)"

                - task: AzureCLI@2
                  displayName: Login to ACR
                  inputs:
                      azureSubscription: "mi-devops"
                      scriptType: "bash"
                      scriptLocation: "inlineScript"
                      workingDirectory: "$(build.sourcesDirectory)"
                      inlineScript: az acr login --name acrscandicfrontend

                - task: AzureCLI@2
                  displayName: Build and push to ACR
                  inputs:
                      azureSubscription: "mi-devops"
                      scriptType: "bash"
                      scriptLocation: "inlineScript"
                      workingDirectory: "$(build.sourcesDirectory)"
                      inlineScript: |
                          if [ "$(shouldPush)" != "True" ]; then
                            echo "Not pushing to ACR"
                            noPush="--no-push"
                          else
                            echo "Pushing to ACR"
                            noPush=""
                          fi

                          echo "isMaster: $(isMaster)"

                          if [ "$(isMaster)" == "True" ]; then
                            echo "Building with latest tag"
                            az acr build . --image $(imageName):latest -r acrscandicfrontend $noPush
                          fi

                          echo "Building with $(tag) tag"
                          az acr build . --image $(imageName):$(tag) -r acrscandicfrontend $noPush
