search-cli/Makefile
Regis David Souza Mesquita dce138339d
Initial Commit
2024-12-07 11:08:15 +00:00

127 lines
No EOL
3.5 KiB
Makefile

.PHONY: build clean test test-coverage test-verbose install lint run setup help local-install
# Build variables
BINARY_NAME=search
BUILD_DIR=bin
CMD_DIR=cmd/search
COVERAGE_DIR=coverage
GO_BIN=$(HOME)/go/bin
# Go commands
GOCMD=go
GOBUILD=$(GOCMD) build
GOCLEAN=$(GOCMD) clean
GOTEST=$(GOCMD) test
GOGET=$(GOCMD) get
GOMOD=$(GOCMD) mod
GOLINT=golangci-lint
# Build the project
build:
@echo "Building..."
@mkdir -p $(BUILD_DIR)
$(GOBUILD) -o $(BUILD_DIR)/$(BINARY_NAME) ./$(CMD_DIR)
# Clean build files
clean:
@echo "Cleaning..."
@rm -rf $(BUILD_DIR) $(COVERAGE_DIR)
$(GOCLEAN)
# Run all tests
test:
@echo "Running tests..."
$(GOTEST) ./...
# Run tests with coverage
test-coverage:
@echo "Running tests with coverage..."
@mkdir -p $(COVERAGE_DIR)
$(GOTEST) -coverprofile=$(COVERAGE_DIR)/coverage.out ./...
$(GOCMD) tool cover -html=$(COVERAGE_DIR)/coverage.out -o $(COVERAGE_DIR)/coverage.html
@echo "Coverage report generated in $(COVERAGE_DIR)/coverage.html"
# Run tests with verbose output
test-verbose:
@echo "Running tests (verbose)..."
$(GOTEST) -v ./...
# Install dependencies
deps:
@echo "Downloading dependencies..."
$(GOMOD) download
$(GOMOD) tidy
# Run linter
lint:
@echo "Running linter..."
$(GOLINT) run
# Install the binary
install:
@echo "Installing to $(GO_BIN)..."
@mkdir -p $(GO_BIN)
$(GOBUILD) -o $(GO_BIN)/$(BINARY_NAME) ./$(CMD_DIR)
@if ! echo "$$PATH" | grep -q "$(GO_BIN)"; then \
echo "Warning: $(GO_BIN) is not in your PATH"; \
echo "Add this line to your ~/.bashrc or ~/.zshrc:"; \
echo " export PATH=\$$PATH:$(GO_BIN)"; \
fi
# Install to /usr/local/bin (requires sudo)
local-install: build
@echo "Installing to /usr/local/bin..."
@sudo install -m 755 $(BUILD_DIR)/$(BINARY_NAME) /usr/local/bin/$(BINARY_NAME)
# Run the application (requires query argument)
run:
@if [ -z "$(query)" ]; then \
echo "Usage: make run query='your search query'"; \
exit 1; \
fi
@$(BUILD_DIR)/$(BINARY_NAME) $(query)
# Setup project structure
setup:
@echo "Setting up project structure..."
@mkdir -p cmd/search internal/adapters internal/formatter
@if [ -f main.go ]; then \
echo "Moving main.go to cmd/search/..."; \
rm cmd/search/main.go || true; \
mv main.go cmd/search/; \
fi
@if [ -d adapters ]; then \
echo "Moving adapter files to internal/adapters/..."; \
mv adapters/* internal/adapters/ 2>/dev/null || true; \
rmdir adapters; \
fi
@if [ -f main_test.go ]; then \
echo "Moving main_test.go to internal/formatter/formatter_test.go..."; \
mv main_test.go internal/formatter/formatter_test.go; \
fi
@if [ -f search.py ]; then \
echo "Removing Python version..."; \
rm search.py; \
fi
@echo "Updating go.mod..."
@$(GOMOD) init github.com/regismesquita/search-cli || true
@$(GOMOD) tidy
@echo "Project structure setup complete"
# Help
help:
@echo "Available commands:"
@echo " make build - Build the project"
@echo " make clean - Clean build files"
@echo " make test - Run tests"
@echo " make test-coverage - Run tests with coverage report"
@echo " make test-verbose - Run tests with verbose output"
@echo " make deps - Download dependencies"
@echo " make lint - Run linter"
@echo " make install - Install binary to ~/go/bin"
@echo " make local-install - Install binary to /usr/local/bin"
@echo " make run - Run the application (requires query='your search query')"
@echo " make setup - Setup project structure"
# Default target
.DEFAULT_GOAL := help