trigger:
- master

variables:
  dockerRegistryServiceConnection: 'docker-registry-olympus'
  imageName: 'apollo-fe'  # Replace with your Docker image name
  shortCommitSha: ''  # Initialize variable for short commit SHA
  envName: 'aks-olympus'
  azurecontainerRegistry: 'olympusreg.azurecr.io'
  resourceName: 'olympus'
  VITE_BACKEND_URL: 'http://olympus-api-gateway-aks.olympusai.live/apollo'

stages:
  - stage: Build
    displayName: Build stage
    jobs:
      - job: Build
        displayName: "Build & push to ACR"
        pool:
          name: azureselfhosted
        steps:
        - checkout: self  # Check out the pipeline repository (optional)
        
        # Extract the short commit SHA
        - script: |
            echo "##vso[task.setvariable variable=shortCommitSha]$(echo $(Build.SourceVersion) | cut -c1-8)"
          displayName: 'Set Short Commit SHA'

        - script: |
            echo "Building the first repository..."
            ls -lrth
          displayName: 'list files'
        
        - script: |
            echo "Listing the docker images..."
            docker images
          displayName: 'List docker images'

        - task: Docker@2
          inputs:
            command: build
            repository: '$(imageName)'
            Dockerfile: 'Dockerfile'
            containerRegistry: $(dockerRegistryServiceConnection)
            tags: '$(shortCommitSha)'
            arguments: '--build-arg VITE_BACKEND_URL=$(VITE_BACKEND_URL)'
          displayName: 'Build an image for container registry'
        
        - task: Docker@2
          inputs:
            command: push
            containerRegistry: $(dockerRegistryServiceConnection)
            repository: '$(imageName)'
            tags: '$(shortCommitSha)'
          displayName: 'push an image to container registry'
        
        - script: |
              echo "Listing the docker images..."
              docker images
          displayName: 'List docker images'
          
        - upload: manifests
          artifact: manifests
            
  - stage: Deploy
    displayName: Deploy stage
    dependsOn: Build

    jobs:
      - deployment: Deploy
        condition: succeeded()
        displayName: "Deploy to ${{variables.envName}} environment"
        pool:
          name: azureselfhosted
        environment: 
          name: $(envName).$(resourceName)
          resourceType: Kubernetes 
        strategy:
          runOnce:
            deploy:
              steps:
                - script: |
                    echo "##vso[task.setvariable variable=shortCommitSha]$(echo $(Build.SourceVersion) | cut -c1-8)"
                  displayName: 'Set Short Commit SHA'
                
                - script: |
                    echo "########################################################################"
                    echo "Short Commit SHA: $(shortCommitSha)"
                  displayName: 'Echo short commit SHA'

                - task: KubernetesManifest@0
                  displayName: Deploy to Kubernetes cluster
                  inputs:
                    action: deploy
                    manifests: |
                      $(Pipeline.Workspace)/manifests/apollo-fe-deployment.yaml
                    containers: |
                      $(azurecontainerRegistry)/$(imageName):$(shortCommitSha)

                - script: |
                    echo "Removing Docker images to clean up..."
                    docker rmi $(docker images -q)
                  displayName: 'Clean up Docker Images'
                  continueOnError: true
                  condition: always()