name: "Clear Personal Dev Env Shared Resources"
description: "Clear all resources shared by all services created in dev environment."
author: YochaLyc

inputs:
  PULUMI_ACCESS_TOKEN:
    required: true
    description: "pulumi token [environment variable]"
  PULUMI_CONFIG_PASSPHRASE:
    required: true
    description: "pulumi passphrase [environment variable]"
  AWS_ROLE_ARN:
    required: true
    description: "aws role arn [environment variable]"
  AWS_REGION:
    required: true
    description: "aws region [environment variable]"

  actorGithubID:
    required: false
    default: ""
    description: "Whose resources need to be cleared."
  pulumiDevTrafficDir:
    required: false
    default: cicd-core/deployments/pulumi/dev-traffic-router
  pulumiSharedServiceDir:
    required: false
    default: cicd-core/deployments/pulumi/dev-shared-service
  pulumiClearResourceDir:
    required: false
    default: cicd-core/components/env-dev/dev-clear-resource

runs:
  using: "composite"
  steps:
    - name: install Pulumi-Cli
      uses: pulumi/setup-pulumi@v2

    - uses: actions/setup-node@v2
      with:
        node-version: 16

    - id: string
      uses: ASzc/change-string-case-action@v2
      with:
        string: personal-${{ inputs.actorGithubID }}

    - name: Clear Dev Traffic Router Resources
      working-directory: ${{ inputs.pulumiDevTrafficDir }}
      env:
        PULUMI_STACK_PREFIX: "personal-stack"
        PULUMI_ACCESS_TOKEN: ${{ inputs.PULUMI_ACCESS_TOKEN }}
        PULUMI_CONFIG_PASSPHRASE: ${{ inputs.PULUMI_CONFIG_PASSPHRASE }}
        AWS_ROLE_ARN: ${{ inputs.AWS_ROLE_ARN }}
        AWS_REGION: ${{ inputs.AWS_REGION }}
      run: |
        stack_list=
        if [ -n "${{ inputs.actorGithubID }}" ]; then
          stack_list=`pulumi stack ls | awk '/${{ env.PULUMI_STACK_PREFIX }}-${{ inputs.actorGithubID }}/ {print $1}'`
        else
          stack_list=`pulumi stack ls | awk '/${{ env.PULUMI_STACK_PREFIX }}/ {print $1}'`
        fi
        stack_list=(${stack_list})

        for stack in "${stack_list[@]}"
        do
          pulumi refresh -s ${stack} --non-interactive --yes
          pulumi destroy -s ${stack} --non-interactive --yes
          pulumi stack rm ${stack} --non-interactive --yes
        done
      shell: bash

    - name: Clear Shared Service
      working-directory: ${{ inputs.pulumiSharedServiceDir }}
      env:
        PULUMI_STACK_PREFIX: "personal-stack"
        PULUMI_ACCESS_TOKEN: ${{ inputs.PULUMI_ACCESS_TOKEN }}
        PULUMI_CONFIG_PASSPHRASE: ${{ inputs.PULUMI_CONFIG_PASSPHRASE }}
        AWS_ROLE_ARN: ${{ inputs.AWS_ROLE_ARN }}
        AWS_REGION: ${{ inputs.AWS_REGION }}
      run: |
        stack_list=
        if [ -n "${{ inputs.actorGithubID }}" ]; then
          stack_list=`pulumi stack ls | awk '/${{ env.PULUMI_STACK_PREFIX }}-${{ inputs.actorGithubID }}/ {print $1}'`
        else
          stack_list=`pulumi stack ls | awk '/${{ env.PULUMI_STACK_PREFIX }}/ {print $1}'`
        fi
        stack_list=(${stack_list})

        for stack in "${stack_list[@]}"
        do
          pulumi destroy -s ${stack} --non-interactive --yes
          pulumi stack rm ${stack} --non-interactive --yes
        done
      shell: bash

    - name: Clear Service Level Resources
      working-directory: ${{ inputs.pulumiClearResourceDir }}
      env:
        PULUMI_STACK_PREFIX: "personal-stack"
        PULUMI_ACCESS_TOKEN: ${{ inputs.PULUMI_ACCESS_TOKEN }}
        PULUMI_CONFIG_PASSPHRASE: ${{ inputs.PULUMI_CONFIG_PASSPHRASE }}
        NS_SELECTOR_KEY: ee_env_type
        NS_SELECTOR_VALUE: personal
        AWS_ROLE_ARN: ${{ inputs.AWS_ROLE_ARN }}
        AWS_REGION: ${{ inputs.AWS_REGION }}
      run: |
        if [ -n "${{ inputs.actorGithubID }}" ]; then
          bash destroy_ns_pulumi_project.sh ${{ steps.string.outputs.lowercase }} "${{ env.PULUMI_STACK_PREFIX }}.*" ${{ inputs.actorGithubID }}
        else
          bash destroy_all_pulumi_project.sh ${{ env.NS_SELECTOR_KEY }} ${{ env.NS_SELECTOR_VALUE }} personal-stack
        fi
      shell: bash

    - name: Delete Namespace
      env:
        NS_SELECTOR_KEY: ee_env_type
        NS_SELECTOR_VALUE: personal
        AWS_ROLE_ARN: ${{ inputs.AWS_ROLE_ARN }}
        AWS_REGION: ${{ inputs.AWS_REGION }}
      run: |
        if [ -n "${{ inputs.actorGithubID }}" ]; then
          kubectl delete namespace ${{ steps.string.outputs.lowercase }}
        else
          kubectl delete namespace --selector=${{ env.NS_SELECTOR_KEY }}=${{ env.NS_SELECTOR_VALUE }}
        fi
      shell: bash
