summaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile183
1 files changed, 183 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..720e2c0
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,183 @@
+# NoshiTalk Makefile
+# Build, test, and manage the NoshiTalk encrypted chat system
+
+.PHONY: all build build-all test test-verbose clean install lint fmt vet help
+.PHONY: server cli-client gui-client web-client
+
+# Build settings
+GO := go
+BINARY_DIR := bin
+LDFLAGS := -ldflags="-s -w"
+BUILD_FLAGS := -trimpath
+
+# Version info
+VERSION := 2.0.0
+GIT_COMMIT := $(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown")
+BUILD_TIME := $(shell date -u '+%Y-%m-%d_%H:%M:%S')
+
+# Default target
+all: build-all
+
+# Build all components
+build-all: server cli-client gui-client web-client
+ @echo "All components built successfully"
+ @ls -la $(BINARY_DIR)/
+
+# Individual component builds
+server:
+ @echo "Building server..."
+ @mkdir -p $(BINARY_DIR)
+ $(GO) build $(BUILD_FLAGS) $(LDFLAGS) -o $(BINARY_DIR)/noshitalk-server ./cmd/server
+
+cli-client:
+ @echo "Building CLI client..."
+ @mkdir -p $(BINARY_DIR)
+ $(GO) build $(BUILD_FLAGS) $(LDFLAGS) -o $(BINARY_DIR)/noshitalk-cli ./cmd/cli-client
+
+gui-client:
+ @echo "Building GUI client..."
+ @mkdir -p $(BINARY_DIR)
+ $(GO) build $(BUILD_FLAGS) $(LDFLAGS) -o $(BINARY_DIR)/noshitalk-gui ./cmd/gui-client
+
+web-client:
+ @echo "Building web client..."
+ @mkdir -p $(BINARY_DIR)
+ $(GO) build $(BUILD_FLAGS) $(LDFLAGS) -o $(BINARY_DIR)/noshitalk-web ./cmd/web-client
+
+# Run tests
+test:
+ @echo "Running tests..."
+ $(GO) test ./pkg/... -cover
+
+test-verbose:
+ @echo "Running tests (verbose)..."
+ $(GO) test ./pkg/... -v -cover
+
+test-race:
+ @echo "Running tests with race detector..."
+ $(GO) test ./pkg/... -race -cover
+
+# Coverage report
+coverage:
+ @echo "Generating coverage report..."
+ @mkdir -p coverage
+ $(GO) test ./pkg/... -coverprofile=coverage/coverage.out
+ $(GO) tool cover -html=coverage/coverage.out -o coverage/coverage.html
+ @echo "Coverage report: coverage/coverage.html"
+
+# Benchmarks
+bench:
+ @echo "Running benchmarks..."
+ $(GO) test ./pkg/... -bench=. -benchmem
+
+# Code quality
+lint:
+ @echo "Running linter..."
+ @which golangci-lint > /dev/null || echo "golangci-lint not installed"
+ golangci-lint run ./...
+
+fmt:
+ @echo "Formatting code..."
+ $(GO) fmt ./...
+
+vet:
+ @echo "Running go vet..."
+ $(GO) vet ./...
+
+# Dependencies
+deps:
+ @echo "Downloading dependencies..."
+ $(GO) mod download
+
+tidy:
+ @echo "Tidying modules..."
+ $(GO) mod tidy
+
+# Clean build artifacts
+clean:
+ @echo "Cleaning..."
+ rm -rf $(BINARY_DIR)
+ rm -rf coverage
+ $(GO) clean -cache -testcache
+
+# Install binaries to GOPATH/bin
+install: build-all
+ @echo "Installing binaries..."
+ cp $(BINARY_DIR)/noshitalk-server $(GOPATH)/bin/ 2>/dev/null || true
+ cp $(BINARY_DIR)/noshitalk-cli $(GOPATH)/bin/ 2>/dev/null || true
+ cp $(BINARY_DIR)/noshitalk-gui $(GOPATH)/bin/ 2>/dev/null || true
+ cp $(BINARY_DIR)/noshitalk-web $(GOPATH)/bin/ 2>/dev/null || true
+ @echo "Installed to GOPATH/bin"
+
+# Development helpers
+dev-server: server
+ @echo "Starting server in development mode..."
+ ./$(BINARY_DIR)/noshitalk-server
+
+dev-web: web-client
+ @echo "Starting web client in development mode..."
+ ./$(BINARY_DIR)/noshitalk-web
+
+# Build for release (all platforms)
+release: clean
+ @echo "Building release binaries..."
+ @mkdir -p $(BINARY_DIR)/release
+ # Linux AMD64
+ GOOS=linux GOARCH=amd64 $(GO) build $(BUILD_FLAGS) $(LDFLAGS) -o $(BINARY_DIR)/release/noshitalk-server-linux-amd64 ./cmd/server
+ GOOS=linux GOARCH=amd64 $(GO) build $(BUILD_FLAGS) $(LDFLAGS) -o $(BINARY_DIR)/release/noshitalk-cli-linux-amd64 ./cmd/cli-client
+ GOOS=linux GOARCH=amd64 $(GO) build $(BUILD_FLAGS) $(LDFLAGS) -o $(BINARY_DIR)/release/noshitalk-web-linux-amd64 ./cmd/web-client
+ # Linux ARM64
+ GOOS=linux GOARCH=arm64 $(GO) build $(BUILD_FLAGS) $(LDFLAGS) -o $(BINARY_DIR)/release/noshitalk-server-linux-arm64 ./cmd/server
+ GOOS=linux GOARCH=arm64 $(GO) build $(BUILD_FLAGS) $(LDFLAGS) -o $(BINARY_DIR)/release/noshitalk-cli-linux-arm64 ./cmd/cli-client
+ # macOS AMD64
+ GOOS=darwin GOARCH=amd64 $(GO) build $(BUILD_FLAGS) $(LDFLAGS) -o $(BINARY_DIR)/release/noshitalk-server-darwin-amd64 ./cmd/server
+ GOOS=darwin GOARCH=amd64 $(GO) build $(BUILD_FLAGS) $(LDFLAGS) -o $(BINARY_DIR)/release/noshitalk-cli-darwin-amd64 ./cmd/cli-client
+ # macOS ARM64 (M1/M2)
+ GOOS=darwin GOARCH=arm64 $(GO) build $(BUILD_FLAGS) $(LDFLAGS) -o $(BINARY_DIR)/release/noshitalk-server-darwin-arm64 ./cmd/server
+ GOOS=darwin GOARCH=arm64 $(GO) build $(BUILD_FLAGS) $(LDFLAGS) -o $(BINARY_DIR)/release/noshitalk-cli-darwin-arm64 ./cmd/cli-client
+ # Windows AMD64
+ GOOS=windows GOARCH=amd64 $(GO) build $(BUILD_FLAGS) $(LDFLAGS) -o $(BINARY_DIR)/release/noshitalk-server-windows-amd64.exe ./cmd/server
+ GOOS=windows GOARCH=amd64 $(GO) build $(BUILD_FLAGS) $(LDFLAGS) -o $(BINARY_DIR)/release/noshitalk-cli-windows-amd64.exe ./cmd/cli-client
+ @echo "Release binaries built in $(BINARY_DIR)/release/"
+ @ls -la $(BINARY_DIR)/release/
+
+# Security check
+security:
+ @echo "Running security checks..."
+ @which gosec > /dev/null || echo "gosec not installed (go install github.com/securego/gosec/v2/cmd/gosec@latest)"
+ gosec ./... || true
+
+# Help
+help:
+ @echo "NoshiTalk Build System"
+ @echo ""
+ @echo "Usage: make [target]"
+ @echo ""
+ @echo "Build targets:"
+ @echo " all - Build all components (default)"
+ @echo " build-all - Build all components"
+ @echo " server - Build server only"
+ @echo " cli-client - Build CLI client only"
+ @echo " gui-client - Build GUI client only"
+ @echo " web-client - Build web client only"
+ @echo " release - Build release binaries for all platforms"
+ @echo ""
+ @echo "Test targets:"
+ @echo " test - Run tests with coverage"
+ @echo " test-verbose - Run tests with verbose output"
+ @echo " test-race - Run tests with race detector"
+ @echo " coverage - Generate HTML coverage report"
+ @echo " bench - Run benchmarks"
+ @echo ""
+ @echo "Quality targets:"
+ @echo " fmt - Format code"
+ @echo " vet - Run go vet"
+ @echo " lint - Run golangci-lint"
+ @echo " security - Run security checks"
+ @echo ""
+ @echo "Other targets:"
+ @echo " deps - Download dependencies"
+ @echo " tidy - Tidy go.mod"
+ @echo " clean - Remove build artifacts"
+ @echo " install - Install binaries to GOPATH/bin"
+ @echo " help - Show this help"