-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy.sh
More file actions
executable file
·78 lines (66 loc) · 3.7 KB
/
Copy pathdeploy.sh
File metadata and controls
executable file
·78 lines (66 loc) · 3.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/env bash
set -euo pipefail
# BuildKit is required for the RUN --mount=type=cache directives in Dockerfile.
# Default since Docker 23 but explicit removes ambiguity across dev environments.
export DOCKER_BUILDKIT=1
# ─────────────────────────────────────────────────────────────────────────────
# BlueprintParser 2 Deploy Script
# Builds, pushes Docker image to ECR, and updates ECS service.
# Uses the SAME ECR repo and ECS service as blueprintparser_current.
# ─────────────────────────────────────────────────────────────────────────────
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
[ -f "${PROJECT_DIR}/.deploy.env" ] && source "${PROJECT_DIR}/.deploy.env"
: "${AWS_ACCOUNT:?ERROR: Set AWS_ACCOUNT in .deploy.env or environment}"
: "${AWS_REGION:?ERROR: Set AWS_REGION in .deploy.env or environment}"
: "${ECR_REPO:?ERROR: Set ECR_REPO in .deploy.env or environment}"
: "${ECS_CLUSTER:?ERROR: Set ECS_CLUSTER in .deploy.env or environment}"
: "${ECS_SERVICE:?ERROR: Set ECS_SERVICE in .deploy.env or environment}"
ECR_BASE="${AWS_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com"
GREEN='\033[0;32m'
CYAN='\033[0;36m'
BOLD='\033[1m'
NC='\033[0m'
echo ""
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${BOLD} BlueprintParser 2 → Deploy to AWS${NC}"
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""
# 1. ECR Login
echo -e "${GREEN}▶${NC} Logging into ECR..."
aws ecr get-login-password --region "${AWS_REGION}" \
| docker login --username AWS --password-stdin "${ECR_BASE}" 2>/dev/null
echo -e "${GREEN}✔${NC} ECR login successful"
# 2. Build
echo -e "\n${GREEN}▶${NC} Building Docker image..."
docker build \
--build-arg NEXT_PUBLIC_CLOUDFRONT_DOMAIN="${CLOUDFRONT_DOMAIN:-}" \
--build-arg NEXT_PUBLIC_S3_BUCKET="${S3_BUCKET:-}" \
-t "${ECR_REPO}:latest" "${PROJECT_DIR}"
echo -e "${GREEN}✔${NC} Build complete"
# 3. Tag & Push
ECR_URL="${ECR_BASE}/${ECR_REPO}:latest"
echo -e "\n${GREEN}▶${NC} Pushing to ${ECR_URL}..."
docker tag "${ECR_REPO}:latest" "${ECR_URL}"
docker push "${ECR_URL}"
echo -e "${GREEN}✔${NC} Push complete"
# 4. Update ECS Service
echo -e "\n${GREEN}▶${NC} Updating ECS service ${BOLD}${ECS_SERVICE}${NC}..."
aws ecs update-service \
--cluster "${ECS_CLUSTER}" \
--service "${ECS_SERVICE}" \
--force-new-deployment \
--region "${AWS_REGION}" \
--output text \
--query 'service.serviceName' > /dev/null
echo -e "${GREEN}✔${NC} Deployment triggered"
# 5. Status
echo ""
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${GREEN}✔${NC} ${BOLD}Deploy complete!${NC}"
echo ""
echo -e " Watch deployment progress:"
echo -e " ${CYAN}aws ecs describe-services --cluster ${ECS_CLUSTER} --services ${ECS_SERVICE} --region ${AWS_REGION} --query 'services[0].{running:runningCount,desired:desiredCount,pending:pendingCount}'${NC}"
echo ""
echo -e " View logs:"
echo -e " ${CYAN}aws logs tail ${LOG_GROUP:-/ecs/${ECS_SERVICE}} --since 5m --region ${AWS_REGION} --follow${NC}"
echo ""