@@ -46,19 +46,40 @@ jobs:
4646 echo "cmd_id=$CMD_ID" >> "$GITHUB_OUTPUT"
4747
4848 - name : Wait for SSM command to finish
49+ timeout-minutes : 20
4950 env :
5051 INSTANCE_ID : ${{ secrets.EC2_STAGING_INSTANCE_ID }}
5152 CMD_ID : ${{ steps.ssm.outputs.cmd_id }}
5253 run : |
53- WAIT_EXIT=0
54- aws ssm wait command-executed \
55- --command-id "$CMD_ID" \
56- --instance-id "$INSTANCE_ID" || WAIT_EXIT=$?
54+ while true; do
55+ if aws ssm wait command-executed \
56+ --command-id "$CMD_ID" \
57+ --instance-id "$INSTANCE_ID"; then
58+ break # waiter succeeds only on Status == Success
59+ fi
60+
61+ STATUS=$(aws ssm get-command-invocation \
62+ --command-id "$CMD_ID" \
63+ --instance-id "$INSTANCE_ID" \
64+ --query "Status" --output text 2>/dev/null || echo "Pending")
5765
66+ case "$STATUS" in
67+ Success) break ;;
68+ Failed|Cancelled|Cancelling|TimedOut)
69+ echo "Deployment ended with status: $STATUS"
70+ aws ssm get-command-invocation \
71+ --command-id "$CMD_ID" \
72+ --instance-id "$INSTANCE_ID" \
73+ --query '{Status:Status,Stdout:StandardOutputContent,Stderr:StandardErrorContent}' \
74+ --output json
75+ exit 1 ;;
76+ *) echo "Still running (status: $STATUS) — waiter capped out, re-waiting" ;;
77+ esac
78+ done
79+
80+ echo "Deployment completed successfully."
5881 aws ssm get-command-invocation \
5982 --command-id "$CMD_ID" \
6083 --instance-id "$INSTANCE_ID" \
6184 --query '{Status:Status,Stdout:StandardOutputContent,Stderr:StandardErrorContent}' \
6285 --output json
63-
64- exit $WAIT_EXIT
0 commit comments