MARKDOWN 34
Infra Guest on 1st December 2023 09:27:32 AM

name: DEPLOY | Terraform

TODO: Add module docs generation after apply

BUG: If applying two environments at once, the plan and apply outputs are mixed together in the PR comment.

TODO: Stop triggering if no TF files are changed.

on: workflow_dispatch: pull_request: branches:

  • main types:
  • closed

env: GOOGLE_PROJECT: ${{ vars.GOOGLE_PROJECT }} GOOGLE_REGION: ${{ vars.GOOGLE_REGION }} GOOGLE_ZONE: ${{ vars.GOOGLE_ZONE }} GITHUB_TOKEN: ${{ secrets.TF_VAR_GITHUB_TOKEN }} GITHUB_OWNER: ${{ secrets.TF_VAR_GITHUB_OWNER }}

jobs: ######################################################################

INFORM: Inform on PR that plan/apply is Running.

###################################################################### inform_about_apply: name: Inform About Apply runs-on: self-hosted

steps:
  - name: Inform on PR that Apply is Running
    uses: mshick/add-pr-comment@v2
    with:
      repo-token: ${{ secrets.GITHUB_TOKEN }}
      repo-token-user-login: "github-actions[bot]"
      message: |
        ***Running terraform apply***
        Results will display here in a few minutes...

######################################################################

DEPLOY: Perform plan and apply and inform in PR.

###################################################################### deploy: name: Build environment: ${{ matrix.path }} env: TF_VAR_debug_mode: false

runs-on: self-hosted
strategy:
  fail-fast: false
  matrix:
    path:
      - dev-01
      - dev-01-k8s
      - iam
      - mgmt-01
      - prod-01
      - prod-01-k8s

steps:
  - name: Setup | Repository
    uses: actions/checkout@v3

  - name: Setup | Terraform
    uses: hashicorp/setup-terraform@v2
    with:
      terraform_version: 1.6.2

  - name: Setup | Secrets
    uses: oNaiPs/secrets-to-env-action@v1
    with:
      secrets: ${{ toJSON(secrets) }}
      include: GOOGLE_CREDENTIALS, TF_VAR_INFRACOST_API_KEY, TF_VAR_GITHUB_OWNER, TF_VAR_GITHUB_RUNNER_TOKEN, TF_VAR_GITHUB_TOKEN, TF_VAR_GITHUB_FLUX_TOKEN

  - name: Setup | Helpers
    id: helpers
    run: |
      echo "DATE_NOW=$(date -u +'%T | %m.%d.%Y UTC')" >> "$GITHUB_OUTPUT"

  - name: Initialize Terraform
    run: |
      cd environments/${{ matrix.path }}
      terraform init -input=false

  - name: Terraform | Plan
    id: plan
    continue-on-error: true
    run: |
      cd environments/${{ matrix.path }}
      terraform plan -input=false -no-color -out=tfplan \
      && terraform show -no-color tfplan

  - name: Reformat | Plan
    if: steps.plan.outcome == 'success'
    run: |
      echo '${{ steps.plan.outputs.stdout || steps.plan.outputs.stderr }}' \
      | sed -E 's/^([[:space:]]+)([-+])/\2\1/g' > plan.txt

  - name: Terraform | Plan to ENV
    if: steps.plan.outcome == 'success'
    run: |
      PLAN=$(cat plan.txt)
      echo "PLAN<<EOF" >> $GITHUB_ENV
      echo "$PLAN" >> $GITHUB_ENV
      echo "EOF" >> $GITHUB_ENV

  - name: Terraform | Apply
    if: steps.plan.outcome == 'success'
    id: apply
    continue-on-error: true
    run: |
      cd environments/${{ matrix.path }}
      terraform apply \
        -input=false \
        -no-color \
        tfplan

  - name: Terraform | Comment Plan/Apply
    if: steps.plan.outcome == 'success' && steps.apply.outcome == 'success'
    uses: mshick/add-pr-comment@v2
    with:
      repo-token: ${{ secrets.GITHUB_TOKEN }}
      message-id: pr-comment-${{ matrix.path }}
      message: |
        ## Terraform Apply ✅: **${{ matrix.path }}**
        Generated at: ${{ steps.helpers.outputs.DATE_NOW }}

        ```diff
        ${{ env.PLAN }}
        ```

        ```
        ${{ steps.apply.outputs.stdout }}
        ```

  - name: Terraform | Comment Plan Failure
    if: steps.plan.outcome == 'failure'
    uses: mshick/add-pr-comment@v2
    with:
      repo-token: ${{ secrets.GITHUB_TOKEN }}
      message-id: pr-comment-${{ matrix.path }}
      message: |
        ## Terraform Plan Failed ❌: **${{ matrix.path }}**
        Generated at: ${{ steps.helpers.outputs.DATE_NOW }}

        ```
        ${{ steps.plan.outputs.stderr }}
        ```

  - name: Terraform | Comment Apply Failure
    if: steps.apply.outcome == 'failure'
    uses: mshick/add-pr-comment@v2
    with:
      repo-token: ${{ secrets.GITHUB_TOKEN }}
      message-id: pr-comment-${{ matrix.path }}
      message: |
        ## Terraform Apply Failed ❌: **${{ matrix.path }}**
        Generated at: ${{ steps.helpers.outputs.DATE_NOW }}

        ```
        ${{ steps.apply.outputs.stderr }}
        ```

RSO cPaste е място за публикуване на код или текст за по-лесно отстраняване на грешки.

Влез или се Регистрай за да редактираш, изтриваш или преглеждаш хронология на твоето публикувано съдържание

Необработен текст

Влез или се Регистрирай за да редактираш или задържиш това съдържание.