Skip to content

Commit 05c32e4

Browse files
committed
feat: update tf output workflow to fetch from state
1 parent 4398f03 commit 05c32e4

File tree

1 file changed

+59
-10
lines changed

1 file changed

+59
-10
lines changed

.github/workflows/fetch-terraform-output.yml

Lines changed: 59 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,82 @@ name: "Fetch 1 Remote State Output Variable"
33
on:
44
workflow_call:
55
inputs:
6+
workdir:
7+
required: false
8+
type: string
9+
default: ${{ github.workspace }}
610
variable_name:
711
description: "var to fetch from the state file"
812
required: true
913
type: string
10-
artifact_id:
11-
description: "id of needed previous terraform job"
12-
required: true
14+
terraform_version:
15+
required: false
16+
type: string
17+
default: "latest"
18+
aws_github_role_name:
19+
required: false
20+
type: string
21+
default: "github_oidc_readonly"
22+
environment_name:
23+
required: false
1324
type: string
25+
default: ${{ github.base_ref }}
26+
terraform_workspace:
27+
required: false
28+
type: string
29+
default: ${{ github.base_ref || github.ref_name }}
1430
outputs:
1531
TF_OUTPUT_VAR:
1632
description: "The value of the 1 variable passed as input"
1733
value: ${{ jobs.fetch-vars.outputs.TF_OUTPUT_VAR }}
1834
jobs:
1935
fetch-vars:
2036
runs-on: ubuntu-latest
37+
environment:
38+
name: ${{ inputs.environment_name }}
39+
defaults:
40+
run:
41+
working-directory: ${{ inputs.workdir || github.workspace }}
42+
env:
43+
TERRAFORM_DEFAULT_BACKEND: tfstate-${{ vars.AWS_ACCOUNT_ID || vars.PULL_REQUEST_AWS_ACCOUNT_ID }}
44+
AWS_ACCOUNT_ID: ${{ vars.AWS_ACCOUNT_ID || vars.PULL_REQUEST_AWS_ACCOUNT_ID }}
45+
AWS_REGION: ${{ vars.AWS_REGION || vars.AWS_DEFAULT_REGION }}
2146
outputs:
2247
TF_OUTPUT_VAR: ${{ steps.set-variables.outputs.tf_output_var }}
23-
2448
steps:
25-
- name: Get Output
26-
uses: actions/download-artifact@v5
49+
- name: Checkout
50+
uses: actions/checkout@v6
51+
52+
- uses: hashicorp/setup-terraform@v3
2753
with:
28-
name: tf-output-${{ github.run_id }}-${{ github.run_attempt }}-${{ inputs.artifact_id }}
54+
terraform_version: ${{ inputs.terraform_version }}
55+
terraform_wrapper: false
56+
57+
- name: Configure AWS Credentials
58+
uses: aws-actions/configure-aws-credentials@v5
59+
with:
60+
aws-region: ${{ env.AWS_REGION }}
61+
role-to-assume: arn:aws:iam::${{ env.AWS_ACCOUNT_ID }}:role/${{ inputs.aws_github_role_name }}
62+
63+
- name: Terraform Init
64+
id: init
65+
run: terraform init -backend-config="bucket=${{ env.TERRAFORM_DEFAULT_BACKEND }}"
66+
67+
- name: Terraform Workspace
68+
id: workspace
69+
run: terraform workspace select ${{ inputs.terraform_workspace }}
2970

30-
- name: Check var presence
31-
run: grep ${{ inputs.variable_name }} tf-output.json >/dev/null
71+
- name: Terraform Get Output
72+
run: terraform output -json > tf-output.json
3273

3374
- name: Set variables
3475
id: set-variables
35-
run: echo "tf_output_var=`jq -r '.${{ inputs.variable_name }}.value' tf-output.json`" >> $GITHUB_OUTPUT
76+
env:
77+
VAR_NAME: ${{ inputs.variable_name }}
78+
run: |
79+
value=$(jq -r --arg key "$VAR_NAME" '.[$key].value' tf-output.json)
80+
if [ "$value" = "null" ] || [ -z "$value" ]; then
81+
echo "::error::Variable '$VAR_NAME' not found in terraform output"
82+
exit 1
83+
fi
84+
echo "tf_output_var=$value" >> "$GITHUB_OUTPUT"

0 commit comments

Comments
 (0)