name: One Click Deploy for All SWG Resources

run-name: ${{ inputs.EXECUTION_MODE }} all swg resources on ${{ inputs.ENV_NAME }}

permissions:
  id-token: write
  contents: read
  issues: write

on:
  ### Manual deploy section with workflow_dispatch
  workflow_dispatch:
    inputs:
      ENV_NAME:
        description: Environment to deploy
        type: choice
        required: true
        default: palpatine
        options:
        - ahsoka
        - anakin
        - solo
        - vader
        - boba
        - jabba
        - rey
        - r2d2
        - palpatine
        - bb8
        - c3po
        - staging
        - production
        - production-eu
      BUILD_FROM_SCRATCH:
        type: boolean
        description: Build lambdas from branch
        default: false
      EXECUTION_MODE:
        description: Do you want to apply or destroy?
        type: choice
        default: apply
        required: true
        options:
        - apply
        - plan

env:
  ENV_NAME: ${{ inputs.ENV_NAME }}
  AWS_REGION: 'us-east-1'
  AWS_SECRET_REGION: 'eu-west-2'
  EXECUTION_MODE: ${{ inputs.EXECUTION_MODE }}
  BUILD_FROM_SCRATCH: ${{ inputs.BUILD_FROM_SCRATCH }}
  ENV_FILE_VERSION: ''
  BUILD_NUMBER: ${{ github.run_number }}
  LAMBDA_ROOT_PATH: src
  NEXUS_USER: svc.nexus@perimeter81.com
  NODE_VERSION: 20
  COMMAND_ARGS: '--terragrunt-disable-bucket-update'

jobs:
  preparation_deploy:
    strategy:
      fail-fast: false
      matrix:
        service_name: 
          [
            'common/network',
            'common/api-gw',
            'swg-sqs-fetch-profile',
            'swg-sqs-compute-profile'
          ]
    runs-on: ubuntu-latest
    environment: ${{ inputs.ENV_NAME }}
    steps:
    - name: Deploy
      uses: perimeter-81/actions/actions/terragrunt/deploy_resource_v2@P81-54427-Setup-Private-API-Gatway-Based-on-Open-API
      with:
        ENV_NAME: ${{ inputs.ENV_NAME }}
        WORK_DIR: infra/${{ matrix.service_name }}
        EXECUTION_MODE: ${{ inputs.EXECUTION_MODE }}
        SAVE_PLAN: false
        TG_VERSION: ''
        TF_VERSION: ''
        COMMAND_ARGS: ${{ env.COMMAND_ARGS }}
        ADMIN_ROLE: 'false'
      env:
        NEED_PROD_ACCESS: ${{ contains('common/api-gw', matrix.service_name) && 'true' || 'false' }}

  subscription_deploy:
    needs: [preparation_deploy]
    strategy:
      fail-fast: false
      matrix:
        service_name:
          [
            'swg-sqs-fetch-profile',
            'swg-sqs-compute-profile'
          ]
    runs-on: ubuntu-latest
    environment: ${{ inputs.ENV_NAME }}
    steps:
    - name: Deploy
      uses: perimeter-81/actions/actions/terragrunt/deploy_resource_v2@main
      with:
        ENV_NAME: ${{ inputs.ENV_NAME }}
        WORK_DIR: infra/subscriptions
        EXECUTION_MODE: ${{ inputs.EXECUTION_MODE }}
        SAVE_PLAN: false
        TG_VERSION: ''
        TF_VERSION: ''
        COMMAND_ARGS: ${{ env.COMMAND_ARGS }}
        ADMIN_ROLE: 'false'

  lambda_deploy:
    needs: [preparation_deploy]
    strategy:
      fail-fast: false
      matrix:
        service_name:
          [
            'swg-lambda-fetch-profile',
            'swg-lambda-compute-profile'
          ]
    runs-on: ${{ contains('swg-lambda-fetch-profile,swg-lambda-compute-profile', matrix.service_name) && 'prod-action-runner' || 'ubuntu-22.04' }}
    environment: ${{ inputs.ENV_NAME }}
    steps:
    - name: Deploy the lambda infra
      uses: perimeter-81/actions/actions/terragrunt/deploy_resource_v2@main
      with:
        ENV_NAME: ${{ inputs.ENV_NAME }}
        WORK_DIR: infra/swg-sqs-fetch-profile
        EXECUTION_MODE: ${{ inputs.EXECUTION_MODE }}
        SAVE_PLAN: false
        TG_VERSION: ''
        TF_VERSION: ''
        COMMAND_ARGS: ${{ env.COMMAND_ARGS }}
        ADMIN_ROLE: 'false'

  api_gw_private_rest_deploy:
    needs: [preparation_deploy]
    runs-on: ubuntu-latest
    environment: ${{ inputs.ENV_NAME }}
    steps:
    - name: Deploy
      uses: perimeter-81/actions/actions/terragrunt/deploy_resource_v2@main
      with:
        ENV_NAME: ${{ inputs.ENV_NAME }}
        WORK_DIR: infra/swg-apigw-rest
        EXECUTION_MODE: ${{ inputs.EXECUTION_MODE }}
        SAVE_PLAN: false
        TG_VERSION: ''
        TF_VERSION: ''
        COMMAND_ARGS: ${{ env.COMMAND_ARGS }}
        ADMIN_ROLE: 'false'

  build_packages_and_update_code:
    if: ${{ inputs.BUILD_FROM_SCRATCH && inputs.EXECUTION_MODE == 'apply'}}
    needs: [lambda_deploy]
    strategy:
      fail-fast: false
      matrix:
        service_name:
          [
            'swg-lambda-fetch-profile',
            'swg-lambda-compute-profile'
          ]
    runs-on: ubuntu-22.04
    environment: ${{ inputs.ENV_NAME }}
    steps:
    - name: build and trigger deploy
      uses: perimeter-81/actions/actions/lambdas/build_and_trigger_deploy@main
      env:
        LAMBDA_NAME: ${{ matrix.service_name }}
