# This workflow installs the latest version of Terraform CLI and configures the Terraform CLI configuration file
# with an API token for Terraform Cloud (app.terraform.io). On pull request events, this workflow will run
# `terraform init`, `terraform fmt`, and `terraform plan` (speculative plan via Terraform Cloud). On push events
# to the "main" branch, `terraform apply` will be executed.
#
# Documentation for `hashicorp/setup-terraform` is located here: https://github.com/hashicorp/setup-terraform
#
# To use this workflow, you will need to complete the following setup steps.
#
# 1. Create a `main.tf` file in the root of this repository with the `remote` backend and one or more resources defined.
#   Example `main.tf`:
#     # The configuration for the `remote` backend.
#     terraform {
#       backend "remote" {
#         # The name of your Terraform Cloud organization.
#         organization = "example-organization"
#
#         # The name of the Terraform Cloud workspace to store Terraform state files in.
#         workspaces {
#           name = "example-workspace"
#         }
#       }
#     }
#
#     # An example resource that does nothing.
#     resource "null_resource" "example" {
#       triggers = {
#         value = "A example resource that does nothing!"
#       }
#     }
#
#
# 2. Generate a Terraform Cloud user API token and store it as a GitHub secret (e.g. TF_API_TOKEN) on this repository.
#   Documentation:
#     - https://www.terraform.io/docs/cloud/users-teams-organizations/api-tokens.html
#     - https://help.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets
#
# 3. Reference the GitHub secret in step using the `hashicorp/setup-terraform` GitHub Action.
#   Example:
#     - name: Setup Terraform
#       uses: hashicorp/setup-terraform@v1
#       with:
#         cli_config_credentials_token: ${{ secrets.TF_API_TOKEN }}

name: 'IaC - Deployment'
# this is triggered when there is a pull request on the below path, where the PR type is opened or reopened
on: workflow_dispatch
#on:
#  push:
#    branches:
#      - main
#    paths:
#      - 'iac/terraform/**'


#permissions:
#  contents: read

defaults:
  run:
    shell: bash
    working-directory: ./iac/terraform
env:
      ARM_CLIENT_ID: ${{ secrets.ARM_CLIENT_ID }} 
      ARM_CLIENT_SECRET: ${{secrets.ARM_CLIENT_SECRET}}
      ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }}
      ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }}

jobs:
  Terraform-Plan:
    name: 'Plan_Job'
    runs-on: ubuntu-latest
    steps:
    # Checkout the repository to the GitHub Actions runner
    - name: Checkout
      uses: actions/checkout@v3
    # Install the latest version of Terraform CLI and configure the Terraform CLI configuration file with a Terraform Cloud user API token
    - name: Setup Terraform
      uses: hashicorp/setup-terraform@v1
    # Initialize a new or existing Terraform working directory by creating initial files, loading any remote state, downloading modules, etc.
    - name: Terraform Init
      run: terraform init -lock=false -backend-config=storage_account_name="${{secrets.TFSTATE_STORAGE_ACCOUNT_NAME}}" -backend-config=container_name="${{secrets.TFSTATE_STORAGE_CONTAINER_NAME}}" -backend-config=key="${{secrets.TFSTATE_KEY}}" -backend-config=resource_group_name="${{secrets.TFSTATE_RESOURCES_GROUP_NAME}}"
    - name: Terraform Plan
      run: terraform plan -lock=false -var="location=${{secrets.LOCATION}}"
  Terraform-Apply:
    name: 'Deploy_Job'
    runs-on: ubuntu-latest
    needs: Terraform-Plan
    environment: production
    steps:
    # Checkout the repository to the GitHub Actions runner
    - name: Checkout
      uses: actions/checkout@v3
    # Install the latest version of Terraform CLI and configure the Terraform CLI configuration file with a Terraform Cloud user API token
    - name: Setup Terraform
      uses: hashicorp/setup-terraform@v1
    # Initialize a new or existing Terraform working directory by creating initial files, loading any remote state, downloading modules, etc.
    - name: Terraform Init
      run: terraform init -lock=false -backend-config=storage_account_name="${{secrets.TFSTATE_STORAGE_ACCOUNT_NAME}}" -backend-config=container_name="${{secrets.TFSTATE_STORAGE_CONTAINER_NAME}}" -backend-config=key="${{secrets.TFSTATE_KEY}}" -backend-config=resource_group_name="${{secrets.TFSTATE_RESOURCES_GROUP_NAME}}"
    - uses: azure/login@v1
      with:
        creds: ${{ secrets.AZURE_CREDENTIALS }}
    - name: Terraform Apply
      run: terraform apply --auto-approve -var="location=${{secrets.LOCATION}}"

   
   
   
   
  

