11APP_NAME := go-server
22DOCKER_COMPOSE := docker compose -f docker-compose.dev.yaml
3+ REGISTRY_CONTAINER := local-registry
4+ REGISTRY_PORT := 5128
5+ REGISTRY := host.docker.internal:$(REGISTRY_PORT )
36SERVICE := go-server
47
8+ # Helper: pull or cache image in registry if missing
9+ define ensure_image
10+ @IMAGE=$(1 ) ; \
11+ if ! docker manifest inspect $(REGISTRY ) /$$IMAGE >/dev/null 2>&1; then \
12+ echo "📥 Pulling $$IMAGE from internet..."; \
13+ docker pull $$IMAGE; \
14+ echo "📦 Tagging & pushing to local registry..."; \
15+ docker tag $$IMAGE $(REGISTRY ) /$$IMAGE; \
16+ docker push $(REGISTRY ) /$$IMAGE; \
17+ else \
18+ echo "✅ Image already cached locally: $(REGISTRY ) /$$IMAGE"; \
19+ fi
20+ endef
21+
22+ # Utility function to check container existence
23+ define container_exists
24+ @docker ps -a --format '{{.Names}}' | grep -q "^$(1 ) $$"
25+ endef
26+
27+ # Utility function to check running status
28+ define container_running
29+ @docker ps --format '{{.Names}}' | grep -q "^$(1 ) $$"
30+ endef
31+
532.PHONY : all build run docker-build up down logs restart clean \
6- exec exec-bash ps top start stop status rebuild
33+ exec exec-bash ps top start stop status rebuild rm-all registry up-infra
734
835all : build
936
@@ -14,13 +41,52 @@ build:
1441run :
1542 ./$(APP_NAME )
1643
17- # Compose build only
44+ # Push images to local registry after build
45+ push-images :
46+ @echo " 📤 Tagging and pushing images to local registry..."
47+ @docker tag rank-nsf-linker-go-server:latest $(REGISTRY ) /go-server:latest
48+ @docker tag rank-nsf-linker-web:latest $(REGISTRY ) /web-ui:latest
49+ @docker push $(REGISTRY ) /go-server:latest
50+ @docker push $(REGISTRY ) /web-ui:latest
51+ @echo " ✅ Images pushed to $( REGISTRY) "
52+
53+ # Registry Setup
54+ registry :
55+ @if docker ps --format ' {{.Names}}' | grep -q $(REGISTRY_CONTAINER ) ; then \
56+ echo " ✅ Local registry already running on :$( REGISTRY_PORT) " ; \
57+ else \
58+ echo " 🚀 Starting local Docker registry on :$( REGISTRY_PORT) ..." ; \
59+ docker run -d --restart=always \
60+ -p $(REGISTRY_PORT ) :5000 \
61+ --name $(REGISTRY_CONTAINER ) registry:2; \
62+ fi
63+
64+ # Infrastructure setup (Postgres, ES, Qdrant)
65+ up-infra :
66+ @if ! docker ps --format ' {{.Names}}' | grep -q " pg17-local" ; then \
67+ echo " 📦 Starting PostgreSQL, Elasticsearch, and Qdrant..." ; \
68+ $(DOCKER_COMPOSE ) up -d postgres elasticsearch qdrant; \
69+ else \
70+ echo " ✅ Infrastructure already running." ; \
71+ fi
72+
73+ infra-images :
74+ $(call ensure_image,cgr.dev/chainguard/postgres)
75+ $(call ensure_image,docker.elastic.co/elasticsearch/elasticsearch:8.13.0)
76+ $(call ensure_image,qdrant/qdrant:v1.3.0)
77+
78+ # App lifecycle
1879docker-build :
1980 $(DOCKER_COMPOSE ) build
2081
2182# Spin up services in background
22- up :
23- $(DOCKER_COMPOSE ) up -d
83+ up : registry up-infra
84+ @if ! docker ps --format ' {{.Names}}' | grep -q " $( SERVICE) " ; then \
85+ echo " 🚀 Launching main services (web + go-server)..." ; \
86+ $(DOCKER_COMPOSE ) up -d go-server web; \
87+ else \
88+ echo " ✅ Main services already running." ; \
89+ fi
2490
2591# Bring down all containers, networks
2692down :
@@ -78,11 +144,17 @@ status:
78144
79145# Full rebuild with clean
80146rebuild :
81- $(DOCKER_COMPOSE ) down -v --remove-orphans
82- $(DOCKER_COMPOSE ) build --no-cache
83- $(DOCKER_COMPOSE ) up -d
84- make rm-all && make docker-build && make up && make logs-go-server
147+ make rm-all
148+ make registry
149+ make infra-images
150+ make docker-build
151+ make push-images
152+ make up
153+ make logs-go-server
85154
86155# Remove all
87156rm-all :
157+ $(DOCKER_COMPOSE ) down -v --remove-orphans
158+
159+ rm-all-hard :
88160 $(DOCKER_COMPOSE ) down --rmi all -v --remove-orphans
0 commit comments