alz/github/actions/terraform/templates/workflows/ci-template.yaml (102 lines of code) (raw):
---
name: Continuous Integration
on:
workflow_call:
inputs:
root_module_folder_relative_path:
description: 'Root Module Folder Relative Path'
default: '.'
type: string
terraform_cli_version:
description: 'Terraform CLI Version'
default: 'latest'
type: string
jobs:
validate:
name: Validate Terraform
runs-on:
${runner_name}
environment: ${environment_name_plan}
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Install Terraform
uses: hashicorp/setup-terraform@v3
with:
terraform_wrapper: false
terraform_version: $${{ inputs.terraform_cli_versions }}
- name: Terraform Format Check
run: |
terraform \
-chdir="$${{inputs.root_module_folder_relative_path}}" \
fmt \
-check
- name: Terraform Init
run: |
terraform \
-chdir="$${{inputs.root_module_folder_relative_path}}" \
init \
-backend=false
- name: Terraform Validate
run: |
terraform \
-chdir="$${{inputs.root_module_folder_relative_path}}" \
validate
plan:
name: Validate Terraform Plan
needs: validate
runs-on:
${runner_name}
concurrency: ${backend_azure_storage_account_container_name}
environment: ${environment_name_plan}
permissions:
# NOTE: When modifying the token subject claims and adding `environment`.
# If the `id-token` permission is granted at the workflow level
# and the workflow has at least one job that does not specify an environment
# then the action will fail with an internal error.
id-token: write
contents: read
pull-requests: write
env:
ARM_CLIENT_ID: "$${{ vars.AZURE_CLIENT_ID }}"
ARM_SUBSCRIPTION_ID: "$${{ vars.AZURE_SUBSCRIPTION_ID }}"
ARM_TENANT_ID: "$${{ vars.AZURE_TENANT_ID }}"
ARM_USE_AZUREAD: true
ARM_USE_OIDC: true
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Install Terraform
uses: hashicorp/setup-terraform@v3
with:
terraform_wrapper: false
terraform_version: $${{ inputs.terraform_cli_versions }}
- name: Terraform Init
run: |
terraform \
-chdir="$${{inputs.root_module_folder_relative_path}}" \
init \
-backend-config="resource_group_name=$${{vars.BACKEND_AZURE_RESOURCE_GROUP_NAME}}" \
-backend-config="storage_account_name=$${{vars.BACKEND_AZURE_STORAGE_ACCOUNT_NAME}}" \
-backend-config="container_name=$${{vars.BACKEND_AZURE_STORAGE_ACCOUNT_CONTAINER_NAME}}" \
-backend-config="key=terraform.tfstate"
- name: Terraform Plan
id: plan
run: |
terraform \
-chdir="$${{inputs.root_module_folder_relative_path}}" \
plan \
-input=false
- name: Update Pull Request
if: (success() || failure()) && github.event_name == 'pull_request'
uses: actions/github-script@v6
with:
github-token: $${{ secrets.GITHUB_TOKEN }}
script: |
const output = `#### Terraform Plan 📖\`$${{ steps.plan.outcome }}\`
<details><summary>Run details</summary>
The plan was a $${{ steps.plan.outcome }} see the action for more details.
</details>
*Pushed by: @$${{ github.actor }}, Action: \`$${{ github.event_name }}\`*`;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: output
})