.PHONY: all dev dev-frontend dev-backend build build-frontend build-backend clean test lint sqlc # Variables APP_NAME := imc FRONTEND_DIR := frontend BACKEND_DIR := backend BUILD_DIR := build GOBIN := $(shell go env GOPATH)/bin # Default target all: build # Generate Go code from SQL queries using sqlc # Requires: go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest sqlc: @echo "Generating Go code from SQL queries..." cd $(BACKEND_DIR) && $(GOBIN)/sqlc generate @echo "SQL code generated successfully" # Build everything (frontend + backend + embed) build: build-frontend build-backend # Build frontend only build-frontend: @echo "Building frontend..." cd $(FRONTEND_DIR) && bun install --frozen-lockfile cd $(FRONTEND_DIR) && bun run build @echo "Frontend built successfully" # Build backend only (copies frontend build into embed directory) build-backend: sqlc build-frontend @echo "Copying frontend to embed directory..." rm -rf $(BACKEND_DIR)/cmd/server/embed cp -r $(FRONTEND_DIR)/build $(BACKEND_DIR)/cmd/server/embed @echo "Building backend..." cd $(BACKEND_DIR) && go mod tidy cd $(BACKEND_DIR) && go build -ldflags "-s -w" -o ../$(BUILD_DIR)/$(APP_NAME) ./cmd/server @echo "Backend built successfully" # Development targets dev: @echo "Starting backend dev server (hot-reload enabled)..." cd $(BACKEND_DIR) && USE_EMBEDDED=false $(GOBIN)/air & @echo "Starting frontend dev server..." cd $(FRONTEND_DIR) && bun run dev dev-frontend: @echo "Starting frontend dev server..." cd $(FRONTEND_DIR) && bun run dev dev-backend: @echo "Starting backend dev server (hot-reload enabled)..." cd $(BACKEND_DIR) && USE_EMBEDDED=false $(GOBIN)/air # Clean build artifacts clean: @echo "Cleaning..." rm -rf $(BUILD_DIR) rm -rf $(FRONTEND_DIR)/build rm -rf $(FRONTEND_DIR)/.svelte-kit rm -rf $(BACKEND_DIR)/cmd/server/embed cd $(BACKEND_DIR) && go clean @echo "Cleaned successfully" # Test test: cd $(BACKEND_DIR) && go test ./... # Lint lint: cd $(BACKEND_DIR) && go vet ./... # Help help: @echo "Available targets:" @echo " all - Build frontend and backend (default)" @echo " build - Build frontend and backend" @echo " build-frontend - Build frontend only" @echo " build-backend - Build backend only (runs sqlc first)" @echo " sqlc - Generate Go code from SQL queries" @echo " dev - Start both frontend and backend with hot-reload" @echo " dev-frontend - Start frontend dev server" @echo " dev-backend - Start backend dev server (requires: go install github.com/air-verse/air@latest)" @echo " sqlc - Generate Go code from SQL queries (requires: go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest)" @echo " clean - Remove build artifacts" @echo " test - Run backend tests" @echo " lint - Run Go vet" @echo " help - Show this help"