# Docker image and container configuration IMAGE_NAME = api-comparator CONTAINER_NAME = api-comparator-app PORT = 5001 # Colors for terminal output CYAN = \033[0;36m RESET = \033[0m .PHONY: help build run stop remove clean logs restart ps test lint coverage # Display help information help: @echo "$(CYAN)Available commands:$(RESET)" @echo " make build - Build Docker image" @echo " make run - Run container (builds if image doesn't exist)" @echo " make stop - Stop running container" @echo " make remove - Remove container" @echo " make clean - Remove container and image" @echo " make logs - View container logs" @echo " make restart - Restart container" @echo " make ps - Show container status" @echo " make test - Run all tests" @echo " make coverage - Run tests with coverage report" # Build Docker image build: @echo "$(CYAN)Building Docker image...$(RESET)" docker build -t $(IMAGE_NAME) . # Run container run: @echo "$(CYAN)Checking for existing container...$(RESET)" @if [ "$$(docker ps -aq -f name=$(CONTAINER_NAME))" ]; then \ echo "$(CYAN)Removing existing container...$(RESET)"; \ docker rm -f $(CONTAINER_NAME) || true; \ fi @if [ "$$(docker images -q $(IMAGE_NAME) 2> /dev/null)" = "" ]; then \ echo "$(CYAN)Image not found, building first...$(RESET)"; \ make build; \ fi @echo "$(CYAN)Starting new container...$(RESET)" docker run -d \ --name $(CONTAINER_NAME) \ -p $(PORT):$(PORT) \ --restart unless-stopped \ $(IMAGE_NAME) @echo "$(CYAN)Container started! Access the application at http://localhost:$(PORT)$(RESET)" # Stop container stop: @echo "$(CYAN)Stopping container...$(RESET)" @docker stop $(CONTAINER_NAME) 2>/dev/null || true # Remove container remove: stop @echo "$(CYAN)Removing container...$(RESET)" @docker rm $(CONTAINER_NAME) 2>/dev/null || true # Clean everything (container and image) clean: remove @echo "$(CYAN)Removing image...$(RESET)" @docker rmi $(IMAGE_NAME) 2>/dev/null || true # View container logs logs: @echo "$(CYAN)Showing container logs...$(RESET)" @docker logs -f $(CONTAINER_NAME) # Restart container restart: stop run # Show container status ps: @echo "$(CYAN)Container status:$(RESET)" @docker ps -a --filter name=$(CONTAINER_NAME) # Run tests test: @echo "$(CYAN)Running tests...$(RESET)" pytest # Run tests with coverage coverage: @echo "$(CYAN)Running tests with coverage...$(RESET)" pytest --cov=. --cov-report=term-missing