@@ -30,59 +30,88 @@ jobs:
30
30
runs-on : ubuntu-latest
31
31
32
32
steps :
33
- # β
Checkout Repository
33
+ # Checkout Repository
34
34
- name : Checkout repository
35
35
uses : actions/checkout@v4
36
36
37
- # β
Configure AWS Credentials
37
+ # Configure AWS Credentials
38
38
- name : Configure AWS credentials
39
39
uses : aws-actions/configure-aws-credentials@v2
40
40
with :
41
41
aws-access-key-id : ${{ secrets.AWS_ACCESS_KEY_ID }}
42
42
aws-secret-access-key : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
43
43
aws-region : ${{ env.AWS_REGION }}
44
+ aws-output : json
44
45
45
- # β
Install Terraform
46
+ # Install Terraform
46
47
- name : Setup Terraform
47
48
uses : hashicorp/setup-terraform@v3
48
49
49
- # β
Terraform Init & Workspace
50
+ # Determin Stage - dev/prod/qa defaults to dev
51
+ # - name: Determine Stage
52
+ # id: set_stage
53
+ # run: |
54
+ # if [[ "${GITHUB_REF}" == "refs/tags/deploy-dev" ]]; then
55
+ # echo "STAGE=dev" >> $GITHUB_ENV
56
+ # elif [[ "${GITHUB_REF}" == "refs/tags/deploy-qa" ]]; then
57
+ # echo "STAGE=qa" >> $GITHUB_ENV
58
+ # elif [[ "${GITHUB_REF}" == "refs/tags/deploy-prod" ]]; then
59
+ # echo "STAGE=prod" >> $GITHUB_ENV
60
+ # elif [[ "${GITHUB_EVENT_NAME}" == "workflow_dispatch" ]]; then
61
+ # echo "STAGE=${{ github.event.inputs.stage }}" >> $GITHUB_ENV
62
+ # else
63
+ # echo "STAGE=dev" >> $GITHUB_ENV # default fallback
64
+ # fi
65
+
66
+ # echo "π οΈ Deployment stage: $STAGE"
67
+
68
+ # Terraform Init & Workspace
50
69
- name : Terraform Init & Workspace
51
70
working-directory : ${{ env.TF_WORKING_DIR }}
52
71
run : |
53
72
terraform init
54
73
terraform workspace select ${{ github.event.inputs.stage }} || terraform workspace new ${{ github.event.inputs.stage }}
55
74
56
- # β
Terraform Apply
75
+ # Terraform Apply
57
76
- name : Terraform Apply
58
77
working-directory : ${{ env.TF_WORKING_DIR }}
59
78
run : |
60
79
terraform apply -var-file="${{ github.event.inputs.stage }}_config.tfvars" -auto-approve \
61
80
-var "stage=${{ github.event.inputs.stage }}"
62
81
63
- # β
Get EC2 IPs & S3 Bucket
82
+ # Output and inject EC2 IPs & S3 Bucket name to Github Env
64
83
- name : Get EC2s Public IPs & S3 Bucket Name
65
84
working-directory : ${{ env.TF_WORKING_DIR }}
66
85
run : |
67
- echo "INSTANCE_IP=$(terraform output -raw instance_public_ip)" >> $GITHUB_ENV
68
- echo "VERIFIER_IP=$(terraform output -raw verifier_instance_public_ip)" >> $GITHUB_ENV
69
- echo "S3_BUCKET=$(terraform output -raw s3_log_bucket)" >> $GITHUB_ENV
70
-
71
- echo "π¦ App IP: $INSTANCE_IP"
72
- echo "π Verifier IP: $VERIFIER_IP"
73
- echo "πͺ£ S3 Bucket: $S3_BUCKET"
74
- echo "π¦ App IP: ${{ env.INSTANCE_IP }}"
75
- echo "π Verifier IP: ${{ env.VERIFIER_IP }}"
76
- echo "πͺ£ S3 Bucket: ${{ env.S3_BUCKET }}"
77
-
78
-
79
- # β
Wait for App Initialization
86
+ echo "Injecting terraform outputs to github environment"
87
+ # echo "INSTANCE_IP=$(terraform output -raw instance_public_ip)" >> $GITHUB_ENV
88
+ # echo "VERIFIER_IP=$(terraform output -raw verifier_instance_public_ip)" >> $GITHUB_ENV
89
+ # echo "S3_BUCKET=$(terraform output -raw s3_log_bucket)" >> $GITHUB_ENV
90
+ # Assign to local shell variables
91
+ INSTANCE_IP=$(terraform output -raw instance_public_ip)
92
+ VERIFIER_IP=$(terraform output -raw verifier_instance_public_ip)
93
+ S3_BUCKET=$(terraform output -raw s3_log_bucket)
94
+
95
+ # Write to GitHub Actions ENV for later steps
96
+ echo "INSTANCE_IP=$INSTANCE_IP" >> $GITHUB_ENV
97
+ echo "VERIFIER_IP=$VERIFIER_IP" >> $GITHUB_ENV
98
+ echo "S3_BUCKET=$S3_BUCKET" >> $GITHUB_ENV
99
+
100
+ # Echo both for current step & confirmation
101
+ echo "π¦ App IP (Shell): $INSTANCE_IP"
102
+ echo "π Verifier IP (Shell): $VERIFIER_IP"
103
+ echo "πͺ£ S3 Bucket (Shell): $S3_BUCKET"
104
+ echo "π¦ App IP (Env): ${{ env.INSTANCE_IP }}"
105
+ echo "π Verifier IP (Env): ${{ env.VERIFIER_IP }}"
106
+ echo "πͺ£ S3 Bucket (Env): ${{ env.S3_BUCKET }}"
107
+
108
+ # Wait for App Initialization
80
109
- name : Wait for App Initialization
81
110
run : |
82
111
echo "β³ Waiting 90 seconds for EC2 instances to initialize..."
83
112
sleep 90
84
113
85
- # β
Validate App Health
114
+ # Validate App Health
86
115
- name : Validate App Health
87
116
run : |
88
117
echo "π Checking app health at http://${{ env.INSTANCE_IP }}:80"
@@ -99,15 +128,15 @@ jobs:
99
128
echo "β App failed health check"
100
129
exit 1
101
130
102
- # β
Verify Logs in S3
131
+ # Verify Logs in S3
103
132
- name : Verify Logs in S3
104
133
run : |
105
134
echo "π¦ Checking for logs in S3 bucket: $S3_BUCKET"
106
135
aws s3 ls s3://$S3_BUCKET/system/cloud-init.log || { echo "β system logs missing"; exit 1; }
107
136
aws s3 ls s3://$S3_BUCKET/app/my-app.log || { echo "β app logs missing"; exit 1; }
108
137
echo "β
Logs found in S3 bucket"
109
138
110
- # β
Optional Destroy (disabled by default)
139
+ # Destroy (disabled by default)
111
140
- name : Destroy infrastructure
112
141
if : always()
113
142
working-directory : ${{ env.TF_WORKING_DIR }}
@@ -117,9 +146,9 @@ jobs:
117
146
terraform destroy -var-file="${{ github.event.inputs.stage }}_config.tfvars" -auto-approve \
118
147
-var "stage=${{ github.event.inputs.stage }}"
119
148
120
- # β
Optional Cleanup Terraform Workspace
149
+ # Cleanup Terraform Workspace
121
150
- name : Cleanup Terraform Workspace
122
- if : always() # Enable if you want to cleanup workspace
151
+ if : always()
123
152
working-directory : ${{ env.TF_WORKING_DIR }}
124
153
run : |
125
154
terraform workspace select default
0 commit comments