-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathdeploy.sh
More file actions
executable file
·146 lines (124 loc) · 5.58 KB
/
deploy.sh
File metadata and controls
executable file
·146 lines (124 loc) · 5.58 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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#!/usr/bin/env bash
#=============================================================================
# Unified KMS Deployment Script (Modular Version)
#
# Handles deployment to:
# 1. Local Kind Cluster (local development)
# 2. CI Kind Cluster (CI testing)
# 3. AWS Cluster via Tailscale (PR Previews / Staging)
#
# Usage:
# ./deploy.sh --target [kind-local|kind-ci|aws-ci] [OPTIONS]
#
# This modular version splits functionality across multiple library files
# for better maintainability and organization.
#=============================================================================
set -euo pipefail
#=============================================================================
# Script Location and Library Path
#=============================================================================
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LIB_DIR="${SCRIPT_DIR}/lib"
REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
#=============================================================================
# Default Configuration
#=============================================================================
TARGET="kind-local"
NAMESPACE="kms-test"
DEPLOYMENT_TYPE="threshold"
NUM_PARTIES="4"
KMS_CORE_TAG="latest-dev"
KMS_CLIENT_TAG="latest-dev"
KMS_CORE_IMAGE_NAME="${KMS_CORE_IMAGE_NAME:-ghcr.io/zama-ai/kms/core-service}"
KMS_CORE_CLIENT_IMAGE_NAME="${KMS_CORE_CLIENT_IMAGE_NAME:-ghcr.io/zama-ai/kms/core-client}"
CLEANUP="false"
BUILD_IMAGES="false"
# Perf-testing defaults (can be overridden by env/args)
KMS_CHART_VERSION="${KMS_CHART_VERSION:-repository}"
TKMS_INFRA_VERSION="${TKMS_INFRA_CHART_VERSION:-0.3.2}"
SYNC_SECRETS_VERSION="0.2.1"
PATH_SUFFIX="${PATH_SUFFIX:-kms-ci}"
TLS="${TLS:-false}"
# Build defaults (for local image building)
RUST_IMAGE_VERSION="${RUST_IMAGE_VERSION:-1.94}"
# AWS/Tailscale Defaults
TAILSCALE_HOSTNAME="tailscale-operator-zws-dev.diplodocus-boa.ts.net"
#=============================================================================
# Load Library Modules
#=============================================================================
# shellcheck source=lib/common.sh
source "${LIB_DIR}/common.sh"
# shellcheck source=lib/context.sh
source "${LIB_DIR}/context.sh"
# shellcheck source=lib/infrastructure.sh
source "${LIB_DIR}/infrastructure.sh"
# shellcheck source=lib/kms_deployment.sh
source "${LIB_DIR}/kms_deployment.sh"
# shellcheck source=lib/utils.sh
source "${LIB_DIR}/utils.sh"
#=============================================================================
# Main Execution Flow
#=============================================================================
main() {
#=========================================================================
# Parse command line arguments
#=========================================================================
parse_args "$@"
#=========================================================================
# Special Mode: Log Collection Only
#=========================================================================
if [[ "${COLLECT_LOGS:-false}" == "true" ]]; then
log_info "Running in log collection mode..."
# Setup minimal context for log collection
if [[ "${TARGET}" == *"kind"* ]]; then
kubectl config use-context "kind-${NAMESPACE}" || true
fi
collect_logs
exit 0
fi
#=========================================================================
# Local Development: Interactive Resource Configuration
#=========================================================================
if [[ "${TARGET}" == "kind-local" ]]; then
check_local_resources
fi
#=========================================================================
# Display Deployment Configuration
#=========================================================================
log_info "========================================="
log_info "KMS Deployment Starting"
log_info "========================================="
log_info "Target: ${TARGET}"
log_info "Namespace: ${NAMESPACE}"
log_info "Deployment Type: ${DEPLOYMENT_TYPE}"
log_info "Parties: ${NUM_PARTIES}"
log_info "Core Tag: ${KMS_CORE_TAG}"
log_info "Client Tag: ${KMS_CLIENT_TAG}"
log_info "TLS: ${ENABLE_TLS:-false}"
log_info "========================================="
#=========================================================================
# Deployment Phases
#=========================================================================
setup_context # Phase 1: Setup Kubernetes context
setup_infrastructure # Phase 2: Deploy infrastructure (LocalStack/TKMS)
# Phase 3: Build images if requested (Kind only)
if [[ "${BUILD_IMAGES}" == "true" ]] && [[ "${TARGET}" == *"kind"* ]]; then
build_container
fi
deploy_kms # Phase 4: Deploy KMS core services
setup_port_forwarding # Phase 5: Setup local port forwarding (Kind only)
#=========================================================================
# Deployment Complete
#=========================================================================
log_info "========================================="
log_info "Deployment Complete!"
log_info "========================================="
# Optional: Block and maintain port forwarding
if [[ "${BLOCK:-false}" == "true" ]]; then
wait_indefinitely
fi
}
#=============================================================================
# Execute Main
#=============================================================================
main "$@"