#!/usr/bin/env bash set -euo pipefail PROJECT_ID="${1:-}" INSTANCE="${INSTANCE_NAME:-polymarket-collector}" ZONE="${GCP_ZONE:-us-east1-b}" MACHINE_TYPE="${GCP_MACHINE_TYPE:-e2-micro}" ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" if [[ -z "$PROJECT_ID" ]]; then echo "Usage: $0 GOOGLE_CLOUD_PROJECT_ID" >&2 exit 2 fi if ! command -v gcloud >/dev/null 2>&1; then echo "gcloud is required. Run this script from Google Cloud Shell or install the Google Cloud CLI." >&2 exit 2 fi if [[ ! -f "$ROOT_DIR/pyproject.toml" ]]; then echo "Project files not found next to this script." >&2 exit 2 fi ACTIVE_ACCOUNT="$(gcloud auth list --filter=status:ACTIVE --format='value(account)' | head -1)" if [[ -z "$ACTIVE_ACCOUNT" ]]; then echo "No active Google Cloud account. Run: gcloud auth login" >&2 exit 2 fi gcloud config set project "$PROJECT_ID" >/dev/null gcloud services enable compute.googleapis.com --project "$PROJECT_ID" if ! gcloud compute instances describe "$INSTANCE" --zone "$ZONE" \ --project "$PROJECT_ID" >/dev/null 2>&1; then gcloud compute instances create "$INSTANCE" \ --project "$PROJECT_ID" \ --zone "$ZONE" \ --machine-type "$MACHINE_TYPE" \ --provisioning-model STANDARD \ --network-tier STANDARD \ --image-family ubuntu-2404-lts-amd64 \ --image-project ubuntu-os-cloud \ --boot-disk-type pd-standard \ --boot-disk-size 30GB \ --metadata enable-oslogin=TRUE \ --labels app=polymarket-collector else echo "Instance $INSTANCE already exists; updating the collector." fi ARCHIVE="$(mktemp --suffix=.tar.gz)" trap 'rm -f "$ARCHIVE"' EXIT tar -czf "$ARCHIVE" \ --exclude=.git --exclude=.venv --exclude=data --exclude='*.egg-info' \ -C "$ROOT_DIR" . gcloud compute scp "$ARCHIVE" "$INSTANCE:/tmp/polymarket-collector.tar.gz" \ --zone "$ZONE" --project "$PROJECT_ID" gcloud compute ssh "$INSTANCE" --zone "$ZONE" --project "$PROJECT_ID" \ --command 'workdir=$(mktemp -d); tar -xzf /tmp/polymarket-collector.tar.gz -C "$workdir"; sudo bash "$workdir/scripts/install_vps.sh" "$workdir"' echo echo "Deployment complete." echo "Connect: gcloud compute ssh $INSTANCE --zone $ZONE --project $PROJECT_ID" echo "The collector uses public data only and has no Polymarket trading key."