#!/usr/bin/env bash set -euo pipefail : "${SPANNER_PROJECT:?}" : "${SPANNER_INSTANCE:?}" : "${SPANNER_DATABASE:?}" # 1) Wait for emulator gRPC port (inside compose network it's "spanner:9010") for _ in $(seq 1 60); do (echo >/dev/tcp/spanner/9010) >/dev/null 2>&1 && break sleep 1 done # 2) Point gcloud to the emulator (disable real IAM) export SPANNER_EMULATOR_HOST=spanner:9010 gcloud config set auth/disable_credentials true >/dev/null gcloud config set core/project "${SPANNER_PROJECT}" >/dev/null gcloud config set api_endpoint_overrides/spanner http://spanner:9020/ >/dev/null # 3) Create instance & database (idempotent) gcloud spanner instances create "${SPANNER_INSTANCE}" \ --config=emulator-config --nodes=1 --description="Dev" >/dev/null 2>&1 || true gcloud spanner databases create "${SPANNER_DATABASE}" \ --instance="${SPANNER_INSTANCE}" >/dev/null 2>&1 || true # 4) Apply DDL gcloud spanner databases ddl update "${SPANNER_DATABASE}" \ --instance="${SPANNER_INSTANCE}" \ --ddl-file="/work/ddl/schema.sql" >/dev/null