diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..28da678 --- /dev/null +++ b/Makefile @@ -0,0 +1,167 @@ +# Adopt-a-Street Makefile +# Provides convenient commands for building and running the application + +.PHONY: help install build run dev test clean lint format + +# Default target +help: + @echo "Adopt-a-Street Development Commands" + @echo "" + @echo "Setup & Installation:" + @echo " install Install dependencies for both frontend and backend" + @echo " clean Clean node_modules and build artifacts" + @echo "" + @echo "Development:" + @echo " dev Start both frontend and backend in development mode" + @echo " dev-frontend Start frontend development server only" + @echo " dev-backend Start backend development server only" + @echo "" + @echo "Building:" + @echo " build Build both frontend and backend for production" + @echo " build-frontend Build frontend for production" + @echo " build-backend Build backend for production" + @echo "" + @echo "Testing:" + @echo " test Run tests for both frontend and backend" + @echo " test-frontend Run frontend tests" + @echo " test-backend Run backend tests" + @echo " test-coverage Run tests with coverage reports" + @echo "" + @echo "Code Quality:" + @echo " lint Run linting for both frontend and backend" + @echo " lint-frontend Run frontend linting" + @echo " lint-backend Run backend linting" + @echo "" + @echo "Production:" + @echo " run Run production build" + @echo " start Start production servers" + +# Installation +install: + @echo "Installing dependencies..." + cd backend && npm install + cd frontend && npm install + @echo "Dependencies installed successfully!" + +clean: + @echo "Cleaning up..." + rm -rf backend/node_modules + rm -rf frontend/node_modules + rm -rf frontend/build + rm -rf backend/dist + @echo "Cleanup complete!" + +# Development +dev: + @echo "Starting development servers..." + @echo "Backend will start on http://localhost:5000" + @echo "Frontend will start on http://localhost:3000" + @echo "Press Ctrl+C to stop both servers" + @make -j2 dev-frontend dev-backend + +dev-frontend: + @echo "Starting frontend development server..." + cd frontend && npm start + +dev-backend: + @echo "Starting backend development server..." + cd backend && node server.js + +# Building +build: build-frontend build-backend + @echo "Build complete!" + +build-frontend: + @echo "Building frontend for production..." + cd frontend && npm run build + @echo "Frontend build complete!" + +build-backend: + @echo "Backend is ready for production (no build step required for Node.js)" + @echo "Backend production files are in backend/" + +# Testing +test: test-frontend test-backend + @echo "All tests completed!" + +test-frontend: + @echo "Running frontend tests..." + cd frontend && npm test -- --watchAll=false --coverage + +test-backend: + @echo "Running backend tests..." + cd backend && npm test + +test-coverage: + @echo "Running tests with coverage..." + @echo "Backend coverage:" + cd backend && npm run test:coverage + @echo "" + @echo "Frontend coverage:" + cd frontend && npm run test:coverage + +# Code Quality +lint: lint-frontend lint-backend + @echo "Linting complete!" + +lint-frontend: + @echo "Linting frontend..." + cd frontend && npm run lint 2>/dev/null || echo "Frontend linting not configured" + +lint-backend: + @echo "Linting backend..." + cd backend && npx eslint . + +# Production +run: build + @echo "Starting production servers..." + @echo "Note: In production, you would typically use process managers like PM2" + @echo "or container orchestration like Kubernetes" + @echo "See deploy/ directory for Kubernetes deployment files" + +start: + @echo "Starting production backend server..." + cd backend && NODE_ENV=production node server.js + +# Docker (if needed) +docker-build: + @echo "Building Docker images..." + docker build -t adopt-a-street-frontend ./frontend + docker build -t adopt-a-street-backend ./backend + @echo "Docker images built!" + +docker-run: + @echo "Running Docker containers..." + docker run -d -p 3000:3000 --name frontend adopt-a-street-frontend + docker run -d -p 5000:5000 --name backend adopt-a-street-backend + @echo "Docker containers running!" + +# Database (for development) +db-setup: + @echo "Setting up MongoDB..." + @echo "Make sure MongoDB is installed and running on your system" + @echo "Or use Docker: docker run -d -p 27017:27017 --name mongodb mongo" + @echo "Create .env file in backend/ with MONGO_URI and JWT_SECRET" + +# Environment setup +env-setup: + @echo "Setting up environment files..." + @if [ ! -f backend/.env ]; then \ + echo "Creating backend/.env file..."; \ + cp backend/.env.example backend/.env 2>/dev/null || echo "MONGO_URI=mongodb://localhost:27017/adopt-a-street\nJWT_SECRET=your-secret-key-here\nPORT=5000" > backend/.env; \ + echo "Please edit backend/.env with your actual values"; \ + else \ + echo "backend/.env already exists"; \ + fi + +# Quick start for new developers +quick-start: install env-setup db-setup + @echo "" + @echo "Quick start complete!" + @echo "" + @echo "Next steps:" + @echo "1. Edit backend/.env with your MongoDB URI and JWT secret" + @echo "2. Run 'make dev' to start development servers" + @echo "3. Visit http://localhost:3000 to see the application" + @echo "" + @echo "For more commands, run 'make help'" \ No newline at end of file