Skip to content

Commit 2be6ae0

Browse files
committed
fix(terraform): gate AWS role checks without invalid job if
1 parent d466064 commit 2be6ae0

1 file changed

Lines changed: 42 additions & 6 deletions

File tree

.github/workflows/terraform.yml

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,13 @@ on:
1515
env:
1616
TF_VERSION: "1.7.5"
1717
AWS_REGION: "us-east-1"
18-
AWS_TF_ROLE_ARN: ${{ secrets.AWS_TF_ROLE_ARN }}
1918

2019
jobs:
2120
# ── Plan — runs on every PR that touches terraform/ ────────────────────────
2221
plan:
2322
name: Terraform Plan (${{ matrix.env }})
2423
runs-on: ubuntu-latest
25-
if: ${{ github.event_name == 'pull_request' && env.AWS_TF_ROLE_ARN != '' }}
24+
if: ${{ github.event_name == 'pull_request' }}
2625
strategy:
2726
matrix:
2827
env: [dev, prod]
@@ -38,34 +37,54 @@ jobs:
3837
steps:
3938
- uses: actions/checkout@v4
4039

40+
- name: Check Terraform AWS role
41+
id: aws_role
42+
run: |
43+
if [ -n "${{ secrets.AWS_TF_ROLE_ARN }}" ]; then
44+
echo "configured=true" >> "$GITHUB_OUTPUT"
45+
else
46+
echo "configured=false" >> "$GITHUB_OUTPUT"
47+
fi
48+
49+
- name: Skip when Terraform AWS role is not configured
50+
if: steps.aws_role.outputs.configured != 'true'
51+
run: echo "Skipping Terraform plan because AWS_TF_ROLE_ARN is not configured."
52+
4153
- name: Configure AWS credentials (OIDC)
54+
if: steps.aws_role.outputs.configured == 'true'
4255
uses: aws-actions/configure-aws-credentials@v4
4356
with:
44-
role-to-assume: ${{ env.AWS_TF_ROLE_ARN }}
57+
role-to-assume: ${{ secrets.AWS_TF_ROLE_ARN }}
4558
aws-region: ${{ env.AWS_REGION }}
4659

4760
- name: Set up Terraform
61+
if: steps.aws_role.outputs.configured == 'true'
4862
uses: hashicorp/setup-terraform@v3
4963
with:
5064
terraform_version: ${{ env.TF_VERSION }}
5165

5266
- name: Terraform Init
67+
if: steps.aws_role.outputs.configured == 'true'
5368
run: terraform init -input=false
5469

5570
- name: Terraform Format check
71+
if: steps.aws_role.outputs.configured == 'true'
5672
run: terraform fmt -check -recursive ../../
5773

5874
- name: Terraform Validate
75+
if: steps.aws_role.outputs.configured == 'true'
5976
run: terraform validate
6077

6178
- name: Terraform Plan
6279
id: plan
80+
if: steps.aws_role.outputs.configured == 'true'
6381
env:
6482
TF_VAR_db_password: ${{ secrets.TF_VAR_DB_PASSWORD }}
6583
run: terraform plan -input=false -no-color -out=tfplan 2>&1 | tee plan.txt
6684
continue-on-error: true # we post the plan even if it fails
6785

6886
- name: Post plan as PR comment
87+
if: steps.aws_role.outputs.configured == 'true'
6988
uses: actions/github-script@v7
7089
with:
7190
script: |
@@ -80,14 +99,14 @@ jobs:
8099
});
81100
82101
- name: Fail if plan errored
83-
if: steps.plan.outcome == 'failure'
102+
if: steps.aws_role.outputs.configured == 'true' && steps.plan.outcome == 'failure'
84103
run: exit 1
85104

86105
# ── Apply — runs only on push to master (after PR merged) ──────────────────
87106
apply:
88107
name: Terraform Apply (dev)
89108
runs-on: ubuntu-latest
90-
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && env.AWS_TF_ROLE_ARN != '' }}
109+
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
91110
environment: dev # requires manual approval in GitHub Environments
92111
defaults:
93112
run:
@@ -100,21 +119,38 @@ jobs:
100119
steps:
101120
- uses: actions/checkout@v4
102121

122+
- name: Check Terraform AWS role
123+
id: aws_role
124+
run: |
125+
if [ -n "${{ secrets.AWS_TF_ROLE_ARN }}" ]; then
126+
echo "configured=true" >> "$GITHUB_OUTPUT"
127+
else
128+
echo "configured=false" >> "$GITHUB_OUTPUT"
129+
fi
130+
131+
- name: Skip when Terraform AWS role is not configured
132+
if: steps.aws_role.outputs.configured != 'true'
133+
run: echo "Skipping Terraform apply because AWS_TF_ROLE_ARN is not configured."
134+
103135
- name: Configure AWS credentials (OIDC)
136+
if: steps.aws_role.outputs.configured == 'true'
104137
uses: aws-actions/configure-aws-credentials@v4
105138
with:
106-
role-to-assume: ${{ env.AWS_TF_ROLE_ARN }}
139+
role-to-assume: ${{ secrets.AWS_TF_ROLE_ARN }}
107140
aws-region: ${{ env.AWS_REGION }}
108141

109142
- name: Set up Terraform
143+
if: steps.aws_role.outputs.configured == 'true'
110144
uses: hashicorp/setup-terraform@v3
111145
with:
112146
terraform_version: ${{ env.TF_VERSION }}
113147

114148
- name: Terraform Init
149+
if: steps.aws_role.outputs.configured == 'true'
115150
run: terraform init -input=false
116151

117152
- name: Terraform Apply
153+
if: steps.aws_role.outputs.configured == 'true'
118154
env:
119155
TF_VAR_db_password: ${{ secrets.TF_VAR_DB_PASSWORD }}
120156
run: terraform apply -input=false -auto-approve

0 commit comments

Comments
 (0)