-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy_all.sh
More file actions
98 lines (82 loc) · 3.55 KB
/
deploy_all.sh
File metadata and controls
98 lines (82 loc) · 3.55 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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/usr/bin/env bash
# =============================================================================
# deploy_all.sh — Deploy all Defence T&E environments in sequence
# Usage:
# ./deploy_all.sh # deploy all 4 environments
# ./deploy_all.sh dev test # deploy dev and test only
# PGHOST=myserver ./deploy_all.sh prod # target a specific host
#
# Prerequisites:
# - psql installed and on PATH
# - Running as a PostgreSQL superuser (default: postgres)
# - Script run from the te_database_setup/ directory
# =============================================================================
set -euo pipefail
# ── Configuration ─────────────────────────────────────────────────────────────
PG_USER="${PGUSER:-postgres}"
PG_HOST="${PGHOST:-localhost}"
PG_PORT="${PGPORT:-5432}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PSQL="psql -U ${PG_USER} -h ${PG_HOST} -p ${PG_PORT}"
ALL_ENVS=(dev test staging prod)
# Colours
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'
# ── Helpers ───────────────────────────────────────────────────────────────────
log() { echo -e "${GREEN}[✓]${NC} $*"; }
warn() { echo -e "${YELLOW}[⚠]${NC} $*"; }
error() { echo -e "${RED}[✗]${NC} $*" >&2; }
separator(){ echo "────────────────────────────────────────────────────────────"; }
# ── Parse arguments ───────────────────────────────────────────────────────────
ENVS_TO_DEPLOY=("${@:-${ALL_ENVS[@]}}")
# Validate each requested environment
for env in "${ENVS_TO_DEPLOY[@]}"; do
if [[ ! " ${ALL_ENVS[*]} " =~ " ${env} " ]]; then
error "Unknown environment: '${env}'. Valid options: ${ALL_ENVS[*]}"
exit 1
fi
done
# ── Main deployment loop ──────────────────────────────────────────────────────
separator
echo " Defence T&E Database Deployment"
echo " Host : ${PG_HOST}:${PG_PORT}"
echo " User : ${PG_USER}"
echo " Targets : ${ENVS_TO_DEPLOY[*]}"
separator
FAILED=()
SUCCEEDED=()
for env in "${ENVS_TO_DEPLOY[@]}"; do
env_file="${SCRIPT_DIR}/environments/env_${env}.sql"
if [[ ! -f "${env_file}" ]]; then
error "Environment file not found: ${env_file}"
FAILED+=("${env}")
continue
fi
echo ""
warn "Deploying environment: ${env^^}"
if ${PSQL} \
--set=ON_ERROR_STOP=1 \
--file="${env_file}" \
2>&1; then
log "Environment ${env^^} deployed successfully."
SUCCEEDED+=("${env}")
else
error "Deployment FAILED for environment: ${env^^}"
FAILED+=("${env}")
fi
separator
done
# ── Summary ───────────────────────────────────────────────────────────────────
echo ""
echo " Deployment Summary"
separator
if [[ ${#SUCCEEDED[@]} -gt 0 ]]; then
log "Succeeded : ${SUCCEEDED[*]}"
fi
if [[ ${#FAILED[@]} -gt 0 ]]; then
error "Failed : ${FAILED[*]}"
exit 1
fi
echo ""