Skip to content

Commit 6d6a3bd

Browse files
committed
david's deploy script
1 parent bd8aa5b commit 6d6a3bd

File tree

1 file changed

+199
-0
lines changed

1 file changed

+199
-0
lines changed

scripts/push-to-gcp.sh

Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
#!/bin/bash
2+
3+
# Script to build and push SysBio Portal to GCP Artifact Registry
4+
# Usage: ./scripts/push-to-gcp.sh [options]
5+
#
6+
# Options:
7+
# --version VERSION Image version tag (default: latest)
8+
# --project PROJECT GCP Project ID (overrides env var)
9+
# --region REGION GCP Region (default: us-central1)
10+
# --repo REPO Artifact Registry repository name (default: portal)
11+
# --service SERVICE Cloud Run service name (default: sysbio-portal)
12+
# --deploy Also redeploy the Cloud Run service after pushing
13+
# --help Show this help message
14+
#
15+
# Environment variables (can be set in .env file):
16+
# GCP_PROJECT_ID GCP Project ID
17+
# GCP_REGION GCP Region (default: us-central1)
18+
# GCP_REPOSITORY Artifact Registry repository name (default: portal)
19+
# GCP_CLOUD_RUN_SERVICE Cloud Run service name (default: sysbio-portal)
20+
# GCP_SERVICE_ACCOUNT_KEY Path to service account key file (optional)
21+
22+
set -e
23+
24+
# Script directory
25+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
26+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
27+
28+
# Load environment variables from .env if it exists
29+
if [ -f "$PROJECT_ROOT/.env" ]; then
30+
echo "📄 Loading environment variables from .env..."
31+
export $(grep -v '^#' "$PROJECT_ROOT/.env" | grep -v '^$' | xargs)
32+
fi
33+
34+
# Default configuration
35+
VERSION="latest"
36+
PROJECT_ID="${GCP_PROJECT_ID:-}"
37+
REGION="${GCP_REGION:-us-central1}"
38+
REPOSITORY="${GCP_REPOSITORY:-portal}"
39+
CLOUD_RUN_SERVICE="${GCP_CLOUD_RUN_SERVICE:-sysbio-portal}"
40+
SERVICE_ACCOUNT_KEY="${GCP_SERVICE_ACCOUNT_KEY:-}"
41+
IMAGE_NAME="sysbio-portal"
42+
DEPLOY=false
43+
44+
# Parse command line arguments
45+
while [[ $# -gt 0 ]]; do
46+
case $1 in
47+
--version)
48+
VERSION="$2"
49+
shift 2
50+
;;
51+
--project)
52+
PROJECT_ID="$2"
53+
shift 2
54+
;;
55+
--region)
56+
REGION="$2"
57+
shift 2
58+
;;
59+
--repo)
60+
REPOSITORY="$2"
61+
shift 2
62+
;;
63+
--service)
64+
CLOUD_RUN_SERVICE="$2"
65+
shift 2
66+
;;
67+
--deploy)
68+
DEPLOY=true
69+
shift
70+
;;
71+
--help)
72+
head -22 "$0" | tail -19
73+
exit 0
74+
;;
75+
*)
76+
echo "Unknown option: $1"
77+
echo "Use --help for usage information"
78+
exit 1
79+
;;
80+
esac
81+
done
82+
83+
# Validate required configuration
84+
if [ -z "$PROJECT_ID" ]; then
85+
echo "❌ Error: GCP Project ID is required."
86+
echo ""
87+
echo "Please provide it via one of the following methods:"
88+
echo " 1. Command line: ./scripts/push-to-gcp.sh --project YOUR_PROJECT_ID"
89+
echo " 2. Environment variable: export GCP_PROJECT_ID=YOUR_PROJECT_ID"
90+
echo " 3. .env file: GCP_PROJECT_ID=YOUR_PROJECT_ID"
91+
echo ""
92+
echo "Common project IDs:"
93+
echo " - sysbio-tools-staging"
94+
echo " - dti-diver-development"
95+
exit 1
96+
fi
97+
98+
# Full image path
99+
IMAGE_PATH="${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPOSITORY}/${IMAGE_NAME}"
100+
101+
# Build timestamp
102+
BUILD_TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%S.000Z")
103+
104+
echo "================================================"
105+
echo "SysBio Portal GCP Deployment"
106+
echo "================================================"
107+
echo "Project: ${PROJECT_ID}"
108+
echo "Region: ${REGION}"
109+
echo "Repository: ${REPOSITORY}"
110+
echo "Image: ${IMAGE_NAME}"
111+
echo "Version: ${VERSION}"
112+
echo "Timestamp: ${BUILD_TIMESTAMP}"
113+
echo "Deploy: ${DEPLOY}"
114+
echo "================================================"
115+
echo ""
116+
117+
# Authenticate with GCP
118+
echo "🔐 Configuring Docker authentication..."
119+
if [ -n "$SERVICE_ACCOUNT_KEY" ] && [ -f "$SERVICE_ACCOUNT_KEY" ]; then
120+
echo " Using service account key: ${SERVICE_ACCOUNT_KEY}"
121+
gcloud auth activate-service-account --key-file="${SERVICE_ACCOUNT_KEY}"
122+
gcloud auth configure-docker ${REGION}-docker.pkg.dev --quiet
123+
else
124+
echo " Using gcloud CLI authentication (your current active account)"
125+
echo " Run 'gcloud auth list' to see active accounts"
126+
echo " Run 'gcloud config set account YOUR_EMAIL' to switch accounts"
127+
gcloud auth configure-docker ${REGION}-docker.pkg.dev --quiet
128+
fi
129+
echo " ℹ️ Note: Not changing your default GCP project. Using ${PROJECT_ID} for this deployment only."
130+
echo ""
131+
132+
# Build the image
133+
echo "🏗️ Building Docker image for linux/amd64..."
134+
docker build --platform linux/amd64 \
135+
--build-arg BUILD_TIMESTAMP="${BUILD_TIMESTAMP}" \
136+
-t ${IMAGE_NAME}:${VERSION} \
137+
"$PROJECT_ROOT"
138+
139+
# Tag for GCP
140+
echo ""
141+
echo "🏷️ Tagging image for GCP Artifact Registry..."
142+
docker tag ${IMAGE_NAME}:${VERSION} ${IMAGE_PATH}:${VERSION}
143+
144+
if [ "$VERSION" != "latest" ]; then
145+
echo "🏷️ Also tagging as latest..."
146+
docker tag ${IMAGE_NAME}:${VERSION} ${IMAGE_PATH}:latest
147+
fi
148+
149+
# Push to GCP
150+
echo ""
151+
echo "📤 Pushing to GCP Artifact Registry..."
152+
docker push ${IMAGE_PATH}:${VERSION}
153+
154+
if [ "$VERSION" != "latest" ]; then
155+
docker push ${IMAGE_PATH}:latest
156+
fi
157+
158+
echo ""
159+
echo "✅ Successfully pushed to GCP Artifact Registry!"
160+
echo " Image URL: ${IMAGE_PATH}:${VERSION}"
161+
162+
# Optionally redeploy Cloud Run service
163+
if [ "$DEPLOY" = true ]; then
164+
echo ""
165+
echo "🚀 Redeploying Cloud Run service '${CLOUD_RUN_SERVICE}'..."
166+
gcloud run services update ${CLOUD_RUN_SERVICE} \
167+
--image ${IMAGE_PATH}:${VERSION} \
168+
--region ${REGION} \
169+
--project ${PROJECT_ID}
170+
171+
echo ""
172+
echo "✅ Cloud Run service '${CLOUD_RUN_SERVICE}' redeployed!"
173+
fi
174+
175+
echo ""
176+
echo "================================================"
177+
echo "✅ Deployment Complete!"
178+
echo "================================================"
179+
echo ""
180+
echo "Image pushed: ${IMAGE_PATH}:${VERSION}"
181+
echo ""
182+
183+
if [ "$DEPLOY" = false ]; then
184+
echo "To update the Cloud Run service, either:"
185+
echo ""
186+
echo "1. Re-run with --deploy flag:"
187+
echo " ./scripts/push-to-gcp.sh --deploy"
188+
echo ""
189+
echo "2. Use the Cloud Console:"
190+
echo " https://console.cloud.google.com/run?project=${PROJECT_ID}"
191+
echo ""
192+
echo "3. Or deploy via CLI:"
193+
echo " gcloud run deploy ${CLOUD_RUN_SERVICE} \\"
194+
echo " --image ${IMAGE_PATH}:${VERSION} \\"
195+
echo " --platform managed \\"
196+
echo " --region ${REGION} \\"
197+
echo " --project ${PROJECT_ID}"
198+
echo ""
199+
fi

0 commit comments

Comments
 (0)