diff --git a/README.md b/README.md index 7c5f8c43..52d9b945 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,93 @@ steps: }) ``` +Instead of creating a new comment each time, you can also update an existing one: + +```yaml +defaults: + run: + working-directory: ${{ env.tf_actions_working_dir }} +steps: +- uses: actions/checkout@v2 +- uses: hashicorp/setup-terraform@v1 + +- name: Terraform fmt + id: fmt + run: terraform fmt -check + continue-on-error: true + +- name: Terraform Init + id: init + run: terraform init + +- name: Terraform Validate + id: validate + run: terraform validate -no-color + +- name: Terraform Plan + id: plan + run: terraform plan -no-color + continue-on-error: true + +- uses: actions/github-script@v6 + if: github.event_name == 'pull_request' + env: + PLAN: "terraform\n${{ steps.plan.outputs.stdout }}" + 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 Format and Style') + }) + + // 2. Prepare format of the comment + const output = `#### Terraform Format and Style 🖌\`${{ steps.fmt.outcome }}\` + #### Terraform Initialization ⚙️\`${{ steps.init.outcome }}\` + #### Terraform Validation 🤖\`${{ steps.validate.outcome }}\` +
Validation Output + + \`\`\`\n + ${{ steps.validate.outputs.stdout }} + \`\`\` + +
+ + #### Terraform Plan 📖\`${{ steps.plan.outcome }}\` + +
Show Plan + + \`\`\`\n + ${process.env.PLAN} + \`\`\` + +
+ + *Pusher: @${{ github.actor }}, Action: \`${{ github.event_name }}\`, Working Directory: \`${{ env.tf_actions_working_dir }}\`, Workflow: \`${{ github.workflow }}\`*`; + + // 3. If we have a comment, update it, otherwise create a new one + if (botComment) { + github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: botComment.id, + body: output + }) + } else { + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: output + }) + } +``` + ## Inputs The action supports the following inputs: @@ -164,7 +251,6 @@ The action supports the following inputs: the `terraform` binary and expose its STDOUT, STDERR, and exit code as outputs named `stdout`, `stderr`, and `exitcode` respectively. Defaults to `true`. - ## Outputs This action does not configure any outputs directly. However, when you set the `terraform_wrapper` input