Files
Scriberr/Makefile
rishikanthc b8fd360ca2 fix: streamline API docs generation to sync both locations
Updated make docs to generate swagger.json to both api-docs/ and
web/project-site/public/api/ to match CI workflow behavior.

This fixes CI failures where the project site swagger.json was out
of sync with code changes (max_new_tokens field for Voxtral).
2025-12-31 16:03:33 -08:00

118 lines
4.5 KiB
Makefile

.PHONY: help docs docs-serve docs-clean website website-dev website-build dev
help: ## Show this help message
@echo 'Usage: make [target]'
@echo ''
@echo 'Available targets:'
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}'
dev: ## Start development environment with Air (backend) and Vite (frontend)
@echo "🚀 Starting development environment..."
@# Ensure air is installed
@if ! command -v air >/dev/null 2>&1; then \
echo "⚠️ 'air' command not found."; \
echo "📦 Auto-installing 'air' for live reload..."; \
GOPATH=$$(go env GOPATH); \
if [[ ":$$PATH:" != *":$$GOPATH/bin:"* ]]; then \
echo "⚠️ $$GOPATH/bin is not in your PATH. Adding it temporarily..."; \
export PATH=$$PATH:$$GOPATH/bin; \
fi; \
go install github.com/air-verse/air@latest; \
if ! command -v air >/dev/null 2>&1; then \
echo "❌ Failed to install 'air'. Falling back to 'go run'..."; \
USE_GO_RUN=true; \
else \
echo "✅ 'air' installed successfully."; \
USE_GO_RUN=false; \
fi; \
else \
USE_GO_RUN=false; \
fi; \
\
mkdir -p internal/web/dist; \
if [ -z "$$(ls -A internal/web/dist)" ]; then \
echo "📄 Creating placeholder files for Go embed..."; \
echo "<!-- Placeholder for development -->" > internal/web/dist/index.html; \
echo "placeholder" > internal/web/dist/dummy_asset; \
fi; \
\
trap 'echo ""; echo "🛑 Stopping development servers..."; kill 0; exit 0' INT TERM; \
\
if [ "$$USE_GO_RUN" = true ]; then \
echo "🔧 Starting Go backend (standard run)..."; \
go run cmd/server/main.go & \
else \
echo "🔥 Starting Go backend (with Air live reload)..."; \
air & \
fi; \
\
echo "⚛️ Starting React frontend (Vite)..."; \
cd web/frontend && npm run dev & \
\
wait
docs: ## Generate API documentation from Go code annotations
@echo "Generating API documentation..."
@command -v swag >/dev/null 2>&1 || { echo "Error: swag not installed. Run: go install github.com/swaggo/swag/cmd/swag@latest"; exit 1; }
swag init -g cmd/server/main.go -o api-docs
@echo "Syncing to project site..."
swag init -g server/main.go -o web/project-site/public/api --outputTypes json --dir cmd,internal
@echo "✓ API documentation generated in api-docs/ and web/project-site/public/api/"
docs-clean: ## Clean generated API documentation
@echo "Cleaning API documentation..."
rm -rf api-docs/docs.go api-docs/swagger.json api-docs/swagger.yaml
@echo "✓ API documentation cleaned"
website-dev: docs ## Start local development server for project website
@echo "Starting website development server..."
cd web/project-site && npm run dev
website-build: docs ## Build project website for GitHub Pages
@echo "Building project website..."
cd web/project-site && npm run build
@echo "✓ Website built to /docs directory"
website-serve: website-build ## Build and preview project website locally
@echo "Previewing website..."
cd web/project-site && npm run preview
docs-serve: website-serve ## Alias for website-serve
build: ## Build Scriberr binary with embedded frontend
@echo "Starting Scriberr build process..."
@echo "Cleaning old build files..."
@rm -f scriberr
@rm -rf internal/web/dist
@cd web/frontend && rm -rf dist/ && rm -rf assets/ 2>/dev/null || true
@echo "✓ Build files cleaned"
@echo "Building React frontend..."
@cd web/frontend && npm run build
@echo "✓ Frontend built"
@echo "Copying frontend assets for embedding..."
@rm -rf internal/web/dist
@cp -r web/frontend/dist internal/web/
@echo "✓ Assets copied"
@echo "Building Go binary..."
@go clean -cache
@go build -o scriberr cmd/server/main.go
@echo "✓ Binary built successfully"
@echo "Build complete. Run './scriberr' to start the server"
build-cli: ## Build CLI binaries for Linux, macOS, and Windows
@echo "Building CLI binaries..."
@mkdir -p bin/cli
GOOS=linux GOARCH=amd64 go build -o bin/cli/scriberr-linux-amd64 ./cmd/scriberr-cli
GOOS=darwin GOARCH=amd64 go build -o bin/cli/scriberr-darwin-amd64 ./cmd/scriberr-cli
GOOS=darwin GOARCH=arm64 go build -o bin/cli/scriberr-darwin-arm64 ./cmd/scriberr-cli
GOOS=windows GOARCH=amd64 go build -o bin/cli/scriberr-windows-amd64.exe ./cmd/scriberr-cli
@echo "✓ CLI binaries built in bin/cli/"
test: ## Run tests using gotestsum (via go tool)
@echo "Running tests..."
go tool gotestsum --format pkgname -- -v ./...
test-watch: ## Run tests in watch mode using gotestsum (via go tool)
@echo "Running tests in watch mode..."
go tool gotestsum --watch -- -v ./...