name: Database migration Deployment 
on:
  workflow_dispatch:
  push:
    branches:
      - dev
    paths:
      - ee/scripts/helm/db/init_dbs/**
      - scripts/helm/db/init_dbs/**

# Disable previous workflows for this action.
concurrency: 
  group: ${{ github.workflow }} #-${{ github.ref }}
  cancel-in-progress: false

jobs:
  db-migration:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout
      uses: actions/checkout@v2
      with:
        # We need to diff with old commit 
        # to see which workers got changed.
        fetch-depth: 2

    - name: Checking whether migration is needed for OSS
      id: check-migration
      run: |-
        [[ `git --no-pager diff --name-only HEAD HEAD~1 | grep -E "scripts/helm/db/init_dbs" | grep -vE ^ee/` ]] || echo "::set-output name=skip_migration_oss::true"

    - uses: azure/k8s-set-context@v1
      if: ${{ steps.check-migration.outputs.skip_migration_oss != 'true' }}
      with:
        method: kubeconfig
        kubeconfig: ${{ secrets.OSS_KUBECONFIG }} # Use content of kubeconfig in secret.
      id: setcontext

    - name: Creating old image input
      if: ${{ steps.check-migration.outputs.skip_migration_oss != 'true' }}
      run: |
        set -x
        #
        # Create yaml with existing image tags
        #
        kubectl get pods -n app -o jsonpath="{.items[*].spec.containers[*].image}" |\
        tr -s '[[:space:]]' '\n' | sort | uniq -c | grep '/foss/' | cut -d '/' -f3 > /tmp/image_tag.txt

        echo > /tmp/image_override.yaml

        for line in `cat /tmp/image_tag.txt`;
        do
            image_array=($(echo "$line" | tr ':' '\n'))
            cat <<EOF >> /tmp/image_override.yaml
        ${image_array[0]}:
          image:
            tag: ${image_array[1]}
        EOF
        done

    - uses: ./.github/composite-actions/update-keys
      with:
        domain_name: ${{ secrets.OSS_DOMAIN_NAME }}
        license_key: ${{ secrets.OSS_LICENSE_KEY }}
        jwt_secret: ${{ secrets.OSS_JWT_SECRET }}
        minio_access_key: ${{ secrets.OSS_MINIO_ACCESS_KEY }}
        minio_secret_key: ${{ secrets.OSS_MINIO_SECRET_KEY }}
        pg_password: ${{ secrets.OSS_PG_PASSWORD }}
        registry_url: ${{ secrets.OSS_REGISTRY_URL }}
      name: Update Keys

    - name: Deploy to kubernetes foss
      if: ${{ steps.check-migration.outputs.skip_migration_oss != 'true' }}
      run: |
        cd scripts/helmcharts/

        sed -i "s/domainName: \"\"/domainName: \"${{ secrets.OSS_DOMAIN_NAME }}\"/g" vars.yaml

        cat /tmp/image_override.yaml
        # Deploy command
        helm upgrade --install openreplay -n app openreplay -f vars.yaml -f /tmp/image_override.yaml --atomic --set forceMigration=true --set dbMigrationUpstreamBranch=${IMAGE_TAG}
      env:
        DOCKER_REPO: ${{ secrets.OSS_REGISTRY_URL }}
        IMAGE_TAG: ${{ github.sha }}
        ENVIRONMENT: staging


### Enterprise code deployment 

    - name: cleaning old assets
      run: |
        rm -rf /tmp/image_*
    - uses: azure/k8s-set-context@v1
      with:
        method: kubeconfig
        kubeconfig: ${{ secrets.EE_KUBECONFIG }} # Use content of kubeconfig in secret.
      id: setcontextee

    - name: Creating old image input
      env:
        IMAGE_TAG: ${{ github.sha }}
      run: |
        #
        # Create yaml with existing image tags
        #
        kubectl get pods -n app -o jsonpath="{.items[*].spec.containers[*].image}" |\
        tr -s '[[:space:]]' '\n' | sort | uniq -c | grep '/foss/' | cut -d '/' -f3 > /tmp/image_tag.txt

        echo > /tmp/image_override.yaml

        for line in `cat /tmp/image_tag.txt`;
        do
            image_array=($(echo "$line" | tr ':' '\n'))
            cat <<EOF >> /tmp/image_override.yaml
        ${image_array[0]}:
          image:
            # We've to strip off the -ee, as helm will append it.
            tag: `echo ${image_array[1]} | cut -d '-' -f 1`
        EOF
        done

    - uses: ./.github/composite-actions/update-keys
      with:
        domain_name: ${{ secrets.EE_DOMAIN_NAME }}
        license_key: ${{ secrets.EE_LICENSE_KEY }}
        jwt_secret: ${{ secrets.EE_JWT_SECRET }}
        minio_access_key: ${{ secrets.EE_MINIO_ACCESS_KEY }}
        minio_secret_key: ${{ secrets.EE_MINIO_SECRET_KEY }}
        pg_password: ${{ secrets.EE_PG_PASSWORD }}
        registry_url: ${{ secrets.OSS_REGISTRY_URL }}
      name: Update Keys

    - name: Deploy to kubernetes ee
      run: |
        cd scripts/helmcharts/

        cat /tmp/image_override.yaml
        # Deploy command
        helm upgrade --install openreplay -n app openreplay -f vars.yaml -f /tmp/image_override.yaml --atomic --set forceMigration=true --set dbMigrationUpstreamBranch=${IMAGE_TAG}
      env:
        DOCKER_REPO: ${{ secrets.EE_REGISTRY_URL }}
        # We're not passing -ee flag, because helm will add that.
        IMAGE_TAG: ${{ github.sha }}
        ENVIRONMENT: staging

   # - name: Debug Job
   #   # if: ${{ failure() }}
   #   uses: mxschmitt/action-tmate@v3
   #   env:
   #     DOCKER_REPO: ${{ secrets.EE_REGISTRY_URL }}
   #     IMAGE_TAG: ${{ github.sha }}-ee
   #     ENVIRONMENT: staging
   #    with:
   #      limit-access-to-actor: true

