From b88e82cd83022cd12d9b5cdafee7e0c1c4afa12a Mon Sep 17 00:00:00 2001 From: Ayush8923 <80516839+Ayush8923@users.noreply.github.com> Date: Fri, 18 Sep 2026 11:43:39 +0530 Subject: [PATCH] fix(*): update deployment script --- .github/workflows/cd-dev.yml | 33 +++++++++++++++++++++++----- .github/workflows/create-release.yml | 33 +++++++++++++++++++++++----- .github/workflows/deploy-staging.yml | 33 +++++++++++++++++++++++----- 3 files changed, 81 insertions(+), 18 deletions(-) diff --git a/.github/workflows/cd-dev.yml b/.github/workflows/cd-dev.yml index 731ac0f3..5fab9197 100644 --- a/.github/workflows/cd-dev.yml +++ b/.github/workflows/cd-dev.yml @@ -46,19 +46,40 @@ jobs: echo "cmd_id=$CMD_ID" >> "$GITHUB_OUTPUT" - name: Wait for SSM command to finish + timeout-minutes: 20 env: INSTANCE_ID: ${{ secrets.EC2_STAGING_INSTANCE_ID }} CMD_ID: ${{ steps.ssm.outputs.cmd_id }} run: | - WAIT_EXIT=0 - aws ssm wait command-executed \ - --command-id "$CMD_ID" \ - --instance-id "$INSTANCE_ID" || WAIT_EXIT=$? + while true; do + if aws ssm wait command-executed \ + --command-id "$CMD_ID" \ + --instance-id "$INSTANCE_ID"; then + break # waiter succeeds only on Status == Success + fi + + STATUS=$(aws ssm get-command-invocation \ + --command-id "$CMD_ID" \ + --instance-id "$INSTANCE_ID" \ + --query "Status" --output text 2>/dev/null || echo "Pending") + case "$STATUS" in + Success) break ;; + Failed|Cancelled|Cancelling|TimedOut) + echo "Deployment ended with status: $STATUS" + aws ssm get-command-invocation \ + --command-id "$CMD_ID" \ + --instance-id "$INSTANCE_ID" \ + --query '{Status:Status,Stdout:StandardOutputContent,Stderr:StandardErrorContent}' \ + --output json + exit 1 ;; + *) echo "Still running (status: $STATUS) — waiter capped out, re-waiting" ;; + esac + done + + echo "Deployment completed successfully." aws ssm get-command-invocation \ --command-id "$CMD_ID" \ --instance-id "$INSTANCE_ID" \ --query '{Status:Status,Stdout:StandardOutputContent,Stderr:StandardErrorContent}' \ --output json - - exit $WAIT_EXIT diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 6d56da73..1138e357 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -46,19 +46,40 @@ jobs: echo "cmd_id=$CMD_ID" >> "$GITHUB_OUTPUT" - name: Wait for SSM command to finish + timeout-minutes: 20 env: INSTANCE_ID: ${{ secrets.EC2_INSTANCE_ID }} CMD_ID: ${{ steps.ssm.outputs.cmd_id }} run: | - WAIT_EXIT=0 - aws ssm wait command-executed \ - --command-id "$CMD_ID" \ - --instance-id "$INSTANCE_ID" || WAIT_EXIT=$? + while true; do + if aws ssm wait command-executed \ + --command-id "$CMD_ID" \ + --instance-id "$INSTANCE_ID"; then + break # waiter succeeds only on Status == Success + fi + + STATUS=$(aws ssm get-command-invocation \ + --command-id "$CMD_ID" \ + --instance-id "$INSTANCE_ID" \ + --query "Status" --output text 2>/dev/null || echo "Pending") + case "$STATUS" in + Success) break ;; + Failed|Cancelled|Cancelling|TimedOut) + echo "Deployment ended with status: $STATUS" + aws ssm get-command-invocation \ + --command-id "$CMD_ID" \ + --instance-id "$INSTANCE_ID" \ + --query '{Status:Status,Stdout:StandardOutputContent,Stderr:StandardErrorContent}' \ + --output json + exit 1 ;; + *) echo "Still running (status: $STATUS) — waiter capped out, re-waiting" ;; + esac + done + + echo "Deployment completed successfully." aws ssm get-command-invocation \ --command-id "$CMD_ID" \ --instance-id "$INSTANCE_ID" \ --query '{Status:Status,Stdout:StandardOutputContent,Stderr:StandardErrorContent}' \ --output json - - exit $WAIT_EXIT diff --git a/.github/workflows/deploy-staging.yml b/.github/workflows/deploy-staging.yml index b9ec2c5b..01eafc89 100644 --- a/.github/workflows/deploy-staging.yml +++ b/.github/workflows/deploy-staging.yml @@ -46,19 +46,40 @@ jobs: echo "cmd_id=$CMD_ID" >> "$GITHUB_OUTPUT" - name: Wait for SSM command to finish + timeout-minutes: 20 env: INSTANCE_ID: ${{ secrets.EC2_STAGING_INSTANCE_ID }} CMD_ID: ${{ steps.ssm.outputs.cmd_id }} run: | - WAIT_EXIT=0 - aws ssm wait command-executed \ - --command-id "$CMD_ID" \ - --instance-id "$INSTANCE_ID" || WAIT_EXIT=$? + while true; do + if aws ssm wait command-executed \ + --command-id "$CMD_ID" \ + --instance-id "$INSTANCE_ID"; then + break # waiter succeeds only on Status == Success + fi + + STATUS=$(aws ssm get-command-invocation \ + --command-id "$CMD_ID" \ + --instance-id "$INSTANCE_ID" \ + --query "Status" --output text 2>/dev/null || echo "Pending") + case "$STATUS" in + Success) break ;; + Failed|Cancelled|Cancelling|TimedOut) + echo "Deployment ended with status: $STATUS" + aws ssm get-command-invocation \ + --command-id "$CMD_ID" \ + --instance-id "$INSTANCE_ID" \ + --query '{Status:Status,Stdout:StandardOutputContent,Stderr:StandardErrorContent}' \ + --output json + exit 1 ;; + *) echo "Still running (status: $STATUS) — waiter capped out, re-waiting" ;; + esac + done + + echo "Deployment completed successfully." aws ssm get-command-invocation \ --command-id "$CMD_ID" \ --instance-id "$INSTANCE_ID" \ --query '{Status:Status,Stdout:StandardOutputContent,Stderr:StandardErrorContent}' \ --output json - - exit $WAIT_EXIT