Files
wild-cloud/bin/deploy-app

112 lines
3.0 KiB
Bash
Executable File

#!/bin/bash
set -e
# Default values
APP_NAME=""
DRY_RUN=false
# Source environment variables from load-env.sh
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_DIR="$(dirname "$SCRIPT_DIR")"
if [ -f "$REPO_DIR/load-env.sh" ]; then
source "$REPO_DIR/load-env.sh"
fi
function show_help {
echo "Usage: $0 APP_NAME [options]"
echo ""
echo "Arguments:"
echo " APP_NAME Name of the app to deploy (directory name in apps/)"
echo ""
echo "Optional arguments:"
echo " --dry-run Preview the processed configuration without applying"
echo " --help Show this help message"
echo ""
echo "Examples:"
echo " $0 immich"
echo " $0 nextcloud --dry-run"
exit 1
}
# Parse command-line arguments
while [[ $# -gt 0 ]]; do
key="$1"
case $key in
--dry-run)
DRY_RUN=true
shift
;;
--help)
show_help
;;
-*)
echo "Unknown option: $1"
show_help
;;
*)
# First non-option argument is the app name
APP_NAME="$1"
shift
;;
esac
done
# Validate app name
if [[ -z "$APP_NAME" ]]; then
echo "Error: APP_NAME must be provided"
show_help
fi
# Check if app directory exists
APP_DIR="$REPO_DIR/apps/$APP_NAME"
if [[ ! -d "$APP_DIR" ]]; then
echo "Error: App directory not found: $APP_DIR"
exit 1
fi
# Check if kustomization.yaml exists
if [[ ! -f "$APP_DIR/kustomization.yaml" ]]; then
echo "Error: kustomization.yaml not found in $APP_DIR"
exit 1
fi
echo "Deploying app: $APP_NAME"
# Step 1: Generate config files
if [[ -f "$APP_DIR/config/.env" ]]; then
echo "Step 1: Generating config files..."
"$SCRIPT_DIR/generate-config" "$APP_NAME"
else
echo "Step 1: No .env file found, skipping config generation"
fi
# Handle dry run mode
if [[ "$DRY_RUN" == "true" ]]; then
echo "Step 2: Dry-run mode - showing kustomize output:"
kubectl kustomize "$APP_DIR"
exit 0
fi
# Step 2: Extract namespace from kustomization
echo "Step 2: Extracting namespace from kustomization..."
NAMESPACE=$(kubectl kustomize "$APP_DIR" | grep -o "namespace: [a-zA-Z0-9_-]\+" | head -1 | cut -d' ' -f2)
if [[ -n "$NAMESPACE" ]]; then
echo "Found namespace: $NAMESPACE"
# Create the namespace if it doesn't exist
echo "Creating namespace $NAMESPACE if it doesn't exist..."
kubectl create namespace "$NAMESPACE" --dry-run=client -o yaml | kubectl apply -f -
# Step 3: Copy TLS certificates to the namespace
echo "Step 3: Copying TLS certificates to namespace $NAMESPACE..."
"$SCRIPT_DIR/copy-secret" cert-manager:wildcard-internal-wild-cloud-tls "$NAMESPACE" || echo "Warning: Failed to copy internal wildcard certificate"
"$SCRIPT_DIR/copy-secret" cert-manager:wildcard-wild-cloud-tls "$NAMESPACE" || echo "Warning: Failed to copy external wildcard certificate"
else
echo "Warning: No namespace found in kustomization, using default namespace"
fi
# Step 4: Apply the app configuration
echo "Step 4: Applying app configuration..."
kubectl apply -k "$APP_DIR"
echo "✅ App '$APP_NAME' deployed successfully!"