236 lines
6.1 KiB
Makefile
236 lines
6.1 KiB
Makefile
# Go Microservices Makefile
|
|
|
|
# Variables
|
|
PROTO_DIR := proto
|
|
SERVICES := auth-service user-service post-service
|
|
API_GATEWAY := api-gateway
|
|
DOCKER_COMPOSE := docker-compose.yml
|
|
|
|
# Go variables
|
|
GOOS := $(shell go env GOOS)
|
|
GOARCH := $(shell go env GOARCH)
|
|
GO_VERSION := 1.21
|
|
|
|
# Proto compilation
|
|
.PHONY: proto
|
|
proto:
|
|
@echo "Generating protobuf files..."
|
|
@for service in $(SERVICES); do \
|
|
echo "Generating proto for $$service..."; \
|
|
mkdir -p services/$$service/proto; \
|
|
protoc --go_out=services/$$service/proto --go_opt=paths=source_relative \
|
|
--go-grpc_out=services/$$service/proto --go-grpc_opt=paths=source_relative \
|
|
--proto_path=$(PROTO_DIR) \
|
|
$(PROTO_DIR)/*.proto $(PROTO_DIR)/common/*.proto; \
|
|
done
|
|
@echo "Protobuf generation completed!"
|
|
|
|
# Build individual services
|
|
.PHONY: build-auth
|
|
build-auth:
|
|
@echo "Building auth-service..."
|
|
cd services/auth-service && go build -o bin/auth-service ./cmd/main.go
|
|
|
|
.PHONY: build-user
|
|
build-user:
|
|
@echo "Building user-service..."
|
|
cd services/user-service && go build -o bin/user-service ./cmd/main.go
|
|
|
|
.PHONY: build-post
|
|
build-post:
|
|
@echo "Building post-service..."
|
|
cd services/post-service && go build -o bin/post-service ./cmd/main.go
|
|
|
|
.PHONY: build-gateway
|
|
build-gateway:
|
|
@echo "Building api-gateway..."
|
|
cd api-gateway && go build -o bin/api-gateway ./cmd/main.go
|
|
|
|
# Build all services
|
|
.PHONY: build
|
|
build: build-auth build-user build-post build-gateway
|
|
@echo "All services built successfully!"
|
|
|
|
# Run individual services locally
|
|
.PHONY: run-auth
|
|
run-auth:
|
|
cd services/auth-service && go run ./cmd/main.go
|
|
|
|
.PHONY: run-user
|
|
run-user:
|
|
cd services/user-service && go run ./cmd/main.go
|
|
|
|
.PHONY: run-post
|
|
run-post:
|
|
cd services/post-service && go run ./cmd/main.go
|
|
|
|
.PHONY: run-gateway
|
|
run-gateway:
|
|
cd api-gateway && go run ./cmd/main.go
|
|
|
|
# Docker operations
|
|
.PHONY: docker-build
|
|
docker-build:
|
|
@echo "Building Docker images..."
|
|
docker-compose build
|
|
|
|
.PHONY: docker-up
|
|
docker-up:
|
|
@echo "Starting services with Docker Compose..."
|
|
docker-compose up -d
|
|
|
|
.PHONY: docker-down
|
|
docker-down:
|
|
@echo "Stopping services..."
|
|
docker-compose down
|
|
|
|
.PHONY: docker-logs
|
|
docker-logs:
|
|
docker-compose logs -f
|
|
|
|
.PHONY: docker-clean
|
|
docker-clean:
|
|
@echo "Cleaning up Docker resources..."
|
|
docker-compose down -v
|
|
docker system prune -f
|
|
|
|
# Development operations
|
|
.PHONY: deps
|
|
deps:
|
|
@echo "Installing dependencies for all services..."
|
|
@for service in $(SERVICES); do \
|
|
echo "Installing deps for $$service..."; \
|
|
cd services/$$service && go mod tidy && go mod download; \
|
|
cd ../..; \
|
|
done
|
|
cd $(API_GATEWAY) && go mod tidy && go mod download
|
|
|
|
.PHONY: test
|
|
test:
|
|
@echo "Running tests for all services..."
|
|
@for service in $(SERVICES); do \
|
|
echo "Testing $$service..."; \
|
|
cd services/$$service && go test ./... -v; \
|
|
cd ../..; \
|
|
done
|
|
cd $(API_GATEWAY) && go test ./... -v
|
|
|
|
.PHONY: test-coverage
|
|
test-coverage:
|
|
@echo "Running tests with coverage..."
|
|
@for service in $(SERVICES); do \
|
|
echo "Testing $$service with coverage..."; \
|
|
cd services/$$service && go test ./... -coverprofile=coverage.out -v; \
|
|
go tool cover -html=coverage.out -o coverage.html; \
|
|
cd ../..; \
|
|
done
|
|
|
|
.PHONY: lint
|
|
lint:
|
|
@echo "Running linter for all services..."
|
|
@for service in $(SERVICES); do \
|
|
echo "Linting $$service..."; \
|
|
cd services/$$service && golangci-lint run; \
|
|
cd ../..; \
|
|
done
|
|
cd $(API_GATEWAY) && golangci-lint run
|
|
|
|
.PHONY: format
|
|
format:
|
|
@echo "Formatting code..."
|
|
@for service in $(SERVICES); do \
|
|
echo "Formatting $$service..."; \
|
|
cd services/$$service && gofmt -w .; \
|
|
cd ../..; \
|
|
done
|
|
cd $(API_GATEWAY) && gofmt -w .
|
|
|
|
# Database operations
|
|
.PHONY: db-up
|
|
db-up:
|
|
@echo "Starting database..."
|
|
docker-compose up -d postgres redis
|
|
|
|
.PHONY: db-down
|
|
db-down:
|
|
@echo "Stopping database..."
|
|
docker-compose stop postgres redis
|
|
|
|
.PHONY: db-migrate
|
|
db-migrate:
|
|
@echo "Running database migrations..."
|
|
# Add migration commands here when implemented
|
|
|
|
# Monitoring
|
|
.PHONY: monitoring-up
|
|
monitoring-up:
|
|
@echo "Starting monitoring stack..."
|
|
docker-compose up -d prometheus grafana jaeger
|
|
|
|
.PHONY: monitoring-down
|
|
monitoring-down:
|
|
@echo "Stopping monitoring stack..."
|
|
docker-compose stop prometheus grafana jaeger
|
|
|
|
# Development workflow
|
|
.PHONY: dev-setup
|
|
dev-setup: deps proto
|
|
@echo "Development environment setup complete!"
|
|
|
|
.PHONY: dev-start
|
|
dev-start: db-up
|
|
@echo "Starting development environment..."
|
|
@echo "Database is running. Start your services manually or use make run-<service>"
|
|
|
|
.PHONY: dev-stop
|
|
dev-stop: docker-down
|
|
@echo "Development environment stopped."
|
|
|
|
# Production deployment
|
|
.PHONY: deploy
|
|
deploy: proto build docker-build docker-up
|
|
@echo "Deployment completed!"
|
|
|
|
# Clean up
|
|
.PHONY: clean
|
|
clean:
|
|
@echo "Cleaning up build artifacts..."
|
|
@for service in $(SERVICES); do \
|
|
rm -rf services/$$service/bin; \
|
|
rm -rf services/$$service/coverage.*; \
|
|
done
|
|
rm -rf $(API_GATEWAY)/bin
|
|
rm -rf $(API_GATEWAY)/coverage.*
|
|
|
|
# Help
|
|
.PHONY: help
|
|
help:
|
|
@echo "Available commands:"
|
|
@echo " proto - Generate protobuf files"
|
|
@echo " build - Build all services"
|
|
@echo " build-<service> - Build specific service (auth, user, post, gateway)"
|
|
@echo " run-<service> - Run specific service locally"
|
|
@echo " docker-build - Build Docker images"
|
|
@echo " docker-up - Start all services with Docker"
|
|
@echo " docker-down - Stop all services"
|
|
@echo " docker-logs - View service logs"
|
|
@echo " docker-clean - Clean up Docker resources"
|
|
@echo " deps - Install dependencies"
|
|
@echo " test - Run tests"
|
|
@echo " test-coverage - Run tests with coverage"
|
|
@echo " lint - Run linter"
|
|
@echo " format - Format code"
|
|
@echo " db-up - Start database services"
|
|
@echo " db-down - Stop database services"
|
|
@echo " monitoring-up - Start monitoring stack"
|
|
@echo " monitoring-down - Stop monitoring stack"
|
|
@echo " dev-setup - Setup development environment"
|
|
@echo " dev-start - Start development environment"
|
|
@echo " dev-stop - Stop development environment"
|
|
@echo " deploy - Deploy to production"
|
|
@echo " clean - Clean up build artifacts"
|
|
@echo " help - Show this help message"
|
|
|
|
# Default target
|
|
.DEFAULT_GOAL := help
|