From 3dffdc5f39fbc69e1f3bf497292497eb8b5c5922 Mon Sep 17 00:00:00 2001 From: Vitor Hideyoshi Date: Sat, 23 Sep 2023 00:49:39 -0300 Subject: [PATCH 1/3] Adds Github Actions for CI/CD --- .github/workflows/terraform.yml | 56 +++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 .github/workflows/terraform.yml diff --git a/.github/workflows/terraform.yml b/.github/workflows/terraform.yml new file mode 100644 index 0000000..95e1fd8 --- /dev/null +++ b/.github/workflows/terraform.yml @@ -0,0 +1,56 @@ +name: 'Terraform' + +on: + push: + branches: [ "staging", "main" ] + pull_request: + +permissions: + contents: read + +jobs: + terraform: + name: 'Terraform - Staging' + runs-on: ubuntu-latest + + # Use the Bash shell regardless whether the GitHub Actions runner is ubuntu-latest, macos-latest, or windows-latest + defaults: + run: + shell: bash + + 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 + with: + cli_config_credentials_token: ${{ secrets.TF_API_TOKEN }} + + # 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 + + # Checks that all Terraform configuration files adhere to a canonical format + - name: Terraform Format + run: terraform fmt -check + + - name: Terraform Set Workspace - Staging + if: github.ref == 'refs/heads/"staging"' + run: terraform workspace select staging + + - name: Terraform Set Workspace - Prod + if: github.ref == 'refs/heads/"main"' + run: terraform workspace select prod + + # Generates an execution plan for Terraform + - name: Terraform Plan + run: terraform plan -input=false + + # On push to "main", build or change infrastructure according to Terraform configuration files + # Note: It is recommended to set up a required "strict" status check in your repository for "Terraform Cloud". See the documentation on "strict" required status checks for more information: https://help.github.com/en/github/administering-a-repository/types-of-required-status-checks + - name: Terraform Apply + if: github.event_name == 'push' + run: terraform apply -auto-approve -input=false \ No newline at end of file From 113fc46bfef0a480f9ff7abb61d4f2a9c7bcd075 Mon Sep 17 00:00:00 2001 From: Vitor Hideyoshi Date: Sat, 23 Sep 2023 01:03:50 -0300 Subject: [PATCH 2/3] Fixes Workspace Selection --- .github/workflows/terraform.yml | 17 ++++------------- .gitignore | 3 ++- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/.github/workflows/terraform.yml b/.github/workflows/terraform.yml index 95e1fd8..2979033 100644 --- a/.github/workflows/terraform.yml +++ b/.github/workflows/terraform.yml @@ -12,6 +12,9 @@ jobs: terraform: name: 'Terraform - Staging' runs-on: ubuntu-latest + if: github.ref == 'refs/heads/staging' + env: + TF_WORKSPACE: ${{github.ref == 'refs/heads/\"main\"' && 'prod' || 'staging'}} # Use the Bash shell regardless whether the GitHub Actions runner is ubuntu-latest, macos-latest, or windows-latest defaults: @@ -27,24 +30,12 @@ jobs: - name: Setup Terraform uses: hashicorp/setup-terraform@v1 with: - cli_config_credentials_token: ${{ secrets.TF_API_TOKEN }} + cli_config_credentials_token: ${{ secrets.TF_API_TOKEN }} # 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 - # Checks that all Terraform configuration files adhere to a canonical format - - name: Terraform Format - run: terraform fmt -check - - - name: Terraform Set Workspace - Staging - if: github.ref == 'refs/heads/"staging"' - run: terraform workspace select staging - - - name: Terraform Set Workspace - Prod - if: github.ref == 'refs/heads/"main"' - run: terraform workspace select prod - # Generates an execution plan for Terraform - name: Terraform Plan run: terraform plan -input=false diff --git a/.gitignore b/.gitignore index 74fdb4a..9e088eb 100644 --- a/.gitignore +++ b/.gitignore @@ -33,4 +33,5 @@ override.tf.json # Ignore CLI configuration files .terraformrc -terraform.rc \ No newline at end of file +terraform.rc +.secrets From 3b5914e76a993713f3480ca6e25979cb6debb96e Mon Sep 17 00:00:00 2001 From: Vitor Hideyoshi Date: Sat, 23 Sep 2023 01:41:54 -0300 Subject: [PATCH 3/3] Deletes Staging Env After --- .github/workflows/delete-staging.yml | 44 ++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 .github/workflows/delete-staging.yml diff --git a/.github/workflows/delete-staging.yml b/.github/workflows/delete-staging.yml new file mode 100644 index 0000000..8ccefcd --- /dev/null +++ b/.github/workflows/delete-staging.yml @@ -0,0 +1,44 @@ +name: Deletes Staging Environment After Testing Period + +on: + push: + branches: ["staging"] + +jobs: + delete: + name: Deletes Staging Environment After Testing Period + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/staging' + env: + TF_WORKSPACE: ${{github.ref == 'refs/heads/\"main\"' && 'prod' || 'staging'}} + + steps: + - name: Sleep for 1800 minutes + run: sleep 60s + shell: bash + + # 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 + with: + cli_config_credentials_token: ${{ secrets.TF_API_TOKEN }} + + # 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 + + # Generates an execution plan for Terraform + - name: Terraform Plan + run: terraform plan -input=false -destroy + + # On push to "main", build or change infrastructure according to Terraform configuration files + # Note: It is recommended to set up a required "strict" status check in your repository for "Terraform Cloud". See the documentation on "strict" required status checks for more information: https://help.github.com/en/github/administering-a-repository/types-of-required-status-checks + - name: Terraform Apply + if: github.event_name == 'push' + run: terraform apply -auto-approve -input=false -destroy + + \ No newline at end of file