mirror of
https://github.com/khairul169/garage-webui.git
synced 2025-10-14 14:59:32 +07:00
234 lines
8.0 KiB
Makefile
234 lines
8.0 KiB
Makefile
# Garage WebUI Development Makefile
|
|
|
|
# Variables
|
|
DOCKER_COMPOSE_DEV = docker-compose -f docker-compose.dev.yml
|
|
DOCKER_COMPOSE_PROD = docker-compose -f docker-compose.yml
|
|
|
|
# Colors for output
|
|
RED=\033[0;31m
|
|
GREEN=\033[0;32m
|
|
YELLOW=\033[1;33m
|
|
BLUE=\033[0;34m
|
|
NC=\033[0m # No Color
|
|
|
|
.PHONY: help dev dev-docker dev-frontend dev-backend dev-fullstack build clean test lint install
|
|
|
|
# Default target
|
|
help: ## Show this help message
|
|
@echo "${BLUE}Garage WebUI Development Commands${NC}"
|
|
@echo ""
|
|
@echo "Usage: make [command]"
|
|
@echo ""
|
|
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "${GREEN}%-20s${NC} %s\n", $$1, $$2}'
|
|
|
|
# Development Commands
|
|
dev: ## Start local development (requires local Garage)
|
|
@echo "${BLUE}Starting local development...${NC}"
|
|
pnpm run dev
|
|
|
|
dev-docker: ## Start Docker development environment
|
|
@echo "${BLUE}Starting Docker development environment...${NC}"
|
|
$(DOCKER_COMPOSE_DEV) up --build
|
|
|
|
dev-logs: ## Show development logs
|
|
@echo "${BLUE}Showing development logs...${NC}"
|
|
$(DOCKER_COMPOSE_DEV) logs -f
|
|
|
|
dev-stop: ## Stop development environment
|
|
@echo "${YELLOW}Stopping development environment...${NC}"
|
|
$(DOCKER_COMPOSE_DEV) down
|
|
|
|
dev-clean: ## Clean development environment and volumes
|
|
@echo "${RED}Cleaning development environment...${NC}"
|
|
$(DOCKER_COMPOSE_DEV) down -v
|
|
docker system prune -f
|
|
|
|
# Build Commands
|
|
build: ## Build for production
|
|
@echo "${BLUE}Building for production...${NC}"
|
|
pnpm run build
|
|
|
|
build-dev: ## Build for development
|
|
@echo "${BLUE}Building for development...${NC}"
|
|
pnpm run build:dev
|
|
|
|
build-backend: ## Build backend only
|
|
@echo "${BLUE}Building backend...${NC}"
|
|
cd backend && go build -o main .
|
|
|
|
build-docker: ## Build production Docker images
|
|
@echo "${BLUE}Building production Docker images...${NC}"
|
|
$(DOCKER_COMPOSE_PROD) build
|
|
|
|
# Install Commands
|
|
install: ## Install all dependencies
|
|
@echo "${BLUE}Installing dependencies...${NC}"
|
|
pnpm install
|
|
$(MAKE) install-backend
|
|
|
|
install-backend: ## Install Go dependencies
|
|
@echo "${BLUE}Installing Go dependencies...${NC}"
|
|
cd backend && go mod download
|
|
|
|
# Test Commands
|
|
test: ## Run all tests
|
|
@echo "${BLUE}Running tests...${NC}"
|
|
$(MAKE) test-backend
|
|
$(MAKE) type-check
|
|
|
|
test-backend: ## Run Go tests
|
|
@echo "${BLUE}Running Go tests...${NC}"
|
|
cd backend && go test ./...
|
|
|
|
test-frontend: ## Run frontend tests (if they exist)
|
|
@echo "${BLUE}Running frontend tests...${NC}"
|
|
pnpm test
|
|
|
|
type-check: ## Check TypeScript types
|
|
@echo "${BLUE}Checking TypeScript types...${NC}"
|
|
pnpm run type-check
|
|
|
|
# Lint Commands
|
|
lint: ## Run linters
|
|
@echo "${BLUE}Running linters...${NC}"
|
|
pnpm run lint
|
|
$(MAKE) lint-backend
|
|
|
|
lint-fix: ## Fix linting issues automatically
|
|
@echo "${BLUE}Fixing linting issues...${NC}"
|
|
pnpm run lint:fix
|
|
|
|
lint-backend: ## Lint Go code
|
|
@echo "${BLUE}Linting Go code...${NC}"
|
|
cd backend && go fmt ./...
|
|
cd backend && go vet ./...
|
|
|
|
# Clean Commands
|
|
clean: ## Clean build artifacts and cache
|
|
@echo "${YELLOW}Cleaning build artifacts...${NC}"
|
|
rm -rf dist
|
|
rm -rf node_modules/.vite
|
|
rm -rf backend/tmp
|
|
rm -rf backend/main
|
|
|
|
clean-all: ## Clean everything including node_modules
|
|
@echo "${RED}Cleaning everything...${NC}"
|
|
$(MAKE) clean
|
|
rm -rf node_modules
|
|
cd backend && go clean -cache -modcache -i -r
|
|
|
|
# Database Commands
|
|
db-backup: ## Backup development database
|
|
@echo "${BLUE}Backing up development database...${NC}"
|
|
mkdir -p dev-data/backups
|
|
$(DOCKER_COMPOSE_DEV) exec webui-backend cp /app/data/database.json /data/backups/database-backup-$$(date +%Y%m%d-%H%M%S).json
|
|
@echo "${GREEN}Database backup created in dev-data/backups/${NC}"
|
|
|
|
db-restore: ## Restore development database from backup (specify BACKUP_FILE)
|
|
@echo "${BLUE}Restoring development database...${NC}"
|
|
@if [ -z "$(BACKUP_FILE)" ]; then echo "${RED}Please specify BACKUP_FILE. Example: make db-restore BACKUP_FILE=database-backup-20231201-120000.json${NC}"; exit 1; fi
|
|
$(DOCKER_COMPOSE_DEV) exec webui-backend cp /data/backups/$(BACKUP_FILE) /app/data/database.json
|
|
@echo "${GREEN}Database restored from $(BACKUP_FILE)${NC}"
|
|
|
|
db-reset: ## Reset development database (creates fresh admin user)
|
|
@echo "${YELLOW}Resetting development database...${NC}"
|
|
$(DOCKER_COMPOSE_DEV) exec webui-backend rm -f /app/data/database.json
|
|
$(DOCKER_COMPOSE_DEV) restart webui-backend
|
|
@echo "${GREEN}Database reset. Default admin user created (admin/admin)${NC}"
|
|
|
|
# Debug Commands
|
|
debug-frontend: ## Access frontend container shell
|
|
@echo "${BLUE}Accessing frontend container...${NC}"
|
|
$(DOCKER_COMPOSE_DEV) exec webui-frontend sh
|
|
|
|
debug-backend: ## Access backend container shell
|
|
@echo "${BLUE}Accessing backend container...${NC}"
|
|
$(DOCKER_COMPOSE_DEV) exec webui-backend sh
|
|
|
|
debug-garage: ## Access garage container shell
|
|
@echo "${BLUE}Accessing garage container...${NC}"
|
|
$(DOCKER_COMPOSE_DEV) exec garage sh
|
|
|
|
debug-logs-frontend: ## Show frontend logs only
|
|
$(DOCKER_COMPOSE_DEV) logs -f webui-frontend
|
|
|
|
debug-logs-backend: ## Show backend logs only
|
|
$(DOCKER_COMPOSE_DEV) logs -f webui-backend
|
|
|
|
debug-logs-garage: ## Show garage logs only
|
|
$(DOCKER_COMPOSE_DEV) logs -f garage
|
|
|
|
# Status Commands
|
|
status: ## Show development environment status
|
|
@echo "${BLUE}Development environment status:${NC}"
|
|
$(DOCKER_COMPOSE_DEV) ps
|
|
|
|
health: ## Check health of all services
|
|
@echo "${BLUE}Checking service health...${NC}"
|
|
@echo "Frontend: http://localhost:5173"
|
|
@curl -s -o /dev/null -w "Frontend: %{http_code}\n" http://localhost:5173 || echo "Frontend: ${RED}DOWN${NC}"
|
|
@curl -s -o /dev/null -w "Backend: %{http_code}\n" http://localhost:3909/api/auth/status || echo "Backend: ${RED}DOWN${NC}"
|
|
@curl -s -o /dev/null -w "Garage: %{http_code}\n" http://localhost:3903/status || echo "Garage: ${RED}DOWN${NC}"
|
|
|
|
# Production Commands
|
|
prod-build: ## Build production images
|
|
@echo "${BLUE}Building production images...${NC}"
|
|
$(DOCKER_COMPOSE_PROD) build
|
|
|
|
prod-up: ## Start production environment
|
|
@echo "${BLUE}Starting production environment...${NC}"
|
|
$(DOCKER_COMPOSE_PROD) up -d
|
|
|
|
prod-down: ## Stop production environment
|
|
@echo "${YELLOW}Stopping production environment...${NC}"
|
|
$(DOCKER_COMPOSE_PROD) down
|
|
|
|
prod-logs: ## Show production logs
|
|
$(DOCKER_COMPOSE_PROD) logs -f
|
|
|
|
# Utility Commands
|
|
ports: ## Show all used ports
|
|
@echo "${BLUE}Development ports:${NC}"
|
|
@echo "Frontend (Vite): http://localhost:5173"
|
|
@echo "Backend (API): http://localhost:3909"
|
|
@echo "Garage (S3): http://localhost:3900"
|
|
@echo "Garage (Admin): http://localhost:3903"
|
|
@echo "Garage (RPC): http://localhost:3901"
|
|
@echo "Garage (Web): http://localhost:3902"
|
|
@echo ""
|
|
@echo "${BLUE}Fullstack alternative ports:${NC}"
|
|
@echo "Frontend: http://localhost:5174"
|
|
@echo "Backend: http://localhost:3910"
|
|
|
|
urls: ## Show all useful URLs
|
|
@echo "${BLUE}Development URLs:${NC}"
|
|
@echo "WebUI: http://localhost:5173"
|
|
@echo "Admin Dashboard: http://localhost:5173/admin"
|
|
@echo "Login: http://localhost:5173/auth/login"
|
|
@echo "API Status: http://localhost:3909/api/auth/status"
|
|
@echo "Garage Status: http://localhost:3903/status"
|
|
|
|
# First time setup
|
|
setup: ## First time setup (install deps + start dev environment)
|
|
@echo "${GREEN}Setting up Garage WebUI development environment...${NC}"
|
|
$(MAKE) install
|
|
@echo "${YELLOW}Creating garage.toml if it doesn't exist...${NC}"
|
|
@if [ ! -f garage.toml ]; then \
|
|
echo "Creating garage.toml from template..."; \
|
|
cp garage.toml.example garage.toml 2>/dev/null || echo "Please create garage.toml manually"; \
|
|
fi
|
|
@echo "${GREEN}Setup complete! Run 'make dev-docker' to start development.${NC}"
|
|
|
|
# Quick commands for daily development
|
|
quick-start: dev-docker ## Quick start development environment
|
|
quick-stop: dev-stop ## Quick stop development environment
|
|
quick-restart: ## Quick restart development environment
|
|
$(MAKE) dev-stop
|
|
$(MAKE) dev-docker
|
|
|
|
# Git hooks (optional)
|
|
install-hooks: ## Install git pre-commit hooks
|
|
@echo "${BLUE}Installing git hooks...${NC}"
|
|
@echo '#!/bin/sh\nmake lint && make type-check' > .git/hooks/pre-commit
|
|
@chmod +x .git/hooks/pre-commit
|
|
@echo "${GREEN}Pre-commit hooks installed${NC}"
|