mirror of
https://github.com/Dvorinka/excalidraw-full.git
synced 2026-06-03 22:02:57 +00:00
132 lines
5.0 KiB
Makefile
132 lines
5.0 KiB
Makefile
# ===================================================================
|
|
# Excalidraw FULL - Build, Test & Dev Automation
|
|
# ===================================================================
|
|
|
|
.PHONY: all install dev build test clean docker-up docker-down docker-clean docker-up-postgres docker-down-postgres lint fmt generate-api-client help
|
|
|
|
# -------------------------------------------------------------------
|
|
# Defaults
|
|
# -------------------------------------------------------------------
|
|
FRONTEND_DIR := frontend
|
|
BACKEND_DIR := .
|
|
|
|
# -------------------------------------------------------------------
|
|
# Dev
|
|
# -------------------------------------------------------------------
|
|
dev: ## Run frontend Vite dev server + Go backend (requires tmux or two terminals)
|
|
@echo "Start backend: make dev-backend"
|
|
@echo "Start frontend: make dev-frontend"
|
|
|
|
install: ## Install frontend dependencies
|
|
cd $(FRONTEND_DIR) && npm ci
|
|
|
|
dev-backend: ## Run Go backend with auto-reload (requires air)
|
|
air -c .air.toml
|
|
|
|
dev-frontend: ## Run Vite dev server
|
|
cd $(FRONTEND_DIR) && npm run dev
|
|
|
|
# -------------------------------------------------------------------
|
|
# Build
|
|
# -------------------------------------------------------------------
|
|
build: build-frontend build-backend ## Full production build (frontend + backend)
|
|
|
|
build-frontend: ## Build React frontend into frontend/dist
|
|
cd $(FRONTEND_DIR) && npm ci && npm run build
|
|
|
|
build-backend: ## Build Go binary with embedded frontend/dist
|
|
cd $(BACKEND_DIR) && go build -ldflags="-s -w" -o excalidraw-full .
|
|
|
|
build-docker: ## Build Docker image locally
|
|
docker build -f excalidraw-full.Dockerfile -t excalidraw-full:latest .
|
|
|
|
# -------------------------------------------------------------------
|
|
# Test
|
|
# -------------------------------------------------------------------
|
|
test: test-backend test-frontend ## Run all tests
|
|
|
|
test-backend: ## Run Go unit tests
|
|
cd $(BACKEND_DIR) && go test ./... -v -count=1
|
|
|
|
test-frontend: ## Run frontend tests (Vitest)
|
|
cd $(FRONTEND_DIR) && npm test -- --run
|
|
|
|
test-e2e: ## Run Playwright E2E tests (requires install first)
|
|
cd $(FRONTEND_DIR) && npx playwright test
|
|
|
|
# -------------------------------------------------------------------
|
|
# Lint / Format
|
|
# -------------------------------------------------------------------
|
|
lint: lint-backend lint-frontend ## Run all linters
|
|
|
|
lint-backend: ## Run go vet + staticcheck
|
|
cd $(BACKEND_DIR) && go vet ./...
|
|
cd $(BACKEND_DIR) && staticcheck ./...
|
|
|
|
lint-frontend: ## Run ESLint
|
|
cd $(FRONTEND_DIR) && npm run lint
|
|
|
|
fmt: fmt-backend fmt-frontend ## Format all code
|
|
|
|
fmt-backend: ## Run gofmt
|
|
cd $(BACKEND_DIR) && gofmt -w .
|
|
|
|
fmt-frontend: ## Run prettier
|
|
cd $(FRONTEND_DIR) && npx prettier --write "src/**/*.{ts,tsx,scss,css}"
|
|
|
|
# -------------------------------------------------------------------
|
|
# Docker
|
|
# -------------------------------------------------------------------
|
|
docker-up: ## Start with Docker Compose (builds local image)
|
|
docker compose -f docker-compose.yml up --build -d
|
|
|
|
docker-down: ## Stop Docker Compose
|
|
docker compose -f docker-compose.yml down
|
|
|
|
docker-up-postgres: ## Start with PostgreSQL Docker Compose (compat target)
|
|
docker compose -f docker-compose.postgres.yml up --build -d
|
|
|
|
docker-down-postgres: ## Stop PostgreSQL Docker Compose (compat target)
|
|
docker compose -f docker-compose.postgres.yml down
|
|
|
|
docker-clean: ## Stop and remove Docker volumes/images
|
|
docker compose -f docker-compose.yml down -v --rmi local
|
|
docker system prune -f
|
|
|
|
docker-logs: ## Tail Docker logs
|
|
docker compose -f docker-compose.yml logs -f
|
|
|
|
docker-build-push: ## Build and tag for registry (set IMAGE_TAG)
|
|
docker build -f excalidraw-full.Dockerfile -t $(IMAGE_TAG) .
|
|
|
|
# -------------------------------------------------------------------
|
|
# Database
|
|
# -------------------------------------------------------------------
|
|
db-migrate: ## Run database migrations (placeholder)
|
|
@echo "Migrations: embedded goose migrations run automatically on boot."
|
|
|
|
db-seed: ## Seed system templates (placeholder)
|
|
@echo "Seeding: system templates seed automatically on boot."
|
|
|
|
# -------------------------------------------------------------------
|
|
# Clean
|
|
# -------------------------------------------------------------------
|
|
clean: ## Remove build artifacts and cached test data
|
|
cd $(FRONTEND_DIR) && rm -rf dist node_modules/.vite
|
|
cd $(BACKEND_DIR) && rm -f excalidraw-full excalidraw-complete *.db *.db-journal
|
|
cd $(BACKEND_DIR) && go clean -cache
|
|
|
|
# -------------------------------------------------------------------
|
|
# API / Client
|
|
# -------------------------------------------------------------------
|
|
generate-api-client: ## Generate TypeScript API client from openapi.yaml
|
|
npx --yes openapi-typescript@latest openapi.yaml -o $(FRONTEND_DIR)/src/services/api-client.ts
|
|
|
|
# -------------------------------------------------------------------
|
|
# Help
|
|
# -------------------------------------------------------------------
|
|
help: ## Show this help
|
|
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}'
|
|
|
|
IMAGE_TAG ?= excalidraw-full:latest
|