Skip to content

Commit

Permalink
setup tf workflow (#2)
Browse files Browse the repository at this point in the history
  • Loading branch information
kanaksinghal authored Sep 6, 2023
1 parent 0c80bfd commit f234046
Showing 1 changed file with 166 additions and 0 deletions.
166 changes: 166 additions & 0 deletions .github/workflows/terraform-plan.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
name: 'Terraform Plan'

on:
pull_request:
push:
branches:
- main

env:
TF_CLOUD_ORGANIZATION: "kanak"
TF_API_TOKEN: "${{ secrets.TF_API_TOKEN }}"
TF_WORKSPACE: "demo-go-pgsql-workflow"
CONFIG_DIRECTORY: "./.terrarium-output"
TERRARIUM_REPO: "cldcvr/terrarium"

jobs:
t8-generate:
name: "Terrarium generate"
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:

- name: Checkout
uses: actions/checkout@v3

- name: Checkout Terrarium
uses: actions/checkout@v3
with:
repository: ${{ env.TERRARIUM_REPO }}
ref: shwetanshu/TER-89
token: ${{ secrets.GH_TOKEN }}
path: "./.terrarium-src"

- uses: actions/setup-go@v4
with:
go-version: '^1.20' # The Go version to download (if necessary) and use.
- run: go version

- name: Terrarium Install
run: |
cd ./.terrarium-src/src/cli && go mod edit -replace github.com/cldcvr/terrarium/src/pkg=../pkg && cd -
cd ./.terrarium-src && make install && cd -
- name: Terrarium Generate
run: |
terrarium generate -p .terrarium-src/examples/platform-demo/platform -a . -o .terrarium-output/src
cp -r .terrarium-src/examples/platform-demo/modules ./.terrarium-output/modules
- name: Archive Terrarium generated code
uses: actions/upload-artifact@v3
with:
name: terrarium-generate-code
path: .terrarium-output

tf-plan:
if: github.ref != 'refs/heads/main'
needs: t8-generate
name: "Terraform plan"
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:

- name: Download Terrarium generated code
uses: actions/download-artifact@v3
with:
name: terrarium-generate-code
path: .terrarium-output

- 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@v6
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
});
tf-apply:
if: github.ref == 'refs/heads/main'
needs: t8-generate
name: "Terraform apply"
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Download Terrarium generated code
uses: actions/download-artifact@v3
with:
name: terrarium-generate-code
path: .terrarium-output

- 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 }}

- name: Apply
uses: hashicorp/tfc-workflows-github/actions/[email protected]
if: fromJSON(steps.apply-run.outputs.payload).data.attributes.actions.IsConfirmable
id: apply
with:
run: ${{ steps.apply-run.outputs.run_id }}
comment: "Apply Run from GitHub Actions CI ${{ github.sha }}"

0 comments on commit f234046

Please sign in to comment.