Skip to content

Commit f3fa2d9

Browse files
author
Taniya Mathur
committed
Fix CloudWatch log cleanup and improve GitLab summary extraction
- Fix CloudWatch log group deletion by using JSON output instead of text - Add proper JSON parsing and shlex quoting for log group names - Eliminate InvalidParameterException from concatenated log group names - Simplify GitLab CI summary extraction to use single reliable pattern - Extract deployment summary starting from Bedrock generation message
1 parent 437f813 commit f3fa2d9

File tree

2 files changed

+28
-20
lines changed

2 files changed

+28
-20
lines changed

.gitlab-ci.yml

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -165,19 +165,16 @@ integration_tests:
165165
echo "$FULL_LOGS" > codebuild_logs.txt
166166
echo "📁 Full deployment logs saved to: codebuild_logs.txt"
167167
168-
# Extract and show AI summary or manual summary
168+
# Extract and show deployment summary (AI or manual)
169169
echo ""
170-
AI_SUMMARY=$(echo "$FULL_LOGS" | grep -A 50 "AI Deployment Analysis" | head -50)
171-
MANUAL_SUMMARY=$(echo "$FULL_LOGS" | grep -A 20 "DEPLOYMENT SUMMARY REPORT" | head -20)
170+
SUMMARY=$(echo "$FULL_LOGS" | grep -A 100 "🤖 Generating deployment summary with Bedrock..." | head -100)
172171
173-
if [ -n "$AI_SUMMARY" ]; then
174-
echo "🤖 AI-Powered Deployment Analysis:"
175-
echo "$AI_SUMMARY"
176-
elif [ -n "$MANUAL_SUMMARY" ]; then
177-
echo "📋 Deployment Summary:"
178-
echo "$MANUAL_SUMMARY"
172+
if [ -n "$SUMMARY" ]; then
173+
echo "🤖 Deployment Analysis:"
174+
echo "$SUMMARY"
179175
else
180-
echo "⚠️ No deployment summary available"
176+
echo "⚠️ No deployment summary found - check codebuild_logs.txt for details"
177+
fi
181178
fi
182179
else
183180
echo "Could not find CodeBuild execution"

scripts/codebuild_deployment.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import json
99
import os
1010
import re
11+
import shlex
1112
import subprocess
1213
import sys
1314
from concurrent.futures import ThreadPoolExecutor, as_completed
@@ -480,21 +481,31 @@ def cleanup_stack(stack_name, pattern_name):
480481

481482
# CloudWatch log groups
482483
print(f"[{pattern_name}] Cleaning up CloudWatch log groups...")
483-
result = run_command(f"aws logs describe-log-groups --query 'logGroups[?contains(logGroupName, `{stack_name}`)].logGroupName' --output text", check=False)
484+
result = run_command(f"aws logs describe-log-groups --query 'logGroups[?contains(logGroupName, `{stack_name}`)].logGroupName' --output json", check=False)
484485
if result.stdout.strip():
485-
log_group_names = [name for name in result.stdout.strip().split('\t') if name]
486-
for log_group_name in log_group_names:
487-
print(f"[{pattern_name}] Deleting log group: {log_group_name}")
488-
run_command(f"aws logs delete-log-group --log-group-name '{log_group_name}'", check=False)
486+
try:
487+
import json
488+
log_group_names = json.loads(result.stdout.strip())
489+
for log_group_name in log_group_names:
490+
if log_group_name: # Skip empty names
491+
print(f"[{pattern_name}] Deleting log group: {log_group_name}")
492+
run_command(f"aws logs delete-log-group --log-group-name {shlex.quote(log_group_name)}", check=False)
493+
except json.JSONDecodeError:
494+
print(f"[{pattern_name}] Failed to parse log group names")
489495

490496
# AppSync logs
491497
print(f"[{pattern_name}] Cleaning up AppSync logs...")
492-
result = run_command(f"aws appsync list-graphql-apis --query 'graphqlApis[?contains(name, `{stack_name}`)].apiId' --output text", check=False)
498+
result = run_command(f"aws appsync list-graphql-apis --query 'graphqlApis[?contains(name, `{stack_name}`)].apiId' --output json", check=False)
493499
if result.stdout.strip():
494-
api_ids = [api_id for api_id in result.stdout.strip().split('\t') if api_id]
495-
for api_id in api_ids:
496-
print(f"[{pattern_name}] Deleting AppSync log group for API: {api_id}")
497-
run_command(f"aws logs delete-log-group --log-group-name '/aws/appsync/apis/{api_id}'", check=False)
500+
try:
501+
import json
502+
api_ids = json.loads(result.stdout.strip())
503+
for api_id in api_ids:
504+
if api_id: # Skip empty IDs
505+
print(f"[{pattern_name}] Deleting AppSync log group for API: {api_id}")
506+
run_command(f"aws logs delete-log-group --log-group-name {shlex.quote(f'/aws/appsync/apis/{api_id}')}", check=False)
507+
except json.JSONDecodeError:
508+
print(f"[{pattern_name}] Failed to parse AppSync API IDs")
498509

499510
# Clean up CloudWatch Logs Resource Policy only if stack-specific
500511
print(f"[{pattern_name}] Checking CloudWatch resource policies...")

0 commit comments

Comments
 (0)