#!/usr/bin/env bash set -euo pipefail NAMESPACE="stonks-oracle" REPO_DIR="$HOME/sources/celesrenata/stonks-oracle" CHART_DIR="$REPO_DIR/infra/helm/stonks-oracle" MIGRATIONS_DIR="$REPO_DIR/infra/migrations" KUBE_DIR="$HOME/sources/kube/stonks-oracle" # --- Secrets --- # All secrets are read from ~/sources/kube/stonks-oracle/ on gremlin-1. # This directory is NOT a git repo — secrets stay local to the deploy host. # # Required files: # ~/sources/kube/stonks-oracle/polygon.io.key # ~/sources/kube/stonks-oracle/alpaca.key # ~/sources/kube/stonks-oracle/alpaca.secret # ~/sources/kube/stonks-oracle/alpaca.url # /run/secrets/github_token _read_secret() { local file="$1" local default="${2:-}" if [ -f "$file" ]; then cat "$file" | tr -d '[:space:]' elif [ -n "$default" ]; then echo "$default" else echo "ERROR: Secret file not found: $file" >&2 exit 1 fi } GHCR_TOKEN=$(_read_secret /run/secrets/github_token) PG_PASSWORD='St0nks0racl3!' REDIS_PASSWORD='PSCh4ng3me!' MINIO_ACCESS_KEY="AKIA6V7J3N9B5P0D2YQH" MINIO_SECRET_KEY='8fG3!v2rJ7$wN@9mLpQ6zXbC4tKdPqW1' POLYGON_API_KEY=$(_read_secret "$KUBE_DIR/polygon.io.key") ALPACA_API_KEY=$(_read_secret "$KUBE_DIR/alpaca.key") ALPACA_API_SECRET=$(_read_secret "$KUBE_DIR/alpaca.secret") ALPACA_BASE_URL=$(_read_secret "$KUBE_DIR/alpaca.url" "https://paper-api.alpaca.markets") GMAIL_APP_PASSWORD=$(_read_secret "$KUBE_DIR/gmail.app" "") echo "=== Stonks Oracle Deployment ===" echo "Namespace: $NAMESPACE" echo "Chart: $CHART_DIR" echo "Secrets: $KUBE_DIR" # --- 0. Pull latest code --- echo "[0/5] Pulling latest code..." git -C "$REPO_DIR" pull --ff-only || echo "WARNING: git pull failed — using existing code" # --- 1. Ensure namespace exists with correct labels --- echo "[1/5] Ensuring namespace $NAMESPACE exists..." if ! kubectl get namespace "$NAMESPACE" >/dev/null 2>&1; then kubectl create namespace "$NAMESPACE" fi kubectl label namespace "$NAMESPACE" app.kubernetes.io/managed-by=Helm --overwrite kubectl annotate namespace "$NAMESPACE" meta.helm.sh/release-name=stonks-oracle meta.helm.sh/release-namespace=stonks-oracle --overwrite # --- 2. Create PostgreSQL user and database --- echo "[2/5] Setting up PostgreSQL database and user..." kubectl exec -i -n postgresql-service postgresql-1 -c postgres -- psql -U postgres < $(basename "$f")" kubectl exec -i -n postgresql-service postgresql-1 -c postgres -- psql -U postgres -d stonks < "$f" 2>&1 | grep -v "already exists" || true done # Grant permissions kubectl exec -i -n postgresql-service postgresql-1 -c postgres -- psql -U postgres -d stonks <