@@ -55,7 +55,9 @@ PG_EXTENSION_CONTROL = docker/postgresql/$(EXTENSION).control
5555.PHONY: postgres-check postgres-build postgres-install postgres-clean postgres-test \
5656 postgres-docker-build postgres-docker-build-asan postgres-docker-run postgres-docker-run-asan postgres-docker-stop postgres-docker-rebuild \
5757 postgres-docker-debug-build postgres-docker-debug-run postgres-docker-debug-rebuild \
58- postgres-docker-shell postgres-dev-rebuild postgres-help unittest-pg
58+ postgres-docker-shell postgres-dev-rebuild postgres-help unittest-pg \
59+ postgres-supabase-build postgres-supabase-rebuild postgres-supabase-run-smoke-test \
60+ postgres-docker-run-smoke-test
5961
6062# Check if PostgreSQL is available
6163postgres-check:
@@ -119,6 +121,18 @@ postgres-test: postgres-install
119121DOCKER_IMAGE = sqliteai/sqlite-sync-pg
120122DOCKER_TAG ?= latest
121123DOCKER_BUILD_ARGS ?=
124+ SUPABASE_CLI_IMAGE ?= $(shell docker ps --format '{{.Image}} {{.Names}}' | awk '/supabase_db/ {print $$1; exit}')
125+ SUPABASE_CLI_DOCKERFILE ?= docker/postgresql/Dockerfile.supabase
126+ SUPABASE_WORKDIR ?=
127+ SUPABASE_WORKDIR_ARG = $(if $(SUPABASE_WORKDIR),--workdir $(SUPABASE_WORKDIR),)
128+ SUPABASE_DB_HOST ?= 127.0.0.1
129+ SUPABASE_DB_PORT ?= 54322
130+ SUPABASE_DB_PASSWORD ?= postgres
131+ PG_DOCKER_DB_HOST ?= localhost
132+ PG_DOCKER_DB_PORT ?= 5432
133+ PG_DOCKER_DB_NAME ?= cloudsync_test
134+ PG_DOCKER_DB_USER ?= postgres
135+ PG_DOCKER_DB_PASSWORD ?= postgres
122136
123137# Build Docker image with pre-installed extension
124138postgres-docker-build:
@@ -220,6 +234,58 @@ postgres-docker-shell:
220234 @echo "Opening shell in PostgreSQL container..."
221235 docker exec -it cloudsync-postgres bash
222236
237+ # Build CloudSync into the Supabase CLI postgres image tag
238+ postgres-supabase-build:
239+ @echo "Building CloudSync image for Supabase CLI..."
240+ @if [ -z "$(SUPABASE_CLI_IMAGE)" ]; then \
241+ echo "Error: Supabase CLI postgres image not found."; \
242+ echo "Run 'supabase start' first, or set SUPABASE_CLI_IMAGE=public.ecr.aws/supabase/postgres:<tag>."; \
243+ exit 1; \
244+ fi
245+ @tmp_dockerfile="$$(mktemp /tmp/cloudsync-supabase-cli.XXXXXX)"; \
246+ src_dockerfile="$(SUPABASE_CLI_DOCKERFILE)"; \
247+ if [ ! -f "$$src_dockerfile" ]; then \
248+ if [ -f "docker/postgresql/Dockerfile.supabase" ]; then \
249+ src_dockerfile="docker/postgresql/Dockerfile.supabase"; \
250+ else \
251+ echo "Error: Supabase Dockerfile not found (expected $$src_dockerfile)."; \
252+ rm -f "$$tmp_dockerfile"; \
253+ exit 1; \
254+ fi; \
255+ fi; \
256+ sed -e "s|^FROM supabase/postgres:[^ ]*|FROM $(SUPABASE_CLI_IMAGE)|" \
257+ -e "s|^FROM public.ecr.aws/supabase/postgres:[^ ]*|FROM $(SUPABASE_CLI_IMAGE)|" \
258+ "$$src_dockerfile" > "$$tmp_dockerfile"; \
259+ if [ ! -s "$$tmp_dockerfile" ]; then \
260+ echo "Error: Generated Dockerfile is empty."; \
261+ rm -f "$$tmp_dockerfile"; \
262+ exit 1; \
263+ fi; \
264+ echo "Using base image: $(SUPABASE_CLI_IMAGE)"; \
265+ docker build -f "$$tmp_dockerfile" -t "$(SUPABASE_CLI_IMAGE)" .; \
266+ rm -f "$$tmp_dockerfile"; \
267+ echo "Build complete: $(SUPABASE_CLI_IMAGE)"
268+
269+ # Rebuild CloudSync image and restart Supabase CLI stack
270+ postgres-supabase-rebuild: postgres-supabase-build
271+ @echo "Restarting Supabase CLI stack..."
272+ @command -v supabase >/dev/null 2>&1 || (echo "Error: supabase CLI not found in PATH." && exit 1)
273+ @supabase stop $(SUPABASE_WORKDIR_ARG)
274+ @supabase start $(SUPABASE_WORKDIR_ARG)
275+ @echo "Supabase CLI stack restarted."
276+
277+ # Run smoke test against Supabase CLI local database
278+ postgres-supabase-run-smoke-test:
279+ @echo "Running Supabase CLI smoke test..."
280+ @PGPASSWORD="$(SUPABASE_DB_PASSWORD)" psql postgresql://supabase_admin@$(SUPABASE_DB_HOST):$(SUPABASE_DB_PORT)/postgres -f docker/postgresql/smoke_test.sql
281+ @echo "Smoke test completed."
282+
283+ # Run smoke test against Docker standalone database
284+ postgres-docker-run-smoke-test:
285+ @echo "Running Docker smoke test..."
286+ @PGPASSWORD="$(PG_DOCKER_DB_PASSWORD)" psql postgresql://$(PG_DOCKER_DB_USER)@$(PG_DOCKER_DB_HOST):$(PG_DOCKER_DB_PORT)/$(PG_DOCKER_DB_NAME) -f docker/postgresql/smoke_test.sql
287+ @echo "Smoke test completed."
288+
223289# ============================================================================
224290# Development Workflow Targets
225291# ============================================================================
@@ -259,6 +325,10 @@ postgres-help:
259325 @echo " postgres-docker-stop - Stop PostgreSQL container"
260326 @echo " postgres-docker-rebuild - Rebuild image and restart container"
261327 @echo " postgres-docker-shell - Open bash shell in running container"
328+ @echo " postgres-supabase-build - Build CloudSync into Supabase CLI postgres image"
329+ @echo " postgres-supabase-rebuild - Build CloudSync image and restart Supabase CLI stack"
330+ @echo " postgres-supabase-run-smoke-test - Run smoke test against Supabase CLI database"
331+ @echo " postgres-docker-run-smoke-test - Run smoke test against Docker database"
262332 @echo ""
263333 @echo "Development:"
264334 @echo " postgres-dev-rebuild - Rebuild extension in running container (fast)"
0 commit comments