name: Image patch helm chart
author: Bolt
description: 'This action is used when the CI done.'
inputs:
  PAT:
    description: ''
    required: true
    default: ''
  GITHUB_SHA:
    description: ''
    required: true
    default: ''
  PROJECT:
    description: ''
    required: true
    default: ''
  PROJECT_NAME:
    description: ''
    required: true
    default: ''
  ENVIRONMENT:
    description: ''
    required: true
    default: ''
  IS_STAGING:
    description: ''
    required: false
    default: 'enabled'
outputs:
  PR_URL:
    description: ''
    value: ${{ steps.var.outputs.PR_URL }}

runs:
  using: "composite"
  steps:
    - name: gh auth login
      shell: bash
      run: |
        echo ${{ inputs.PAT }} | gh auth login --with-token
    - name: set outputs
      id: set-outputs
      shell: bash
      run: |
        echo "ENVIRONMENT=${{ inputs.ENVIRONMENT }}" >> $GITHUB_OUTPUT
        echo "IS_STAGING=${{ inputs.IS_STAGING }}" >> $GITHUB_OUTPUT
        echo "PROJECT=${{ inputs.PROJECT }}" >> $GITHUB_OUTPUT
        echo "PROJECT_NAME=${{ inputs.PROJECT_NAME }}" >> $GITHUB_OUTPUT
    - name: deploy staging environments klip, drops (helm chart)
      shell: bash
      if: |
        ( steps.set-outputs.outputs.ENVIRONMENT == 'staging' ) && ( steps.set-outputs.outputs.PROJECT_NAME == 'klip' || steps.set-outputs.outputs.PROJECT_NAME == 'klipdrops' ) 
         && ( steps.set-outputs.outputs.IS_STAGING == 'enabled')
      run: |
        echo "deploy staging environments"
        sed -i -r "s|(tag: )[0-9a-f]+(-.*)?|\1${{ inputs.GITHUB_SHA }}\2|" charts/apps/${{ inputs.PROJECT }}/${{ inputs.PROJECT_NAME }}/helm-chart/values/staging/image.yaml

    - name: deploy staging environments klippass, baas, kas, multichain, devops (general) 
      shell: bash
      if: |
        ( steps.set-outputs.outputs.ENVIRONMENT == 'staging' ) && ( steps.set-outputs.outputs.PROJECT_NAME != 'klip' && steps.set-outputs.outputs.PROJECT_NAME != 'klipdrops') 
         && ( steps.set-outputs.outputs.IS_STAGING == 'enabled')
      run: |
        sed -i -r "s|(tag: )[0-9a-f]+(-.*)?|\1${{ inputs.GITHUB_SHA }}\2|" charts/apps/${{ inputs.PROJECT }}/${{ inputs.PROJECT_NAME }}/values/staging/image.yaml

    - name: deploy not staging environments kas, baas, multichain ( dev, qa-2, etc ...)
      shell: bash
      if: |
        ( steps.set-outputs.outputs.ENVIRONMENT != 'staging' ) && ( steps.set-outputs.outputs.PROJECT == 'kas' || steps.set-outputs.outputs.PROJECT == 'baas' ) 
        
      run: |
        if [[ ${{ inputs.ENVIRONMENT }} == "qa" ]]; then
          sed -i -r "s|(tag: )[0-9a-f]+(-.*)?|\1${{ inputs.GITHUB_SHA }}\2|" charts/apps/${{ inputs.PROJECT }}/${{ inputs.PROJECT_NAME }}/values/qa-2/image.yaml
        else
          sed -i -r "s|(tag: )[0-9a-f]+(-.*)?|\1${{ inputs.GITHUB_SHA }}\2|" charts/apps/${{ inputs.PROJECT }}/${{ inputs.PROJECT_NAME }}/values/${{ inputs.ENVIRONMENT }}/image.yaml
        fi
    
    - name: deploy not staging environments klippass, devops (general) (dev, qa, etc ...)
      shell: bash
      if: |
        ( steps.set-outputs.outputs.ENVIRONMENT != 'staging' ) && ( steps.set-outputs.outputs.PROJECT != 'kas' ) && ( steps.set-outputs.outputs.PROJECT != 'baas' ) && ( steps.set-outputs.outputs.PROJECT_NAME != 'klip' )
        && ( steps.set-outputs.outputs.PROJECT_NAME != 'klipdrops' )
        
      run: |
        sed -i -r "s|(tag: )[0-9a-f]+(-.*)?|\1${{ inputs.GITHUB_SHA }}\2|" charts/apps/${{ inputs.PROJECT }}/${{ inputs.PROJECT_NAME }}/values/${{ inputs.ENVIRONMENT }}/image.yaml 

    - name: deploy not staging environments klip, klipdrops (helm chart) (dev, qa, etc ...)
      shell: bash
      if: |
        ( steps.set-outputs.outputs.ENVIRONMENT != 'staging' ) && ( steps.set-outputs.outputs.PROJECT_NAME == 'klip' || steps.set-outputs.outputs.PROJECT_NAME == 'klipdrops' ) 
        
      run: |
        sed -i -r "s|(tag: )[0-9a-f]+(-.*)?|\1${{ inputs.GITHUB_SHA }}\2|" charts/apps/${{ inputs.PROJECT }}/${{ inputs.PROJECT_NAME }}/helm-chart/values/${{ inputs.ENVIRONMENT }}/image.yaml

    - name: git commit and push
      shell: bash
      if: 
        (steps.set-outputs.outputs.ENVIRONMENT != 'staging') || (steps.set-outputs.outputs.ENVIRONMENT == 'staging' && steps.set-outputs.outputs.IS_STAGING == 'enabled')
      run: |
        git add .
        git config --local user.email "github-actions[bot]@users.noreply.github.com"
        git config --local user.name "github-actions[bot]"
        git commit -m "Update ${{ inputs.PROJECT_NAME }} image tag in ${{ inputs.ENVIRONMENT }}."
        git push origin master
        echo "git commit and push done"

    - name: pr to master step klip, klipdrops
      shell: bash
      if: |
        ( steps.set-outputs.outputs.ENVIRONMENT == 'staging' ) 
         && ( steps.set-outputs.outputs.PROJECT_NAME == 'klip' || steps.set-outputs.outputs.PROJECT_NAME == 'klipdrops' ) 
      run: |
        echo "pr to master step"
        suffix=`echo $(date +%Y-%m-%d-%H-%M-%S)`
        git pull origin master
        git checkout -b ${{ inputs.PROJECT_NAME }}-$suffix

        sed -i -r "s|(tag: )[0-9a-f]+(-.*)?|\1${{ inputs.GITHUB_SHA }}\2|" charts/apps/${{ inputs.PROJECT }}/${{ inputs.PROJECT_NAME }}/helm-chart/values/prod/image.yaml
        
        
        git add .
        git config --local user.email "github-actions[bot]@users.noreply.github.com"
        git config --local user.name "github-actions[bot]"
        git commit -m "Update ${{ inputs.PROJECT_NAME }} image tag in Production."
        git push origin ${{ inputs.PROJECT_NAME }}-$suffix

        pr_url=$(gh pr create --base master --title "There is a deployment request for ${{ inputs.PROJECT_NAME }} version ${{ github.head_ref }}." --body "Update image tag to prod" --head ${{ inputs.PROJECT_NAME }}-$suffix)
        echo "PR_URL=$pr_url" >> $GITHUB_OUTPUT
        echo "PR_URL: $pr_url"  
    - name: pr to master step klippass, kas, baas
      id: pr-to-master
      shell: bash
      if: |
        ( steps.set-outputs.outputs.ENVIRONMENT == 'staging' ) 
         && ( steps.set-outputs.outputs.PROJECT_NAME != 'klip' && steps.set-outputs.outputs.PROJECT_NAME != 'klipdrops' )
      run: |
        echo "pr to master step"
        suffix=`echo $(date +%Y-%m-%d-%H-%M-%S)`
        git pull origin master
        git checkout -b ${{ inputs.PROJECT_NAME }}-$suffix

        echo suffix=$suffix >> $GITHUB_OUTPUT

        sed -i -r "s|(tag: )[0-9a-f]+(-.*)?|\1${{ inputs.GITHUB_SHA }}\2|" charts/apps/${{ inputs.PROJECT }}/${{ inputs.PROJECT_NAME }}/values/prod/image.yaml

        git add .
        git config --local user.email "github-actions[bot]@users.noreply.github.com"
        git config --local user.name "github-actions[bot]"
        git commit -m "Update ${{ inputs.PROJECT_NAME }} image tag in Production."
        git push origin ${{ inputs.PROJECT_NAME }}-$suffix

        pr_url=$(gh pr create --base master --title "There is a deployment request for ${{ inputs.PROJECT_NAME }} version ${{ github.head_ref }}." --body "Update image tag to prod" --head ${{ inputs.PROJECT_NAME }}-$suffix)
        echo "PR_URL=$pr_url" >> $GITHUB_OUTPUT
        echo "PR_URL: $pr_url"  
