# SeaweedFS Admin Component Makefile # Variables ADMIN_DIR := . VIEW_DIR := $(ADMIN_DIR)/view STATIC_DIR := $(ADMIN_DIR)/static TEMPL_FILES := $(shell find $(VIEW_DIR) -name "*.templ") TEMPL_GO_FILES := $(TEMPL_FILES:.templ=_templ.go) GO_FILES := $(shell find $(ADMIN_DIR) -name "*.go" -not -name "*_templ.go") BUILD_DIR := ../.. WEED_BINARY := $(BUILD_DIR)/weed # Default target .PHONY: all all: build # Install templ if not present .PHONY: install-templ install-templ: @which templ > /dev/null || (echo "Installing templ..." && go install github.com/a-h/templ/cmd/templ@latest) # Generate templ files .PHONY: generate generate: install-templ @echo "Generating templ files..." @templ generate @echo "Generated: $(TEMPL_GO_FILES)" # Clean generated files .PHONY: clean-templ clean-templ: @echo "Cleaning generated templ files..." @find $(VIEW_DIR) -name "*_templ.go" -delete @echo "Cleaned templ files" # Watch for changes and regenerate .PHONY: watch watch: install-templ @echo "Watching for templ file changes..." @templ generate --watch # Build the main weed binary with admin component .PHONY: build build: generate @echo "Building weed binary with admin component..." @cd $(BUILD_DIR) && go build -o weed ./weed @echo "Built: $(BUILD_DIR)/weed" # Test the admin component .PHONY: test test: generate @echo "Running admin component tests..." @go test ./... # Run the admin server via weed command .PHONY: run run: build @echo "Starting admin server via weed command..." @cd $(BUILD_DIR) && ./weed admin # Development server with auto-reload .PHONY: dev dev: generate @echo "Starting development server with auto-reload..." @echo "Note: You'll need to manually restart the server when Go files change" @cd $(BUILD_DIR) && ./weed admin -port=23647 & @$(MAKE) watch # Lint the code .PHONY: lint lint: @echo "Linting admin component..." @golangci-lint run ./... # Format the code .PHONY: fmt fmt: @echo "Formatting Go code..." @go fmt ./... @echo "Formatting templ files..." @templ fmt $(VIEW_DIR) # Validate static files exist .PHONY: validate-static validate-static: @echo "Validating static files..." @test -f $(STATIC_DIR)/css/admin.css || (echo "Missing: admin.css" && exit 1) @test -f $(STATIC_DIR)/js/admin.js || (echo "Missing: admin.js" && exit 1) @echo "Static files validated" # Check dependencies .PHONY: deps deps: @echo "Checking dependencies..." @go mod tidy @go mod verify # Clean all build artifacts .PHONY: clean clean: clean-templ @echo "Cleaning build artifacts..." @rm -f $(BUILD_DIR)/weed 2>/dev/null || true @echo "Cleaned build artifacts" # Install dependencies .PHONY: install-deps install-deps: @echo "Installing Go dependencies..." @go mod download @$(MAKE) install-templ # Production build .PHONY: build-prod build-prod: clean generate validate-static @echo "Building production binary..." @cd $(BUILD_DIR) && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o weed-linux-amd64 ./weed @echo "Built production binary: $(BUILD_DIR)/weed-linux-amd64" # Docker build (if needed) .PHONY: docker-build docker-build: generate @echo "Building Docker image with admin component..." @cd $(BUILD_DIR) && docker build -t seaweedfs/seaweedfs:latest . # Help target .PHONY: help help: @echo "SeaweedFS Admin Component Makefile" @echo "" @echo "Available targets:" @echo " all - Build the weed binary with admin component (default)" @echo " generate - Generate templ files from templates" @echo " build - Build weed binary with admin component" @echo " build-prod - Build production binary" @echo " run - Run admin server via weed command" @echo " dev - Start development server with template watching" @echo " test - Run tests" @echo " watch - Watch for template changes and regenerate" @echo " clean - Clean all build artifacts" @echo " clean-templ - Clean generated template files" @echo " fmt - Format Go and templ code" @echo " lint - Lint the code" @echo " deps - Check and tidy dependencies" @echo " install-deps - Install all dependencies" @echo " install-templ - Install templ compiler" @echo " validate-static - Validate static files exist" @echo " docker-build - Build Docker image" @echo " help - Show this help message" @echo "" @echo "Examples:" @echo " make generate # Generate templates" @echo " make build # Build weed binary" @echo " make run # Start admin server" @echo " make dev # Development mode with auto-reload" # Make sure generated files are up to date before building $(WEED_BINARY): $(TEMPL_GO_FILES) $(GO_FILES) @$(MAKE) build # Auto-generate templ files when .templ files change %_templ.go: %.templ @echo "Regenerating $@ from $<" @templ generate .PHONY: $(TEMPL_GO_FILES)