Files
nice-app-web/Makefile
Jay Sheen e4e2bd293c Update build scripts and change notice date format
- Add build-dev target for development environment
- Fix zip output paths to use relative paths in build directory
- Change home notice date format from 'YY년 MM월 DD일' to 'YYYY.MM.DD'

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-04 10:01:46 +09:00

188 lines
6.3 KiB
Makefile

# Nicepayments Web Application Makefile
# Variables
NODE_VERSION = 20
DOCKER_REGISTRY = harbor.jongyeob.com
DOCKER_PROJECT = nicepay
DOCKER_IMAGE = nice-app-web
DOCKER_TAG = 1.0.0
DOCKER_FULL_IMAGE = $(DOCKER_REGISTRY)/$(DOCKER_PROJECT)/$(DOCKER_IMAGE)
CONTAINER_NAME = nice-app-web
PORT = 80
PLATFORMS = linux/amd64,linux/arm64
# Default target
.DEFAULT_GOAL := help
# Help target
help: ## Show this help message
@echo "Available targets:"
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
# Development targets
install: ## Install dependencies
pnpm install
dev: ## Start development server
pnpm run dev
build: ## Build for production
pnpm run build
build-staging: ## Build for staging environment with zip packaging
pnpm run build:staging
@echo "Creating deployment package..."
$(eval VERSION := $(shell node -p "require('./package.json').version"))
cd build && zip -r ./dist/nice-app-web-staging-$(VERSION).zip . && cd ..
@echo "Deployment package created: nice-app-web-staging-$(VERSION).zip"
build-dev: ## Build for production with zip packaging
pnpm run build
@echo "Creating development deployment package..."
$(eval VERSION := $(shell node -p "require('./package.json').version"))
cd build && zip -r ./dist/nice-app-web-development-$(VERSION).zip . && cd ..
@echo "Deployment package created: nice-app-web-production-$(VERSION).zip"
build-production: ## Build for production with zip packaging
pnpm run build
@echo "Creating production deployment package..."
$(eval VERSION := $(shell node -p "require('./package.json').version"))
cd build && zip -r ./dist/nice-app-web-production-$(VERSION).zip . && cd ..
@echo "Deployment package created: nice-app-web-production-$(VERSION).zip"
preview: ## Preview production build
pnpm run preview
lint: ## Run linting
pnpm run lint
clean: ## Clean node_modules, dist and Docker artifacts
rm -rf node_modules build dist .pnpm-store
docker system prune -f
# Docker Setup
setup: ## Setup Docker buildx for multi-platform builds
@docker buildx use nice-builder 2>/dev/null || docker buildx create --name nice-builder --driver docker-container --use
@docker buildx inspect --bootstrap
# Docker Build targets
# docker-build: setup ## Build Docker image locally (single platform)
# docker buildx build --platform linux/amd64 \
# -f docker/Dockerfile \
# -t $(DOCKER_IMAGE):$(DOCKER_TAG) \
# -t $(DOCKER_IMAGE):latest \
# --load .
docker-build: setup ## Build multi-platform Docker image (no local load)
docker buildx build --platform $(PLATFORMS) \
-f docker/Dockerfile \
-t $(DOCKER_IMAGE):$(DOCKER_TAG) \
-t $(DOCKER_IMAGE):latest \
--output type=image,name=$(DOCKER_IMAGE):$(DOCKER_TAG),push=false .
docker-push: setup ## Build and push multi-platform image to registry
docker buildx build --platform $(PLATFORMS) \
-f docker/Dockerfile \
-t $(DOCKER_FULL_IMAGE):$(DOCKER_TAG) \
-t $(DOCKER_FULL_IMAGE):latest \
--push .
# Docker Runtime targets
docker-run: ## Run Docker container with Apache
docker stop $(CONTAINER_NAME) 2>/dev/null || true
docker rm $(CONTAINER_NAME) 2>/dev/null || true
docker run -d \
--name $(CONTAINER_NAME) \
--restart unless-stopped \
-p $(PORT):80 \
$(DOCKER_IMAGE):$(DOCKER_TAG)
@echo "Container running at http://localhost:$(PORT)"
docker-stop: ## Stop and remove Docker container
docker stop $(CONTAINER_NAME) || true
docker rm $(CONTAINER_NAME) || true
docker-restart: docker-stop docker-run ## Restart Docker container
docker-logs: ## Show Docker container logs
docker logs -f $(CONTAINER_NAME)
docker-shell: ## Access Docker container shell
docker exec -it $(CONTAINER_NAME) /bin/sh
docker-clean: ## Clean all Docker resources
docker stop $(CONTAINER_NAME) 2>/dev/null || true
docker rm $(CONTAINER_NAME) 2>/dev/null || true
docker rmi $(DOCKER_IMAGE):$(DOCKER_TAG) 2>/dev/null || true
docker rmi $(DOCKER_FULL_IMAGE):$(DOCKER_TAG) 2>/dev/null || true
docker buildx rm nice-builder 2>/dev/null || true
# Registry targets
login: ## Login to Harbor registry
docker login $(DOCKER_REGISTRY)
pull: ## Pull Docker image from Harbor
docker pull $(DOCKER_FULL_IMAGE):$(DOCKER_TAG)
docker tag $(DOCKER_FULL_IMAGE):$(DOCKER_TAG) $(DOCKER_IMAGE):$(DOCKER_TAG)
# Docker Compose targets
compose-up: ## Start services with docker-compose
docker-compose -f docker/docker-compose.yml up -d
compose-down: ## Stop services with docker-compose
docker-compose -f docker/docker-compose.yml down
compose-restart: ## Restart services with docker-compose
docker-compose -f docker/docker-compose.yml restart
compose-logs: ## Show docker-compose logs
docker-compose -f docker/docker-compose.yml logs -f
# Deployment targets
deploy: build docker-push ## Build app and deploy to registry
deploy-tag: ## Deploy with custom tag (use: make deploy-tag TAG=v1.0.0)
docker buildx build --platform $(PLATFORMS) \
-f docker/Dockerfile \
-t $(DOCKER_FULL_IMAGE):$(TAG) \
--push .
# Development with Docker
dev-docker: ## Run development server in Docker
docker run --rm -it \
-v $(PWD):/app \
-p 5173:5173 \
-w /app \
node:20-alpine \
sh -c "npm install -g pnpm && pnpm install && pnpm run dev --host 0.0.0.0"
# Testing targets
test: ## Run tests in Docker
docker run --rm \
-v $(PWD):/app \
-w /app \
node:20-alpine \
sh -c "npm install -g pnpm && pnpm install && pnpm test"
# Utility targets
info: ## Show Docker and build information
@echo "Docker Registry: $(DOCKER_REGISTRY)"
@echo "Docker Image: $(DOCKER_FULL_IMAGE):$(DOCKER_TAG)"
@echo "Platforms: $(PLATFORMS)"
@echo "Container Name: $(CONTAINER_NAME)"
@echo "Port: $(PORT)"
@docker version --format 'Docker Version: {{.Server.Version}}'
@docker buildx version
status: ## Show container status
@docker ps --filter name=$(CONTAINER_NAME) --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
inspect: ## Inspect the built image
docker buildx imagetools inspect $(DOCKER_FULL_IMAGE):$(DOCKER_TAG)
# Quick commands
quick-build: setup docker-build docker-run ## Quick build and run locally
quick-deploy: setup build docker-push ## Quick deploy to registry
.PHONY: help install dev build preview lint clean setup docker-build docker-push docker-run docker-stop docker-restart docker-logs docker-shell docker-clean login pull compose-up compose-down compose-restart compose-logs deploy deploy-tag dev-docker test info status inspect quick-build quick-deploy