#!/usr/bin/env bash set -euo pipefail : "${COOLIFY_STAGING_SSH_HOST:?COOLIFY_STAGING_SSH_HOST is required}" : "${COOLIFY_STAGING_WEB_RESOURCE_UUID:?COOLIFY_STAGING_WEB_RESOURCE_UUID is required}" : "${COOLIFY_STAGING_SSH_KEY:?COOLIFY_STAGING_SSH_KEY is required}" SSH_USER="${COOLIFY_STAGING_SSH_USER:-root}" KEY_FILE="$(mktemp)" KNOWN_HOSTS_FILE="$(mktemp)" cleanup() { rm -f "$KEY_FILE" "$KNOWN_HOSTS_FILE" } trap cleanup EXIT printf "%s\n" "$COOLIFY_STAGING_SSH_KEY" > "$KEY_FILE" chmod 600 "$KEY_FILE" if command -v ssh-keyscan >/dev/null 2>&1; then ssh-keyscan -H "$COOLIFY_STAGING_SSH_HOST" > "$KNOWN_HOSTS_FILE" 2>/dev/null || true fi SSH_STRICT_OPTIONS=(-o BatchMode=yes -o ConnectTimeout=10 -o UserKnownHostsFile="$KNOWN_HOSTS_FILE") if [[ -s "$KNOWN_HOSTS_FILE" ]]; then SSH_STRICT_OPTIONS+=(-o StrictHostKeyChecking=yes) else SSH_STRICT_OPTIONS+=(-o StrictHostKeyChecking=accept-new) fi ssh -i "$KEY_FILE" "${SSH_STRICT_OPTIONS[@]}" "${SSH_USER}@${COOLIFY_STAGING_SSH_HOST}" \ 'bash -s' -- "$COOLIFY_STAGING_WEB_RESOURCE_UUID" <<'REMOTE' set -euo pipefail RESOURCE_UUID="$1" CONTAINER_NAME="$(docker ps --format '{{.Names}}' | grep -E "^${RESOURCE_UUID}-" | head -n 1 || true)" if [[ -z "$CONTAINER_NAME" ]]; then echo "No running Coolify web container found for resource ${RESOURCE_UUID}" >&2 exit 1 fi docker exec "$CONTAINER_NAME" sh -lc 'cd /myapp && pnpm --filter @toolctrl/db prisma:migrate:status' REMOTE