92 lines
3.5 KiB
Bash
Executable file
92 lines
3.5 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
cd "$(dirname "$0")/.."
|
|
if [[ -f scripts/load-secrets.sh ]]; then
|
|
# Export secrets from creds/secrets.env (dotenv) when available.
|
|
source scripts/load-secrets.sh
|
|
fi
|
|
|
|
# Prefer repo-local kubeconfig if present and KUBECONFIG is not set.
|
|
if [[ -z "${KUBECONFIG:-}" && -f creds/kubeconfig.yaml ]]; then
|
|
export KUBECONFIG="$(pwd)/creds/kubeconfig.yaml"
|
|
fi
|
|
|
|
source deploy/env.sh
|
|
|
|
if [[ ! -f deploy/.last-image ]]; then
|
|
echo "deploy/.last-image puuttuu. Aja ensin ./deploy/build.sh"
|
|
exit 1
|
|
fi
|
|
|
|
# Default env selection: DEPLOY_TARGET=staging|prod (fallback staging) to avoid manual export
|
|
if [[ -z "${K8S_NAMESPACE:-}" || -z "${APP_HOST:-}" || -z "${NEXT_PUBLIC_SITE_URL:-}" || -z "${NEXT_PUBLIC_API_BASE:-}" || -z "${APP_ENV:-}" || -z "${CLUSTER_ISSUER:-}" || -z "${INGRESS_CLASS:-}" ]]; then
|
|
TARGET="${DEPLOY_TARGET:-${TARGET:-staging}}"
|
|
case "$TARGET" in
|
|
prod|production)
|
|
K8S_NAMESPACE="${K8S_NAMESPACE:-$PROD_NAMESPACE}"
|
|
APP_HOST="${APP_HOST:-$PROD_HOST}"
|
|
API_HOST="${API_HOST:-$PROD_HOST}"
|
|
NEXT_PUBLIC_SITE_URL="${NEXT_PUBLIC_SITE_URL:-https://$APP_HOST}"
|
|
NEXT_PUBLIC_API_BASE="${NEXT_PUBLIC_API_BASE:-https://$API_HOST/api}"
|
|
APP_ENV="${APP_ENV:-production}"
|
|
CLUSTER_ISSUER="${CLUSTER_ISSUER:-$PROD_CLUSTER_ISSUER}"
|
|
;;
|
|
test|testing)
|
|
K8S_NAMESPACE="${K8S_NAMESPACE:-$TEST_NAMESPACE}"
|
|
APP_HOST="${APP_HOST:-$TEST_HOST}"
|
|
API_HOST="${API_HOST:-$TEST_API_HOST:-$TEST_HOST}"
|
|
NEXT_PUBLIC_SITE_URL="${NEXT_PUBLIC_SITE_URL:-https://$APP_HOST}"
|
|
NEXT_PUBLIC_API_BASE="${NEXT_PUBLIC_API_BASE:-https://$API_HOST/api}"
|
|
APP_ENV="${APP_ENV:-testing}"
|
|
CLUSTER_ISSUER="${CLUSTER_ISSUER:-$TEST_CLUSTER_ISSUER:-$STAGING_CLUSTER_ISSUER}"
|
|
;;
|
|
staging|stage|stg|*)
|
|
K8S_NAMESPACE="${K8S_NAMESPACE:-$STAGING_NAMESPACE}"
|
|
APP_HOST="${APP_HOST:-$STAGING_HOST}"
|
|
API_HOST="${API_HOST:-$STAGING_HOST}"
|
|
NEXT_PUBLIC_SITE_URL="${NEXT_PUBLIC_SITE_URL:-https://$APP_HOST}"
|
|
NEXT_PUBLIC_API_BASE="${NEXT_PUBLIC_API_BASE:-https://$API_HOST/api}"
|
|
APP_ENV="${APP_ENV:-staging}"
|
|
CLUSTER_ISSUER="${CLUSTER_ISSUER:-$STAGING_CLUSTER_ISSUER}"
|
|
;;
|
|
esac
|
|
INGRESS_CLASS="${INGRESS_CLASS:-$INGRESS_CLASS}"
|
|
echo "Using target: $TARGET (namespace=$K8S_NAMESPACE host=$APP_HOST env=$APP_ENV)"
|
|
fi
|
|
|
|
: "${K8S_NAMESPACE:?K8S_NAMESPACE pitää asettaa}"
|
|
: "${APP_HOST:?APP_HOST pitää asettaa}"
|
|
: "${API_HOST:=${APP_HOST}}"
|
|
: "${NEXT_PUBLIC_SITE_URL:?NEXT_PUBLIC_SITE_URL pitää asettaa}"
|
|
: "${NEXT_PUBLIC_API_BASE:?NEXT_PUBLIC_API_BASE pitää asettaa}"
|
|
: "${APP_ENV:?APP_ENV pitää asettaa}"
|
|
: "${CLUSTER_ISSUER:?CLUSTER_ISSUER pitää asettaa}"
|
|
: "${INGRESS_CLASS:?INGRESS_CLASS pitää asettaa}"
|
|
: "${APP_REPLICAS:=${APP_REPLICAS:-2}}"
|
|
|
|
IMAGE=$(cat deploy/.last-image)
|
|
K8S_IMAGE="$IMAGE"
|
|
APP_VERSION="${APP_VERSION:-$(echo \"$IMAGE\" | awk -F: '{print $NF}')}"
|
|
|
|
export K8S_NAMESPACE APP_HOST API_HOST NEXT_PUBLIC_SITE_URL NEXT_PUBLIC_API_BASE APP_ENV CLUSTER_ISSUER INGRESS_CLASS APP_REPLICAS K8S_IMAGE APP_VERSION
|
|
|
|
if [[ -n "${DATABASE_URL:-}" ]]; then
|
|
echo "Running Prisma migrations for APP_ENV=$APP_ENV"
|
|
npx prisma migrate deploy
|
|
else
|
|
echo "DATABASE_URL not set; skipping Prisma migrations" >&2
|
|
fi
|
|
|
|
TMP_MANIFEST=$(mktemp)
|
|
envsubst < k8s/app.yaml > "$TMP_MANIFEST"
|
|
|
|
echo "Applying manifest to namespace: $K8S_NAMESPACE"
|
|
kubectl apply -f "$TMP_MANIFEST"
|
|
|
|
echo "Waiting for rollout..."
|
|
kubectl rollout status deployment/"$DEPLOYMENT_NAME" -n "$K8S_NAMESPACE"
|
|
|
|
rm "$TMP_MANIFEST"
|
|
|
|
echo "Deploy OK."
|