Skip to content

ci: configure tfvars file #10

ci: configure tfvars file

ci: configure tfvars file #10

Workflow file for this run

name: 'Terraform build'
on:
push:
pull_request:
env:
TF_CLOUD_ORGANIZATION: "${{ vars.BMB_TF_ORGANIZATION }}"
TF_API_TOKEN: "${{ secrets.TF_API_TOKEN }}"
TF_WORKSPACE: "${{ vars.TF_WORKSPACE }}"
CONFIG_DIRECTORY: "./"
ENVIRONMENT: dev
permissions:
contents: read
jobs:
test:
name: 'Test'
runs-on: ubuntu-latest
environment: dev
defaults:
run:
shell: bash
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Terraform
uses: hashicorp/setup-terraform@v3
with:
cli_config_credentials_token: ${{ secrets.TF_API_TOKEN }}
- name: Terraform Init
run: terraform init -upgrade
- name: Terraform Test
if: github.event_name == 'push'
run: terraform test
sonarcloud:
needs: [test]
if: github.event_name == 'pull_request' || github.ref == 'refs/heads/main'
name: SonarCloud
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
- name: SonarCloud Scan
uses: SonarSource/sonarcloud-github-action@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
plan:
needs: [test]
if: github.event_name == 'pull_request'
name: "Terraform Plan"
runs-on: ubuntu-latest"
environment: "$ENVIRONMENT"
permissions:
contents: read
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Create .auto.tfvars file
run: |
cat <<EOF > eks.auto.tfvars
vpc_name = "${{ secrets.BMB_EKS_CLUSTER_VPC }}"
cluster_name = "${{ vars.BMB_MYSQL_CLUSTER }}"
database_name = "${{ vars.BMB_MYSQL_DATABASE }}"
username = "${{ secrets.BMB_MYSQL_USER }}"
password = "${{ secrets.BMB_MYSQL_PASSWORD }}"
environment = "${{ env.ENVIRONMENT }}"
EOF
- name: Upload Configuration
uses: hashicorp/tfc-workflows-github/actions/[email protected]
id: plan-upload
with:
workspace: ${{ env.TF_WORKSPACE }}
directory: ${{ env.CONFIG_DIRECTORY }}
speculative: true
- name: Create Plan Run
uses: hashicorp/tfc-workflows-github/actions/[email protected]
id: plan-run
with:
workspace: ${{ env.TF_WORKSPACE }}
configuration_version: ${{ steps.plan-upload.outputs.configuration_version_id }}
plan_only: true
- name: Get Plan Output
uses: hashicorp/tfc-workflows-github/actions/[email protected]
id: plan-output
with:
plan: ${{ fromJSON(steps.plan-run.outputs.payload).data.relationships.plan.data.id }}
- name: Update PR
uses: actions/github-script@v7
id: plan-comment
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
// 1. Retrieve existing bot comments for the PR
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});
const botComment = comments.find(comment => {
return comment.user.type === 'Bot' && comment.body.includes('Terraform Cloud Plan Output')
});
const output = `#### Terraform Cloud Plan Output
\`\`\`
Plan: ${{ steps.plan-output.outputs.add }} to add, ${{ steps.plan-output.outputs.change }} to change, ${{ steps.plan-output.outputs.destroy }} to destroy.
\`\`\`
[Terraform Cloud Plan](${{ steps.plan-run.outputs.run_link }})
`;
// 3. Delete previous comment so PR timeline makes sense
if (botComment) {
github.rest.issues.deleteComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
});
}
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: output
});
deploy:
needs: [test]
if: github.ref == 'refs/heads/main'
name: "Terraform Apply"
runs-on: ubuntu-latest
environment: "$ENVIRONMENT"
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Create .auto.tfvars file
run: |
cat <<EOF > eks.auto.tfvars
vpc_name = "${{ secrets.BMB_EKS_CLUSTER_VPC }}"
cluster_name = "${{ vars.BMB_MYSQL_CLUSTER }}"
database_name = "${{ vars.BMB_MYSQL_DATABASE }}"
username = "${{ secrets.BMB_MYSQL_USER }}"
password = "${{ secrets.BMB_MYSQL_PASSWORD }}"
environment = "$ENVIRONMENT"
EOF
- name: Upload Configuration
uses: hashicorp/tfc-workflows-github/actions/[email protected]
id: apply-upload
with:
workspace: ${{ env.TF_WORKSPACE }}
directory: ${{ env.CONFIG_DIRECTORY }}
- name: Create Apply Run
uses: hashicorp/tfc-workflows-github/actions/[email protected]
id: apply-run
with:
workspace: ${{ env.TF_WORKSPACE }}
configuration_version: ${{ steps.apply-upload.outputs.configuration_version_id }}
message: "Create Run from GitHub Actions CI ${{ github.sha }}"