89 lines
2.6 KiB
Bash
Executable File
89 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT=$(CDPATH='' cd -- "$(dirname -- "$0")/.." && pwd)
|
|
env_file=${1:-"$ROOT/.env"}
|
|
|
|
if [[ "$env_file" != /* ]]; then
|
|
env_file="$ROOT/$env_file"
|
|
fi
|
|
|
|
if [[ ! -f "$env_file" ]]; then
|
|
echo "Deployment environment does not exist: $env_file" >&2
|
|
exit 1
|
|
fi
|
|
|
|
read_env_value() {
|
|
local key=$1
|
|
|
|
awk -v key="$key" '
|
|
index($0, key "=") == 1 {
|
|
print substr($0, length(key) + 2)
|
|
found = 1
|
|
exit
|
|
}
|
|
END { if (!found) exit 1 }
|
|
' "$env_file"
|
|
}
|
|
|
|
deployment_target=$(read_env_value DEPLOYMENT_TARGET 2>/dev/null || printf compose)
|
|
database_mode=$(read_env_value DATABASE_MODE 2>/dev/null || printf container)
|
|
|
|
case "$deployment_target" in
|
|
compose)
|
|
exec "$ROOT/scripts/compose-up.sh" "$env_file"
|
|
;;
|
|
|
|
kubernetes)
|
|
kubernetes_mode=$(read_env_value KUBERNETES_MODE 2>/dev/null || true)
|
|
case "${kubernetes_mode:-kind}" in
|
|
kind)
|
|
[[ "$database_mode" == container ]] || {
|
|
echo "The project-owned kind drill requires DATABASE_MODE=container." >&2
|
|
exit 1
|
|
}
|
|
exec "$ROOT/scripts/kind-up.sh"
|
|
;;
|
|
|
|
helm)
|
|
[[ "$database_mode" == external ]] || {
|
|
echo "A production Helm deployment requires DATABASE_MODE=external." >&2
|
|
exit 1
|
|
}
|
|
KUBE_CONTEXT=$(read_env_value KUBE_CONTEXT 2>/dev/null || true)
|
|
KUBE_NAMESPACE=$(read_env_value KUBE_NAMESPACE 2>/dev/null || true)
|
|
KUBE_RELEASE=$(read_env_value KUBE_RELEASE 2>/dev/null || true)
|
|
KUBE_VALUES_FILE=$(read_env_value KUBE_VALUES_FILE 2>/dev/null || true)
|
|
: "${KUBE_CONTEXT:?Set KUBE_CONTEXT for KUBERNETES_MODE=helm}"
|
|
: "${KUBE_NAMESPACE:?Set KUBE_NAMESPACE for KUBERNETES_MODE=helm}"
|
|
: "${KUBE_RELEASE:?Set KUBE_RELEASE for KUBERNETES_MODE=helm}"
|
|
: "${KUBE_VALUES_FILE:?Set KUBE_VALUES_FILE for KUBERNETES_MODE=helm}"
|
|
if [[ "$KUBE_VALUES_FILE" != /* ]]; then
|
|
KUBE_VALUES_FILE="$ROOT/$KUBE_VALUES_FILE"
|
|
fi
|
|
[[ -f "$KUBE_VALUES_FILE" ]] || {
|
|
echo "KUBE_VALUES_FILE does not exist: $KUBE_VALUES_FILE" >&2
|
|
exit 1
|
|
}
|
|
"$ROOT/scripts/bootstrap-kubernetes-tools.sh"
|
|
exec "$ROOT/.tools/bin/helm" upgrade --install "$KUBE_RELEASE" \
|
|
"$ROOT/deploy/helm/who-need-help" \
|
|
--kube-context "$KUBE_CONTEXT" \
|
|
--namespace "$KUBE_NAMESPACE" \
|
|
--values "$KUBE_VALUES_FILE" \
|
|
--wait
|
|
;;
|
|
|
|
*)
|
|
echo "KUBERNETES_MODE must be kind or helm." >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
*)
|
|
echo "DEPLOYMENT_TARGET must be compose or kubernetes." >&2
|
|
exit 1
|
|
;;
|
|
esac
|