Repository: sinsky/cloudflare_dns
Pull request #1: Workflow validation
Author: login: sinsky
Created: 2025-03-10T17:12:37Z | Merged: 2025-03-11T15:05:37Z



Diff:
diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..fa0e52a
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,4 @@
+# NOTE: If you want to run it with github actions, you must define a secret.
+TF_VAR_CLOUDFLARE_API_TOKEN=""
+TF_VAR_ZONE_ID_SINSKY_CC=""
+PG_CONN_STR=""
diff --git a/.github/workflows/terraform-validation.yml b/.github/workflows/terraform-validation.yml
new file mode 100644
index 0000000..f4cd808
--- /dev/null
+++ b/.github/workflows/terraform-validation.yml
@@ -0,0 +1,134 @@
+name: Terraform Validation
+
+on:
+  pull_request:
+    paths:
+      - '**/*.tf'
+      - '.terraform-version'
+      - '.github/workflows/terraform-validation.yml'
+
+permissions:
+  pull-requests: write
+
+jobs:
+  validate:
+    name: Validate
+    runs-on: ubuntu-latest
+    env:
+      TF_VAR_cloudflare_api_token: ${{ secrets.TF_VAR_cloudflare_api_token }}
+      TF_VAR_zone_id_sinsky_cc: ${{ secrets.TF_VAR_zone_id_sinsky_cc }}
+      PG_CONN_STR: ${{ secrets.PG_CONN_STR }}
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@v4
+
+      - name: Read .terraform-version
+        id: terraform-version
+        run: echo "version=$(cat .terraform-version)" >> $GITHUB_OUTPUT
+
+      - name: Setup Terraform
+        uses: hashicorp/setup-terraform@v2
+        with:
+          terraform_version: ${{ steps.terraform-version.outputs.version }}
+
+      - name: Terraform fmt
+        id: fmt
+        run: terraform fmt -check
+        continue-on-error: true
+
+      - name: Terraform Init
+        id: init
+        run: terraform init
+
+      - name: Terraform Format Check
+        run: terraform fmt -check -recursive
+
+      - 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
+        id: comment
+        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,
+            }).catch(err => {
+              console.error("Failed to list comments:", err);
+              return { data: [] }; // Return an empty array to avoid further errors
+            })
+            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 }}\`
+            <details><summary>Validation Output</summary>
+
+            \`\`\`\n
+            ${{ steps.validate.outputs.stdout }}
+            \`\`\`
+
+            </details>
+
+            #### Terraform Plan 📖\`${{ steps.plan.outcome }}\`
+
+            <details><summary>Show Plan</summary>
+
+            \`\`\`\n
+            ${process.env.PLAN}
+            \`\`\`
+
+            </details>
+
+            *Pusher: @${{ github.actor }}, Action: \`${{ github.event_name }}\`, 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
+              }).catch(err => {
+                console.error("Failed to update comment:", err);
+              })
+            } else {
+              github.rest.issues.createComment({
+                issue_number: context.issue.number,
+                owner: context.repo.owner,
+                repo: context.repo.repo,
+                body: output
+              }).catch(err => {
+                console.error("Failed to create comment:", err);
+              })
+            }
+
+            // 4. Check if any of the Terraform steps failed and set output
+            const hasErrors = process.env.FMT_OUTCOME === 'failure' ||
+              process.env.INIT_OUTCOME === 'failure' ||
+              process.env.FORMAT_OUTCOME === 'failure' ||
+              process.env.VALIDATE_OUTCOME === 'failure' ||
+              process.env.PLAN_OUTCOME === 'failure';
+
+            return hasErrors;
+
+      - name: Check Terraform Results
+        if: steps.comment.outputs.result == 'true'
+        run: |
+          echo "::error::Terraform validation failed. See the PR comment for details."
+          exit 1
diff --git a/.gitignore b/.gitignore
index c59dcf5..15909b1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,3 +39,5 @@ override.tf.json
 terraform.rc
 
 # End of https://www.toptal.com/developers/gitignore/api/terraform
+
+.env
diff --git a/modules/sinsky.cc/main.tf b/modules/sinsky.cc/main.tf
index b4b1287..ec39b46 100644
--- a/modules/sinsky.cc/main.tf
+++ b/modules/sinsky.cc/main.tf
@@ -8,10 +8,10 @@ terraform {
 }
 
 locals {
-  mail_dns = yamldecode(file("${path.module}/mail_records.yaml"))
+  mail_dns      = yamldecode(file("${path.module}/mail_records.yaml"))
   tailscale_dns = yamldecode(file("${path.module}/tailscale_records.yaml"))
-  tunnel_dns = yamldecode(file("${path.module}/cloudflared_records.yaml"))
-  dns_records = merge(local.mail_dns, local.tailscale_dns, local.tunnel_dns)
+  tunnel_dns    = yamldecode(file("${path.module}/cloudflared_records.yaml"))
+  dns_records   = merge(local.mail_dns, local.tailscale_dns, local.tunnel_dns)
 }
 
 resource "cloudflare_dns_record" "records" {
@@ -20,7 +20,7 @@ resource "cloudflare_dns_record" "records" {
   zone_id  = var.cloudflare_zone_id
   name     = each.value.name
   type     = each.value.type
-  content    = each.value.content
+  content  = each.value.content
   ttl      = lookup(each.value, "ttl", 1) // Default to Auto = 1
   proxied  = lookup(each.value, "proxied", false)
   priority = lookup(each.value, "priority", null)
diff --git a/state.tf b/state.tf
new file mode 100644
index 0000000..637aeee
--- /dev/null
+++ b/state.tf
@@ -0,0 +1,3 @@
+terraform {
+  backend "pg" {}
+}


Reviews:
user: login: gemini-code-assist[bot]
body: Hello @sinsky, I'm Gemini Code Assist[^1]! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

## Summary of Changes
This pull request introduces a new GitHub Actions workflow for Terraform validation. The workflow is triggered on pull requests that modify Terraform files, the Terraform version file, or the workflow file itself. It performs several checks, including formatting, initialization, validation, and planning. The results of these checks are then posted as a comment on the pull request. Additionally, there are minor formatting changes in `modules/sinsky.cc/main.tf` to improve readability.

### Highlights
* **New Workflow**: A new GitHub Actions workflow (`terraform-validation.yml`) is added to automate Terraform validation on pull requests.
* **Terraform Validation**: The workflow includes steps for formatting, initializing, validating, and planning Terraform code.
* **PR Commenting**: The workflow posts a comment on the pull request with the results of the Terraform validation checks.
* **Formatting**: Minor formatting changes in `modules/sinsky.cc/main.tf` for better readability.

### Changelog
* **.github/workflows/terraform-validation.yml**
  * Added a new workflow to validate Terraform code on pull requests.
  * Configured the workflow to trigger on changes to Terraform files, the Terraform version file, or the workflow file itself.
  * Implemented steps for formatting, initializing, validating, and planning Terraform code.
  * Added a step to post a comment on the pull request with the results of the validation checks.
* **modules/sinsky.cc/main.tf**
  * Improved readability by adding spacing around the equals sign in local variable assignments.


<details>

<summary><b>Using Gemini Code Assist</b></summary>
<br>

The full guide for Gemini Code Assist can be found on our [documentation page](https://developers.google.com/gemini-code-assist/docs/review-github-code), here are some quick tips.

<b>Invoking Gemini</b>

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either `/gemini <command>` or `@gemini-code-assist <command>`. Below is a summary of the supported commands.

Feature | Command | Description
--- | --- | ---
Code Review | `/gemini review` | Performs a code review for the current pull request in its current state.
Pull Request Summary | `/gemini summary` | Provides a summary of the current pull request in its current state.
Comment | @gemini-code-assist | Responds in comments when explicitly tagged, both in issue comments and review comments.
Help | `/gemini help` | Displays a list of available commands.

<b>Customization</b>

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a `.gemini/` folder in the base of the repository. Detailed instructions can be found [here](https://developers.google.com/gemini-code-assist/docs/review-github-code).

<b>Limitations & Feedback</b>

Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with :thumbsup: and :thumbsdown: on @gemini-code-assist comments to provide feedback.

</details>

<b>You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the [Gemini Code Assist IDE Extension](https://cloud.google.com/products/gemini/code-assist).</b>


[^1]: Review the [Privacy Notices](https://policies.google.com/privacy), [Generative AI Prohibited Use Policy](https://policies.google.com/terms/generative-ai/use-policy), [Terms of Service](https://policies.google.com/terms), and learn how to configure Gemini Code Assist in GitHub [here](https://developers.google.com/gemini-code-assist/docs/review-github-code). Gemini can make mistakes, so double check it and [use code with caution](https://support.google.com/legal/answer/13505487).

---

**Trivia time!**

What is the purpose of the `terraform fmt` command?

<details>
<summary><b>Click here for the answer</b></summary>
<br>
The `terraform fmt` command is used to automatically format Terraform configuration files to adhere to a consistent style.

</details>

state: COMMENTED
author_association: NONE
submitted_at: 2025-03-10T17:12:45Z
user: login: gemini-code-assist[bot]
body: ## Code Review
This pull request introduces a Terraform validation workflow using GitHub Actions and updates a Terraform module to improve readability. The workflow automates formatting, initialization, validation, and planning of Terraform configurations, providing feedback via pull request comments. The module changes involve minor formatting adjustments for better alignment.

### Summary of Findings
* **GitHub Actions Script Environment Variables**: The GitHub Actions script uses `process.env.PLAN` to access the Terraform plan output. While this works, it's generally better to directly pass the output from the `steps.plan.outputs.stdout` variable within the script's `with` block for better clarity and control.

### Merge Readiness
The changes are well-structured and enhance the Terraform workflow. Addressing the suggestion regarding the environment variable usage in the GitHub Actions script would further improve the code's clarity. I am unable to directly approve the pull request, and other reviewers should review and approve this code before merging.
state: COMMENTED
author_association: NONE
submitted_at: 2025-03-10T17:12:54Z
user: login: gemini-code-assist[bot]
body: ## Code Review
This pull request introduces a Terraform validation workflow using GitHub Actions and updates a Terraform module to improve readability. The workflow automates formatting, initialization, validation, and planning of Terraform configurations, providing feedback via pull request comments. The module changes focus on spacing for better alignment and readability.

### Summary of Findings
* **GitHub Actions Script Logic**: The GitHub Actions script for creating/updating comments could be improved by adding error handling for API calls and ensuring consistent formatting of the output message.
* **Terraform Module Formatting**: The formatting changes in the Terraform module improve readability, but consistency should be maintained throughout the module.

### Merge Readiness
The pull request is almost ready for merging. The Terraform module formatting changes are good. However, I recommend addressing the suggestions regarding the GitHub Actions script to improve its robustness and maintainability before merging. I am unable to directly approve this pull request, and recommend that others review and approve this code before merging.
state: COMMENTED
author_association: NONE
submitted_at: 2025-03-10T17:20:29Z

Review comments:
diff_hunk: @@ -0,0 +1,107 @@
+name: Terraform Validation
+
+on:
+  pull_request:
+    paths:
+      - '**/*.tf'
+      - '.terraform-version'
+      - '.github/workflows/terraform-validation.yml'
+
+permissions:
+  pull-requests: write
+
+jobs:
+  validate:
+    name: Validate
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@v4
+
+      - name: Read .terraform-version
+        id: terraform-version
+        run: echo "version=$(cat .terraform-version)" >> $GITHUB_OUTPUT
+
+      - name: Setup Terraform
+        uses: hashicorp/setup-terraform@v2
+        with:
+          terraform_version: ${{ steps.terraform-version.outputs.version }}
+
+      - name: Terraform fmt
+        id: fmt
+        run: terraform fmt -check
+        continue-on-error: true
+
+      - name: Terraform Init
+        id: init
+        run: terraform init -backend=false
+
+      - name: Terraform Format Check
+        run: terraform fmt -check -recursive
+
+      - 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')
+            })
path: .github/workflows/terraform-validation.yml
user: login: gemini-code-assist[bot]
body: ![medium](https://img.shields.io/badge/priority-medium-yellow)

Consider adding error handling to the `github.rest.issues.listComments` API call. This will help in debugging if the API call fails for any reason. Also, it might be helpful to add a more specific check to ensure that the comment being searched for was created by the workflow itself, perhaps by adding a unique identifier to the comment body.

```
            const { data: comments } = await github.rest.issues.listComments({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.issue.number,
            }).catch(err => {
              console.error("Failed to list comments:", err);
              return { data: [] }; // Return an empty array to avoid further errors
            })
            const botComment = comments.find(comment => {
              return comment.user.type === 'Bot' && comment.body.includes('Terraform Format and Style') && comment.body.includes('unique-id');
            })
