Skip to content

docs: plan-file download and tflint workflow examples #299

docs: plan-file download and tflint workflow examples

docs: plan-file download and tflint workflow examples #299

Workflow file for this run

---
name: TF Tests
on:
pull_request:
paths: [.github/workflows/tf_tests.yaml, action.yml, tests/**]
types: [opened, reopened, synchronize, closed]
jobs:
tests:
runs-on: ubuntu-24.04
permissions:
actions: read # Required to download repository artifact.
checks: write # Required to add status summary.
contents: read # Required to checkout repository.
pull-requests: write # Required to add PR comment and label.
strategy:
fail-fast: false
matrix:
test:
- pass_one
# - pass_character_limit
# - fail_data_source_error
# - fail_format_diff
# - fail_invalid_resource_type
steps:
- name: Echo context
env:
GH_JSON: ${{ toJson(github) }}
run: echo "$GH_JSON"
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Setup TF
uses: opentofu/setup-opentofu@12f4debbf681675350b6cd1f0ff8ecfbda62027b # v1.0.4
with:
tofu_version: 1.8.5
tofu_wrapper: false
- name: Provision TF
id: tf
continue-on-error: true
uses: ./
with:
command: init # ${{ github.event.pull_request.merged && 'apply' || 'plan' }}
arg-lock: false # ${{ github.event.pull_request.merged }}
working-directory: tests/${{ matrix.test }}
tool: tofu
# format: true
# validate: true
- name: Echo TF
run: |
echo "check-id: ${{ steps.tf.outputs.check-id }}"
echo "command: ${{ steps.tf.outputs.command }}"
echo "comment-id: ${{ steps.tf.outputs.comment-id }}"
echo "diff: ${{ steps.tf.outputs.diff }}"
echo "exitcode: ${{ steps.tf.outputs.exitcode }}"
echo "identifier: ${{ steps.tf.outputs.identifier }}"
echo "job-id: ${{ steps.tf.outputs.job-id }}"
echo "plan-id: ${{ steps.tf.outputs.plan-id }}"
echo "plan-url: ${{ steps.tf.outputs.plan-url }}"
echo "result: ${{ steps.tf.outputs.result }}"
echo "run-url: ${{ steps.tf.outputs.run-url }}"
echo "summary: ${{ steps.tf.outputs.summary }}"
- name: Check plan for diff
id: check
env:
path: tests/${{ matrix.test }}
plan: ${{ steps.tf.outputs.identifier }}
pass: ${{ secrets.TF_ENCRYPTION }} # Optional.
run: |
echo "Download plan-file artifact."
artifact_id=$(gh api /repos/{owner}/{repo}/actions/artifacts --method GET --field "name=$plan" --jq '.artifacts[0].id')
gh api /repos/{owner}/{repo}/actions/artifacts/${artifact_id}/zip --method GET > "$plan.zip"
unzip "$plan.zip" -d "$path"
cd "$path"
echo "Optionally decrypt plan-file."
temp=$(mktemp)
printf "%s" "$pass" > "$temp"
openssl enc -aes-256-ctr -pbkdf2 -salt -in "tfplan" -out "tfplan.decrypted" -pass file:"$temp" -d
mv "tfplan.decrypted" "tfplan"
echo "Check if plan-file has diff."
diff_exists=$(tofu show "tfplan" | grep -q "^No:" && echo "true" || echo "false")
echo "diff_exists=$diff_exists" >> $GITHUB_OUTPUT
outputs:
diff_exists: ${{ steps.check.outputs.diff_exists }}
apply:
needs: [tests]
if: ${{ needs.tests.outputs.diff_exists == 'true' }}
runs-on: ubuntu-24.04
steps:
- run: echo "run apply"