151 lines
4.8 KiB
Makefile
151 lines
4.8 KiB
Makefile
|
|
# Project variables
|
|
BINARY_NAME=glancr
|
|
CMD_PATH=./cmd/server
|
|
DIST_DIR=dist
|
|
UI_DIR=ui
|
|
|
|
# Go variables
|
|
GOCMD=go
|
|
GOBUILD=$(GOCMD) build
|
|
GOCLEAN=$(GOCMD) clean
|
|
GOTEST=$(GOCMD) test
|
|
GOGET=$(GOCMD) get
|
|
GOMOD=$(GOCMD) mod
|
|
|
|
# Build info
|
|
VERSION?=dev
|
|
BUILD_TIME=$(shell date -u '+%Y-%m-%d_%H:%M:%S')
|
|
LDFLAGS=-ldflags "-X main.Version=$(VERSION) -X main.BuildTime=$(BUILD_TIME)"
|
|
|
|
# Build tags
|
|
DEV_TAGS=
|
|
PROD_TAGS=-tags prod
|
|
|
|
.PHONY: all build build-dev build-prod build-frontend build-backend clean test deps dev help
|
|
|
|
# Default target (development build)
|
|
all: clean deps build-dev
|
|
|
|
# Help target
|
|
help:
|
|
@echo "Available targets:"
|
|
@echo " all - Clean, install deps, and build for development"
|
|
@echo " build-dev - Build for development (uses filesystem assets)"
|
|
@echo " build-prod - Build for production (embeds assets)"
|
|
@echo " build-frontend - Build frontend only"
|
|
@echo " build-backend - Build backend only (development mode)"
|
|
@echo " build-backend-prod - Build backend with embedded assets"
|
|
@echo " dev - Start development servers"
|
|
@echo " clean - Clean build artifacts"
|
|
@echo " test - Run Go tests"
|
|
@echo " deps - Install dependencies"
|
|
@echo " release - Build production release"
|
|
|
|
# Development build (default)
|
|
build-dev: build-frontend-dev build-backend-dev
|
|
|
|
# Production build
|
|
build-prod: build-frontend build-backend-prod
|
|
|
|
# Alias for backward compatibility
|
|
build: build-dev
|
|
|
|
# Build frontend for development (output to internal/fs/dist)
|
|
build-frontend-dev:
|
|
@echo "Building frontend for development..."
|
|
cd $(UI_DIR) && npm run build
|
|
@echo "Copying frontend assets to internal/fs/dist..."
|
|
rm -rf internal/fs/dist
|
|
cp -r $(UI_DIR)/dist internal/fs/
|
|
|
|
# Build frontend for production
|
|
build-frontend:
|
|
@echo "Building frontend for production..."
|
|
cd $(UI_DIR) && npm run build
|
|
@echo "Copying frontend assets to internal/fs/dist..."
|
|
rm -rf internal/fs/dist
|
|
cp -r $(UI_DIR)/dist internal/fs/
|
|
|
|
# Build backend for development
|
|
build-backend-dev:
|
|
@echo "Building backend for development..."
|
|
mkdir -p $(DIST_DIR)
|
|
$(GOBUILD) $(DEV_TAGS) $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME) $(CMD_PATH)
|
|
|
|
# Build backend for production (with embedded assets)
|
|
build-backend-prod:
|
|
@echo "Building backend for production (embedded assets)..."
|
|
mkdir -p $(DIST_DIR)
|
|
$(GOBUILD) $(PROD_TAGS) $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME) $(CMD_PATH)
|
|
|
|
# Development mode
|
|
dev:
|
|
@echo "Starting development environment..."
|
|
@echo "Frontend: http://localhost:5173"
|
|
@echo "Backend: http://localhost:8080"
|
|
@echo "Press Ctrl+C to stop both servers"
|
|
@bash dev.sh
|
|
|
|
# Clean build artifacts
|
|
clean:
|
|
@echo "Cleaning..."
|
|
$(GOCLEAN)
|
|
rm -rf $(DIST_DIR)
|
|
rm -rf internal/fs/dist
|
|
cd $(UI_DIR) && rm -rf dist node_modules/.vite
|
|
|
|
# Deep clean (including node_modules)
|
|
clean-all: clean
|
|
cd $(UI_DIR) && rm -rf node_modules
|
|
|
|
# Install dependencies
|
|
deps:
|
|
@echo "Installing Go dependencies..."
|
|
$(GOMOD) download
|
|
$(GOMOD) tidy
|
|
@echo "Installing Node dependencies..."
|
|
cd $(UI_DIR) && npm install
|
|
|
|
# Run Go tests
|
|
test:
|
|
$(GOTEST) -v ./...
|
|
|
|
# Run Go tests with prod build tags
|
|
test-prod:
|
|
$(GOTEST) $(PROD_TAGS) -v ./...
|
|
|
|
# Run all tests (both dev and prod)
|
|
test-all: test test-prod
|
|
|
|
# Production release build
|
|
release: clean deps build-prod
|
|
@echo "Production build complete!"
|
|
@echo "Binary: $(DIST_DIR)/$(BINARY_NAME)"
|
|
|
|
# Build for multiple platforms (production)
|
|
build-cross-prod: build-frontend
|
|
@echo "Building for multiple platforms (production)..."
|
|
mkdir -p $(DIST_DIR)
|
|
GOOS=linux GOARCH=amd64 $(GOBUILD) $(PROD_TAGS) $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME)-linux-amd64 $(CMD_PATH)
|
|
GOOS=darwin GOARCH=amd64 $(GOBUILD) $(PROD_TAGS) $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME)-darwin-amd64 $(CMD_PATH)
|
|
GOOS=darwin GOARCH=arm64 $(GOBUILD) $(PROD_TAGS) $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME)-darwin-arm64 $(CMD_PATH)
|
|
GOOS=windows GOARCH=amd64 $(GOBUILD) $(PROD_TAGS) $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME)-windows-amd64.exe $(CMD_PATH)
|
|
|
|
# Build for multiple platforms (development)
|
|
build-cross-dev: build-frontend-dev
|
|
@echo "Building for multiple platforms (development)..."
|
|
mkdir -p $(DIST_DIR)
|
|
GOOS=linux GOARCH=amd64 $(GOBUILD) $(DEV_TAGS) $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME)-dev-linux-amd64 $(CMD_PATH)
|
|
GOOS=darwin GOARCH=amd64 $(GOBUILD) $(DEV_TAGS) $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME)-dev-darwin-amd64 $(CMD_PATH)
|
|
GOOS=darwin GOARCH=arm64 $(GOBUILD) $(DEV_TAGS) $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME)-dev-darwin-arm64 $(CMD_PATH)
|
|
GOOS=windows GOARCH=amd64 $(GOBUILD) $(DEV_TAGS) $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME)-dev-windows-amd64.exe $(CMD_PATH)
|
|
|
|
# Install binary (development version)
|
|
install-dev: build-backend-dev
|
|
$(GOCMD) install $(DEV_TAGS) $(LDFLAGS) $(CMD_PATH)
|
|
|
|
# Install binary (production version)
|
|
install-prod: build-backend-prod
|
|
$(GOCMD) install $(PROD_TAGS) $(LDFLAGS) $(CMD_PATH)
|