```
created_at: 2025-03-10T17:20:29Z
author_association: NONE
diff_hunk: @@ -0,0 +1,107 @@
+name: Terraform Validation
+
+on:
+  pull_request:
+    paths:
+      - '**/*.tf'
+      - '.terraform-version'
+      - '.github/workflows/terraform-validation.yml'
+
+permissions:
+  pull-requests: write
+
+jobs:
+  validate:
+    name: Validate
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@v4
+
+      - name: Read .terraform-version
+        id: terraform-version
+        run: echo "version=$(cat .terraform-version)" >> $GITHUB_OUTPUT
+
+      - name: Setup Terraform
+        uses: hashicorp/setup-terraform@v2
+        with:
+          terraform_version: ${{ steps.terraform-version.outputs.version }}
+
+      - name: Terraform fmt
+        id: fmt
+        run: terraform fmt -check
+        continue-on-error: true
+
+      - name: Terraform Init
+        id: init
+        run: terraform init -backend=false
+
+      - name: Terraform Format Check
+        run: terraform fmt -check -recursive
+
+      - 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 }}\`
+            <details><summary>Validation Output</summary>
+
+            \`\`\`\n
+            ${{ steps.validate.outputs.stdout }}
+            \`\`\`
+
+            </details>
+
+            #### Terraform Plan 📖\`${{ steps.plan.outcome }}\`
+
+            <details><summary>Show Plan</summary>
+
+            \`\`\`\n
+            ${process.env.PLAN}
+            \`\`\`
+
+            </details>
+
+            *Pusher: @${{ github.actor }}, Action: \`${{ github.event_name }}\`, 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
+              })
path: .github/workflows/terraform-validation.yml
user: login: gemini-code-assist[bot]
body: ![medium](https://img.shields.io/badge/priority-medium-yellow)

Consider adding error handling to the `github.rest.issues.updateComment` API call, similar to the `listComments` call. This will ensure that any failures in updating the comment are caught and logged.

```
              github.rest.issues.updateComment({
                owner: context.repo.owner,
                repo: context.repo.repo,
                comment_id: botComment.id,
                body: output
              }).catch(err => {
                console.error("Failed to update comment:", err);
              })
