@@ -3,7 +3,7 @@ name: EC2 Deploy
3
3
on :
4
4
push :
5
5
branches :
6
- - devops/a3
6
+ - devops/a4
7
7
tags :
8
8
- deploy-dev
9
9
- deploy-prod
@@ -60,19 +60,30 @@ jobs:
60
60
61
61
echo "🛠️ Deployment stage: $STAGE"
62
62
63
- # Terraform Init & Workspace
64
- - name : Terraform Init & Workspace
65
- working-directory : ${{ env.TF_WORKING_DIR }}
63
+ # Clone private repo for prod config
64
+ - name : Clone Private Repo for Prod Config
65
+ if : env.STAGE == 'prod'
66
66
run : |
67
- terraform init
68
- terraform workspace select ${STAGE} || terraform workspace new ${STAGE}
67
+ echo "🔒 Cloning private repo for prod configuration..."
68
+ git clone https://${{ secrets.PRIVATE_REPO_KEY }}@${{ secrets.PRIVATE_REPO }} private-config
69
+ echo "✅ Cloned private config repo"
70
+
71
+ # Terraform Init
72
+ - name : Terraform Init
73
+ working-directory : ${{ env.TF_WORKING_DIR }}
74
+ run : terraform init
69
75
70
76
# Terraform Apply (Full Infra)
71
77
- name : Terraform Apply
72
78
working-directory : ${{ env.TF_WORKING_DIR }}
73
79
run : |
74
- terraform apply -var-file="${STAGE}_config.tfvars" -auto-approve \
75
- -var "stage=${STAGE}"
80
+ if [ "${STAGE}" == "prod" ]; then
81
+ echo "Applying Terraform with private prod configuration..."
82
+ terraform apply -var-file=../private-config/prod_config.tfvars -auto-approve
83
+ else
84
+ echo "Applying Terraform with public dev configuration..."
85
+ terraform apply -var-file="${STAGE}_config.tfvars" -auto-approve
86
+ fi
76
87
77
88
# Get Outputs: App IP, Verifier IP, S3 Bucket
78
89
- name : Get Terraform Outputs
@@ -117,8 +128,7 @@ jobs:
117
128
working-directory : ${{ env.TF_WORKING_DIR }}
118
129
run : |
119
130
terraform apply -var-file="${STAGE}_config.tfvars" \
120
- -target=aws_instance.log_verifier -auto-approve \
121
- -var "stage=${STAGE}"
131
+ -target=aws_instance.log_verifier -auto-approve
122
132
123
133
# Get Verifier IP
124
134
- name : Get Verifier IP
@@ -145,14 +155,12 @@ jobs:
145
155
run : |
146
156
echo "🔐 Validating logs in S3 from verifier EC2"
147
157
148
- # Retry SSH if EC2 not yet ready
149
158
for attempt in {1..5}; do
150
159
ssh -o StrictHostKeyChecking=no ubuntu@${VERIFIER_IP} "echo '✅ SSH to verifier successful'" && break
151
160
echo "⏳ Verifier not ready, retrying SSH (attempt $attempt)..."
152
161
sleep 15
153
162
done
154
163
155
- # Validate logs in S3
156
164
for log in system/cloud-init.log app/my-app.log; do
157
165
ssh -o StrictHostKeyChecking=no ubuntu@${VERIFIER_IP} \
158
166
"if aws s3 ls s3://${S3_BUCKET}/${STAGE}/$log > /dev/null 2>&1; then
@@ -161,22 +169,19 @@ jobs:
161
169
echo '❌ Missing: $log'; exit 1;
162
170
fi"
163
171
done
164
-
165
172
echo "🎉 All required logs are present in S3"
166
173
167
174
# Print Logs from Verifier EC2
168
175
- name : Print Logs from Verifier EC2
169
176
run : |
170
177
echo "📄 Fetching logs from /mylogs/${STAGE} on verifier EC2"
171
178
172
- # Retry SSH if EC2 not yet ready
173
179
for attempt in {1..5}; do
174
180
ssh -o StrictHostKeyChecking=no ubuntu@${VERIFIER_IP} "echo '✅ SSH to verifier successful for log fetch'" && break
175
181
echo "⏳ Verifier not ready for log fetch, retrying SSH (attempt $attempt)..."
176
182
sleep 15
177
183
done
178
184
179
- # Print system log
180
185
ssh -o StrictHostKeyChecking=no ubuntu@${VERIFIER_IP} \
181
186
"if [ -f /mylogs/${STAGE}/system/cloud-init.log ]; then
182
187
echo '📄 ====== system/cloud-init.log ======'
@@ -185,7 +190,6 @@ jobs:
185
190
echo '❌ system/cloud-init.log not found'
186
191
fi"
187
192
188
- # Print app log
189
193
ssh -o StrictHostKeyChecking=no ubuntu@${VERIFIER_IP} \
190
194
"if [ -f /mylogs/${STAGE}/app/my-app.log ]; then
191
195
echo '📄 ====== app/my-app.log ======'
@@ -196,28 +200,14 @@ jobs:
196
200
197
201
echo "✅ Printed last 20 lines of logs from verifier EC2"
198
202
199
- # # Verify Logs in S3 using AWS CLI
200
- # - name: Verify Logs in S3
201
- # run: |
202
- # echo "📦 Checking for logs in S3 bucket: $S3_BUCKET"
203
- # aws s3 ls s3://$S3_BUCKET/${STAGE}/system/cloud-init.log || { echo "❌ system logs missing"; exit 1; }
204
- # aws s3 ls s3://$S3_BUCKET/${STAGE}/app/my-app.log || { echo "❌ app logs missing"; exit 1; }
205
- # echo "✅ Logs found in S3 bucket"
206
-
207
-
208
203
# Destroy Infrastructure
209
204
- name : Destroy Infrastructure
210
205
if : always()
211
206
working-directory : ${{ env.TF_WORKING_DIR }}
212
207
run : |
213
208
echo "🗑️ Destroying infrastructure for stage: ${STAGE}"
214
- terraform destroy -var-file="${STAGE}_config.tfvars" -auto-approve \
215
- -var "stage=${STAGE}"
216
-
217
- # Cleanup Terraform Workspace
218
- - name : Cleanup Terraform Workspace
219
- if : always()
220
- working-directory : ${{ env.TF_WORKING_DIR }}
221
- run : |
222
- terraform workspace select default
223
- terraform workspace delete ${STAGE}
209
+ if [ "${STAGE}" == "prod" ]; then
210
+ terraform destroy -var-file=../private-config/prod_config.tfvars -auto-approve
211
+ else
212
+ terraform destroy -var-file="${STAGE}_config.tfvars" -auto-approve
213
+ fi
0 commit comments