Files
drb-frontend/makefile
Logan Cusano 0b86cd49cf
All checks were successful
release-image / release-image (push) Successful in 10m59s
Update API to env var
2025-05-26 17:44:23 -04:00

98 lines
3.7 KiB
Makefile

.PHONY: install build start dev clean docker-build docker-dev docker-prod docker-stop docker-rebuild-dev docker-rebuild-prod
# Define variables
APP_NAME := drb-frontend
DOCKER_IMAGE_NAME := $(APP_NAME):latest
DOCKER_DEV_CONTAINER_NAME := $(APP_NAME)-dev-container
DOCKER_PROD_CONTAINER_NAME := $(APP_NAME)-prod-container
# --- Local Development and Build ---
# Default target
all: dev
# Install Node.js dependencies
install:
@echo "➡️ Installing Node.js dependencies..."
npm install
# Build the Next.js application for production
build: install
@echo "➡️ Building Next.js application for production..."
npm run build
# Start the Next.js application in production mode (locally)
start: build
@echo "➡️ Starting Next.js application in production mode locally..."
npm start
# Start the Next.js application in development mode (locally)
dev: install
@echo "➡️ Starting Next.js application in development mode locally (Fast Refresh enabled)..."
npm run dev
# Clean up build artifacts and node_modules
clean:
@echo "➡️ Cleaning up build artifacts and node_modules..."
rm -rf .next out node_modules
@echo "✅ Clean up complete."
# --- Docker Operations ---
# Build the Docker image
docker-build:
@echo "🐳 Building Docker image: $(DOCKER_IMAGE_NAME)..."
docker build -t $(DOCKER_IMAGE_NAME) .
@echo "✅ Docker image built successfully."
# Run the Docker container in development mode
docker-dev: #docker-build
@echo "🚀 Running Docker container in DEVELOPMENT mode: $(DOCKER_DEV_CONTAINER_NAME)..."
@echo " (Volume mounted for Fast Refresh: $(PWD):/app)"
# Ensure node_modules is also mounted, as it's typically excluded from the main volume mount
# to avoid issues with host OS vs. container OS binary compatibility.
# The bind mount for node_modules effectively hides the one from the image.
docker run \
-it \
--rm \
--name $(DOCKER_DEV_CONTAINER_NAME) \
-p 3000:3000 \
-e NEXT_PUBLIC_DRB_BASE_API_URL=$(NEXT_PUBLIC_DRB_BASE_API_URL) \
-v "$(PWD):/app" \
-v "/app/node_modules" \
-e NODE_ENV=development \
$(DOCKER_IMAGE_NAME)
@echo "✨ Docker container started in development. Access at http://localhost:3000"
# Run the Docker container in production mode
docker-prod: docker-build docker-stop-prod
@echo "🚀 Running Docker container in PRODUCTION mode: $(DOCKER_PROD_CONTAINER_NAME)..."
docker run -d --rm --name $(DOCKER_PROD_CONTAINER_NAME) -p 3000:3000 $(DOCKER_IMAGE_NAME)
@echo "✅ Docker container started in production. Access at http://localhost:3000"
# Stop and remove the DEVELOPMENT Docker container
docker-stop-dev:
@echo "🛑 Stopping and removing DEVELOPMENT Docker container: $(DOCKER_DEV_CONTAINER_NAME)..."
-docker stop $(DOCKER_DEV_CONTAINER_NAME) 2>/dev/null || true
-docker rm $(DOCKER_DEV_CONTAINER_NAME) 2>/dev/null || true
@echo "✅ Development Docker container stopped and removed (if it was running)."
# Stop and remove the PRODUCTION Docker container
docker-stop-prod:
@echo "🛑 Stopping and removing PRODUCTION Docker container: $(DOCKER_PROD_CONTAINER_NAME)..."
-docker stop $(DOCKER_PROD_CONTAINER_NAME) 2>/dev/null || true
-docker rm $(DOCKER_PROD_CONTAINER_NAME) 2>/dev/null || true
@echo "✅ Production Docker container stopped and removed (if it was running)."
# Stop and remove ALL Docker containers related to this app
docker-stop-all: docker-stop-dev docker-stop-prod
@echo "🛑 Stopped all active containers for $(APP_NAME)."
# Rebuild and rerun the Docker container in development mode
docker-rebuild-dev: docker-build docker-dev
@echo "🔄 Rebuilding and rerunning Docker container in development."
# Rebuild and rerun the Docker container in production mode
docker-rebuild-prod: docker-build docker-prod
@echo "🔄 Rebuilding and rerunning Docker container in production."