```
created_at: 2025-03-10T17:20:29Z
author_association: NONE
diff_hunk: @@ -0,0 +1,107 @@
+name: Terraform Validation
+
+on:
+  pull_request:
+    paths:
+      - '**/*.tf'
+      - '.terraform-version'
+      - '.github/workflows/terraform-validation.yml'
+
+permissions:
+  pull-requests: write
+
+jobs:
+  validate:
+    name: Validate
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@v4
+
+      - name: Read .terraform-version
+        id: terraform-version
+        run: echo "version=$(cat .terraform-version)" >> $GITHUB_OUTPUT
+
+      - name: Setup Terraform
+        uses: hashicorp/setup-terraform@v2
+        with:
+          terraform_version: ${{ steps.terraform-version.outputs.version }}
+
+      - name: Terraform fmt
+        id: fmt
+        run: terraform fmt -check
+        continue-on-error: true
+
+      - name: Terraform Init
+        id: init
+        run: terraform init -backend=false
+
+      - name: Terraform Format Check
+        run: terraform fmt -check -recursive
+
+      - 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 }}\`
+            <details><summary>Validation Output</summary>
+
+            \`\`\`\n
+            ${{ steps.validate.outputs.stdout }}
+            \`\`\`
+
+            </details>
+
+            #### Terraform Plan 📖\`${{ steps.plan.outcome }}\`
+
+            <details><summary>Show Plan</summary>
+
+            \`\`\`\n
+            ${process.env.PLAN}
+            \`\`\`
+
+            </details>
+
+            *Pusher: @${{ github.actor }}, Action: \`${{ github.event_name }}\`, 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
+              })
path: .github/workflows/terraform-validation.yml
user: login: gemini-code-assist[bot]
body: ![medium](https://img.shields.io/badge/priority-medium-yellow)

Consider adding error handling to the `github.rest.issues.createComment` API call, similar to the `listComments` call. This will ensure that any failures in creating the comment are caught and logged.

```
              github.rest.issues.createComment({
                issue_number: context.issue.number,
                owner: context.repo.owner,
                repo: context.repo.repo,
                body: output
              }).catch(err => {
                console.error("Failed to create comment:", err);
              })
```
created_at: 2025-03-10T17:20:29Z
author_association: NONE

PR comments:
user: login: sinsky
created_at: 2025-03-10T17:20:16Z
body: /gemini review
author_association: OWNER
user: login: github-actions[bot]
created_at: 2025-03-10T17:26:49Z
body: #### Terraform Format and Style 🖌`success`
#### Terraform Initialization ⚙️`success`
#### Terraform Validation 🤖`success`
<details><summary>Validation Output</summary>

```

Success! The configuration is valid.


```

</details>

#### Terraform Plan 📖`success`

<details><summary>Show Plan</summary>

```

terraform
module.domain_sinsky_cc.cloudflare_dns_record.records["mx-2"]: Refreshing state... [id=712be42375238aebdce25908d8227564]
module.domain_sinsky_cc.cloudflare_dns_record.records["dmarc"]: Refreshing state... [id=93453d929a11ae89a21e63dc93158397]
module.domain_sinsky_cc.cloudflare_dns_record.records["note"]: Refreshing state... [id=1a5763da12af90c740b4a1dc0f7aff87]
module.domain_sinsky_cc.cloudflare_dns_record.records["spf"]: Refreshing state... [id=bf486026fb5e01f8eb8f8ce819f37504]
module.domain_sinsky_cc.cloudflare_dns_record.records["gitea"]: Refreshing state... [id=6899327c23c591622169029e291ec650]
module.domain_sinsky_cc.cloudflare_dns_record.records["app"]: Refreshing state... [id=676fd2dfde6505f3bd4906b70108989f]
module.domain_sinsky_cc.cloudflare_dns_record.records["verification"]: Refreshing state... [id=285c9fae4352f28364a9a29b315b8643]
module.domain_sinsky_cc.cloudflare_dns_record.records["wildcard-ts"]: Refreshing state... [id=4af78b426ea80344b6ad2ff426da3e0d]
module.domain_sinsky_cc.cloudflare_dns_record.records["domainkey-1"]: Refreshing state... [id=675ef9a3ba808ef01396a9eaadb4b259]
module.domain_sinsky_cc.cloudflare_dns_record.records["mx-1"]: Refreshing state... [id=d7084fb090fb5723d7a6d6ff295e3473]
module.domain_sinsky_cc.cloudflare_dns_record.records["wildcard-app"]: Refreshing state... [id=93f7b1eaf4ade48a71a142bdacedab04]
module.domain_sinsky_cc.cloudflare_dns_record.records["ts"]: Refreshing state... [id=a64e38562b0375ea25ed8ca5995bd94a]
module.domain_sinsky_cc.cloudflare_dns_record.records["domainkey-3"]: Refreshing state... [id=0e7fd673a08d6fa251e06a1dfc4e729a]
module.domain_sinsky_cc.cloudflare_dns_record.records["domainkey-2"]: Refreshing state... [id=5c6a42e8c32d0789fbbe4d1c18852631]

No changes. Your infrastructure matches the configuration.

Terraform has compared your real infrastructure against your configuration
and found no differences, so no changes are needed.

```

</details>

*Pusher: @sinsky, Action: `pull_request`, Workflow: `Terraform Validation`*
author_association: NONE