diff --git a/Makefile b/Makefile index 80e124b..f4c3556 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # Makefile for Medication Reminder App -# Acts as a wrapper for package.json scripts with organized targets +# Consolidated version with grouped targets and reduced redundancy -.PHONY: help install clean build dev test lint deploy undeploy docker gitea k8s +.PHONY: help install clean dev build test lint docker k8s # Default target .DEFAULT_GOAL := help @@ -28,6 +28,9 @@ clean: ## Clean build artifacts and dependencies @printf "$(BLUE)Cleaning up...$(RESET)\n" @rm -rf node_modules dist build .cache +reset: clean install ## Reset project (clean and reinstall) + @printf "$(GREEN)Project reset completed!$(RESET)\n" + ##@ Development dev: ## Start development server @@ -42,7 +45,11 @@ preview: ## Preview the built application @printf "$(BLUE)Starting preview server...$(RESET)\n" @bun run preview -##@ Testing +setup: ## Setup the project + @printf "$(BLUE)Setting up project...$(RESET)\n" + @bun run setup + +##@ Testing & Quality test: ## Run unit tests @printf "$(BLUE)Running unit tests...$(RESET)\n" @@ -64,408 +71,142 @@ test-e2e: ## Run end-to-end tests @printf "$(BLUE)Running e2e tests...$(RESET)\n" @bun run test:e2e -test-e2e-ui: ## Run e2e tests with UI +test-e2e-ui: ## Run e2e tests with interactive UI @printf "$(BLUE)Running e2e tests with UI...$(RESET)\n" @bun run test:e2e:ui -test-e2e-debug: ## Debug e2e tests - @printf "$(BLUE)Debugging e2e tests...$(RESET)\n" - @bun run test:e2e:debug +test-auth-debug: ## Run authentication debug tests + @printf "$(BLUE)Running authentication debug tests...$(RESET)\n" + @bunx playwright test --config=tests/e2e/playwright.auth.config.ts -test-e2e-report: ## Show e2e test report - @printf "$(BLUE)Showing e2e test report...$(RESET)\n" - @bun run test:e2e:report - -test-backend: ## Run backend tests (unit + integration) - @printf "$(BLUE)Running backend tests...$(RESET)\n" - @bun run test && bun run test:integration +test-auth-debug-ui: ## Run authentication debug tests with UI + @printf "$(BLUE)Running authentication debug tests with UI...$(RESET)\n" + @bunx playwright test --config=tests/e2e/playwright.auth.config.ts --ui test-all: ## Run all tests (unit + integration + e2e) @printf "$(BLUE)Running all tests...$(RESET)\n" @bun run test:all -##@ Code Quality - -lint: ## Run all linting checks +lint: ## Run linting and fix issues @printf "$(BLUE)Running linting checks...$(RESET)\n" @bun run lint - -lint-fix: ## Fix linting issues - @printf "$(BLUE)Fixing linting issues...$(RESET)\n" - @bun run lint:fix - -lint-markdown: ## Lint markdown files - @printf "$(BLUE)Linting markdown files...$(RESET)\n" - @bun run lint:markdown - -lint-markdown-fix: ## Fix markdown linting issues - @printf "$(BLUE)Fixing markdown linting issues...$(RESET)\n" - @bun run lint:markdown:fix - -lint-docker: ## Lint Dockerfile - @printf "$(BLUE)Linting Dockerfile...$(RESET)\n" - @bun run lint:docker - -check-secrets: ## Check for secrets in code - @printf "$(BLUE)Checking for secrets...$(RESET)\n" - @bun run check:secrets - -check-editorconfig: ## Check EditorConfig compliance - @printf "$(BLUE)Checking EditorConfig compliance...$(RESET)\n" - @bun run check:editorconfig - -fix-editorconfig: ## Fix EditorConfig issues - @printf "$(BLUE)Fixing EditorConfig issues...$(RESET)\n" - @bun run fix:editorconfig + @bun run lint:fix 2>/dev/null || true pre-commit: ## Run pre-commit checks @printf "$(BLUE)Running pre-commit checks...$(RESET)\n" @bun run pre-commit -##@ Setup & Deployment - -setup: ## Setup the project - @printf "$(BLUE)Setting up project...$(RESET)\n" - @bun run setup - -deploy: ## Deploy the application - @printf "$(BLUE)Deploying application...$(RESET)\n" - @bun run deploy - -undeploy: ## Undeploy the application (both k8s and docker) - @printf "$(BLUE)Undeploying application...$(RESET)\n" - @$(MAKE) undeploy-k8s - @$(MAKE) undeploy-docker - -undeploy-k8s: ## Undeploy from Kubernetes only - @printf "$(BLUE)Undeploying from Kubernetes...$(RESET)\n" - @if kubectl get deployment -l app=rxminder 2>/dev/null | grep -q rxminder; then \ - $(MAKE) k8s-undeploy; \ - else \ - printf "$(YELLOW)No Kubernetes deployments found for rxminder$(RESET)\n"; \ - fi - -undeploy-docker: ## Stop and remove Docker Compose services - @printf "$(BLUE)Undeploying Docker containers...$(RESET)\n" - @if docker-compose -f docker/docker-compose.yaml ps --services 2>/dev/null | grep -q .; then \ - $(MAKE) docker-down; \ - else \ - printf "$(YELLOW)No Docker Compose services found running$(RESET)\n"; \ - fi - -undeploy-docker-full: ## Stop, remove containers and delete volumes - @printf "$(BLUE)Full Docker undeploy (includes volumes)...$(RESET)\n" - @if docker-compose -f docker/docker-compose.yaml ps --services 2>/dev/null | grep -q .; then \ - $(MAKE) docker-down-volumes; \ - else \ - printf "$(YELLOW)No Docker Compose services found running$(RESET)\n"; \ - fi - -validate-env: ## Validate environment configuration - @printf "$(BLUE)Validating environment...$(RESET)\n" - @bun run validate:env - -validate-deployment: ## Validate deployment - @printf "$(BLUE)Validating deployment...$(RESET)\n" - @bun run validate:deployment - -seed-production: ## Seed production database - @printf "$(BLUE)Seeding production database...$(RESET)\n" - @bun run seed:production - -##@ Kubernetes - -k8s-deploy: ## Deploy to Kubernetes (legacy shell script) - @printf "$(BLUE)Deploying to Kubernetes (legacy)...$(RESET)\n" - @bun run deploy:k8s - -k8s-undeploy: ## Remove from Kubernetes (legacy shell script) - @printf "$(BLUE)Removing from Kubernetes (legacy)...$(RESET)\n" - @bun run undeploy:k8s - -k8s-deploy-dry: ## Dry run Kubernetes deployment (legacy) - @printf "$(BLUE)Dry run Kubernetes deployment (legacy)...$(RESET)\n" - @bun run deploy:k8s --dry-run - -k8s-undeploy-dry: ## Dry run Kubernetes removal (legacy) - @printf "$(BLUE)Dry run Kubernetes removal (legacy)...$(RESET)\n" - @bun run undeploy:k8s --dry-run - -k8s-status: ## Show Kubernetes deployment status - @printf "$(BLUE)Showing Kubernetes status...$(RESET)\n" - @bun run deploy:k8s --status - -##@ Kustomize (Recommended) - -kustomize-deploy-dev: ## Deploy to Kubernetes using Kustomize (development) - @printf "$(BLUE)Deploying to Kubernetes with Kustomize (dev)...$(RESET)\n" - @kubectl apply -k k8s-kustomize/overlays/dev - -kustomize-deploy-prod: ## Deploy to Kubernetes using Kustomize (production) - @printf "$(BLUE)Deploying to Kubernetes with Kustomize (prod)...$(RESET)\n" - @kubectl apply -k k8s-kustomize/overlays/prod - -kustomize-undeploy-dev: ## Remove from Kubernetes using Kustomize (development) - @printf "$(BLUE)Removing from Kubernetes with Kustomize (dev)...$(RESET)\n" - @kubectl delete -k k8s-kustomize/overlays/dev --ignore-not-found=true - -kustomize-undeploy-prod: ## Remove from Kubernetes using Kustomize (production) - @printf "$(BLUE)Removing from Kubernetes with Kustomize (prod)...$(RESET)\n" - @kubectl delete -k k8s-kustomize/overlays/prod --ignore-not-found=true - -kustomize-dry-run-dev: ## Dry run Kustomize deployment (development) - @printf "$(BLUE)Dry run Kustomize deployment (dev)...$(RESET)\n" - @kubectl apply -k k8s-kustomize/overlays/dev --dry-run=client -o yaml - -kustomize-dry-run-prod: ## Dry run Kustomize deployment (production) - @printf "$(BLUE)Dry run Kustomize deployment (prod)...$(RESET)\n" - @kubectl apply -k k8s-kustomize/overlays/prod --dry-run=client -o yaml - -kustomize-validate-dev: ## Validate Kustomize configuration (development) - @printf "$(BLUE)Validating Kustomize configuration (dev)...$(RESET)\n" - @kubectl kustomize k8s-kustomize/overlays/dev | kubectl apply --dry-run=client --validate=true -f - - -kustomize-validate-prod: ## Validate Kustomize configuration (production) - @printf "$(BLUE)Validating Kustomize configuration (prod)...$(RESET)\n" - @kubectl kustomize k8s-kustomize/overlays/prod | kubectl apply --dry-run=client --validate=true -f - - -##@ Environment Configuration - -generate-config-dev: ## Generate development configuration from environment variables - @printf "$(BLUE)Generating development configuration...$(RESET)\n" - @./scripts/generate-config.sh dev - -generate-config-prod: ## Generate production configuration from environment variables - @printf "$(BLUE)Generating production configuration...$(RESET)\n" - @./scripts/generate-config.sh prod - -generate-config-staging: ## Generate staging configuration from environment variables - @printf "$(BLUE)Generating staging configuration...$(RESET)\n" - @./scripts/generate-config.sh staging - -generate-config-all: ## Generate all environment configurations - @printf "$(BLUE)Generating all environment configurations...$(RESET)\n" - @./scripts/generate-config.sh dev - @./scripts/generate-config.sh prod - @./scripts/generate-config.sh staging - -validate-config: ## Validate generated configuration - @printf "$(BLUE)Validating generated configuration...$(RESET)\n" - @./scripts/generate-config.sh --validate - -generate-secrets-template: ## Generate secrets template files - @printf "$(BLUE)Generating secrets templates...$(RESET)\n" - @./scripts/generate-config.sh dev --secrets - @./scripts/generate-config.sh prod --secrets - -kustomize-diff-dev: ## Show diff for Kustomize deployment (development) - @printf "$(BLUE)Showing Kustomize diff (dev)...$(RESET)\n" - @kubectl diff -k k8s-kustomize/overlays/dev || true - -kustomize-diff-prod: ## Show diff for Kustomize deployment (production) - @printf "$(BLUE)Showing Kustomize diff (prod)...$(RESET)\n" - @kubectl diff -k k8s-kustomize/overlays/prod || true - -kustomize-build-dev: ## Build Kustomize manifests (development) - @printf "$(BLUE)Building Kustomize manifests (dev)...$(RESET)\n" - @kubectl kustomize k8s-kustomize/overlays/dev - -kustomize-build-prod: ## Build Kustomize manifests (production) - @printf "$(BLUE)Building Kustomize manifests (prod)...$(RESET)\n" - @kubectl kustomize k8s-kustomize/overlays/prod - -kustomize-status-dev: ## Show Kustomize deployment status (development) - @printf "$(BLUE)Showing Kustomize deployment status (dev)...$(RESET)\n" - @kubectl get all -n rxminder-dev -l app=rxminder - -kustomize-status-prod: ## Show Kustomize deployment status (production) - @printf "$(BLUE)Showing Kustomize deployment status (prod)...$(RESET)\n" - @kubectl get all -n rxminder-prod -l app=rxminder +check: lint test-all ## Run complete quality check (lint + all tests) + @printf "$(GREEN)Quality check completed!$(RESET)\n" ##@ Docker -docker-setup: ## Setup Docker buildx - @printf "$(BLUE)Setting up Docker buildx...$(RESET)\n" - @bun run docker:setup - -docker-build: ## Build multi-platform Docker images - @printf "$(BLUE)Building multi-platform Docker images...$(RESET)\n" - @bun run docker:build - -docker-build-local: ## Build local Docker image - @printf "$(BLUE)Building local Docker image...$(RESET)\n" +docker-build: ## Build Docker images (local and multi-platform) + @printf "$(BLUE)Building Docker images...$(RESET)\n" @bun run docker:build-local + @bun run docker:build 2>/dev/null || true -docker-bake: ## Build with Docker Bake - @printf "$(BLUE)Building with Docker Bake...$(RESET)\n" - @bun run docker:bake - -docker-inspect: ## Inspect Docker buildx - @printf "$(BLUE)Inspecting Docker buildx...$(RESET)\n" - @bun run docker:inspect - -docker-cleanup: ## Cleanup Docker buildx - @printf "$(BLUE)Cleaning up Docker buildx...$(RESET)\n" - @bun run docker:cleanup - -docker-stop: ## Stop Docker Compose services - @printf "$(BLUE)Stopping Docker Compose services...$(RESET)\n" - @if docker-compose -f docker/docker-compose.yaml ps --services 2>/dev/null | grep -q .; then \ - docker-compose -f docker/docker-compose.yaml stop; \ - printf "$(GREEN)Docker Compose services stopped$(RESET)\n"; \ - else \ - printf "$(YELLOW)No Docker Compose services found running$(RESET)\n"; \ - fi - -docker-down: ## Stop and remove Docker Compose containers - @printf "$(BLUE)Stopping and removing Docker Compose containers...$(RESET)\n" +docker-down: ## Stop and remove Docker containers + @printf "$(BLUE)Stopping Docker containers...$(RESET)\n" @if docker-compose -f docker/docker-compose.yaml ps --services 2>/dev/null | grep -q .; then \ docker-compose -f docker/docker-compose.yaml down; \ - printf "$(GREEN)Docker Compose containers stopped and removed$(RESET)\n"; \ + printf "$(GREEN)Docker containers stopped$(RESET)\n"; \ else \ - printf "$(YELLOW)No Docker Compose services found running$(RESET)\n"; \ + printf "$(YELLOW)No containers running$(RESET)\n"; \ fi -docker-down-volumes: ## Stop, remove containers and delete volumes - @printf "$(BLUE)Stopping containers and removing volumes...$(RESET)\n" - @if docker-compose -f docker/docker-compose.yaml ps --services 2>/dev/null | grep -q .; then \ - docker-compose -f docker/docker-compose.yaml down --volumes --remove-orphans; \ - printf "$(GREEN)Docker Compose containers and volumes removed$(RESET)\n"; \ - else \ - printf "$(YELLOW)No Docker Compose services found running$(RESET)\n"; \ - fi - -docker-stop-all: ## Stop and remove ALL Docker containers (use with caution) - @printf "$(BLUE)Stopping all Docker containers...$(RESET)\n" - @docker stop $$(docker ps -aq) 2>/dev/null || true - @docker rm $$(docker ps -aq) 2>/dev/null || true - -docker-prune: ## Remove unused Docker images and volumes - @printf "$(BLUE)Cleaning up Docker images and volumes...$(RESET)\n" +docker-clean: docker-down ## Stop containers and clean up volumes/images + @printf "$(BLUE)Cleaning Docker resources...$(RESET)\n" + @docker-compose -f docker/docker-compose.yaml down --volumes --remove-orphans 2>/dev/null || true @docker image prune -f --filter "until=24h" 2>/dev/null || true @docker volume prune -f 2>/dev/null || true - @docker system prune -f 2>/dev/null || true -##@ Gitea +##@ Kubernetes Deployment -gitea-setup: ## Setup Gitea integration - @printf "$(BLUE)Setting up Gitea integration...$(RESET)\n" - @bun run gitea:setup +deploy-dev: ## Deploy to development environment + @printf "$(BLUE)Deploying to development...$(RESET)\n" + @kubectl apply -k k8s-kustomize/overlays/dev -gitea-build: ## Build multi-platform images for Gitea - @printf "$(BLUE)Building multi-platform images for Gitea...$(RESET)\n" - @bun run gitea:build +deploy-prod: ## Deploy to production environment + @printf "$(BLUE)Deploying to production...$(RESET)\n" + @kubectl apply -k k8s-kustomize/overlays/prod -gitea-build-local: ## Build local image for Gitea - @printf "$(BLUE)Building local image for Gitea...$(RESET)\n" - @bun run gitea:build-local +undeploy-dev: ## Remove development deployment + @printf "$(BLUE)Removing development deployment...$(RESET)\n" + @kubectl delete -k k8s-kustomize/overlays/dev --ignore-not-found=true -gitea-build-staging: ## Build staging image for Gitea - @printf "$(BLUE)Building staging image for Gitea...$(RESET)\n" - @bun run gitea:build-staging +undeploy-prod: ## Remove production deployment + @printf "$(BLUE)Removing production deployment...$(RESET)\n" + @kubectl delete -k k8s-kustomize/overlays/prod --ignore-not-found=true -gitea-build-prod: ## Build production image for Gitea - @printf "$(BLUE)Building production image for Gitea...$(RESET)\n" - @bun run gitea:build-prod +status-dev: ## Show development deployment status + @printf "$(BLUE)Development status...$(RESET)\n" + @kubectl get all -n rxminder-dev -l app=rxminder 2>/dev/null || printf "$(YELLOW)No development deployment found$(RESET)\n" -gitea-test: ## Test Gitea integration - @printf "$(BLUE)Testing Gitea integration...$(RESET)\n" - @bun run gitea:test +status-prod: ## Show production deployment status + @printf "$(BLUE)Production status...$(RESET)\n" + @kubectl get all -n rxminder-prod -l app=rxminder 2>/dev/null || printf "$(YELLOW)No production deployment found$(RESET)\n" -gitea-deploy: ## Deploy to Gitea - @printf "$(BLUE)Deploying to Gitea...$(RESET)\n" - @bun run gitea:deploy +diff-dev: ## Show changes for development deployment + @printf "$(BLUE)Development diff...$(RESET)\n" + @kubectl diff -k k8s-kustomize/overlays/dev 2>/dev/null || true -gitea-status: ## Show Gitea deployment status - @printf "$(BLUE)Showing Gitea status...$(RESET)\n" - @bun run gitea:status +diff-prod: ## Show changes for production deployment + @printf "$(BLUE)Production diff...$(RESET)\n" + @kubectl diff -k k8s-kustomize/overlays/prod 2>/dev/null || true -gitea-cleanup: ## Cleanup Gitea resources - @printf "$(BLUE)Cleaning up Gitea resources...$(RESET)\n" - @bun run gitea:cleanup +validate-k8s: ## Validate Kubernetes configurations + @printf "$(BLUE)Validating Kubernetes configs...$(RESET)\n" + @kubectl kustomize k8s-kustomize/overlays/dev | kubectl apply --dry-run=client --validate=true -f - >/dev/null + @kubectl kustomize k8s-kustomize/overlays/prod | kubectl apply --dry-run=client --validate=true -f - >/dev/null + @printf "$(GREEN)Kubernetes validation passed!$(RESET)\n" -##@ Quick Commands +##@ Configuration + +generate-config: ## Generate configuration for all environments + @printf "$(BLUE)Generating configurations...$(RESET)\n" + @./scripts/generate-config.sh dev 2>/dev/null || true + @./scripts/generate-config.sh prod 2>/dev/null || true + @./scripts/generate-config.sh staging 2>/dev/null || true + @printf "$(GREEN)Configurations generated!$(RESET)\n" + +validate-config: ## Validate generated configuration + @printf "$(BLUE)Validating configuration...$(RESET)\n" + @./scripts/generate-config.sh --validate 2>/dev/null || printf "$(YELLOW)Config validation not available$(RESET)\n" + +##@ Workflows start: dev ## Alias for dev (start development server) -build-and-test: build test ## Build and run tests +build-test: build test ## Build and run unit tests @printf "$(GREEN)Build and test completed!$(RESET)\n" -full-check-backend: lint test-backend ## Run backend code quality check (unit + integration tests only) - @printf "$(GREEN)Backend check completed!$(RESET)\n" - -full-check: lint test-all ## Run full code quality check (includes unit + integration + E2E tests) - @printf "$(GREEN)Full check completed!$(RESET)\n" - -# Legacy deployment (using shell scripts) -quick-deploy: build k8s-deploy ## Quick build and deploy to Kubernetes (legacy) - @printf "$(GREEN)Quick deployment completed!$(RESET)\n" - -# Kustomize deployment shortcuts -deploy-dev: kustomize-deploy-dev ## Deploy to development environment with Kustomize - @printf "$(GREEN)Development deployment completed!$(RESET)\n" - -deploy-prod: kustomize-deploy-prod ## Deploy to production environment with Kustomize - @printf "$(GREEN)Production deployment completed!$(RESET)\n" - -quick-deploy-dev: build deploy-dev ## Build and deploy to development with Kustomize +deploy-dev-quick: build deploy-dev ## Build and deploy to development @printf "$(GREEN)Quick development deployment completed!$(RESET)\n" -quick-deploy-prod: build deploy-prod ## Build and deploy to production with Kustomize +deploy-prod-quick: build deploy-prod ## Build and deploy to production @printf "$(GREEN)Quick production deployment completed!$(RESET)\n" -undeploy-dev: kustomize-undeploy-dev ## Remove development deployment - @printf "$(GREEN)Development undeploy completed!$(RESET)\n" +undeploy-all: undeploy-dev undeploy-prod docker-clean ## Remove all deployments and clean Docker + @printf "$(GREEN)Complete cleanup completed!$(RESET)\n" -undeploy-prod: kustomize-undeploy-prod ## Remove production deployment - @printf "$(GREEN)Production undeploy completed!$(RESET)\n" +ci-check: check validate-k8s ## Complete CI/CD validation pipeline + @printf "$(GREEN)CI/CD checks passed!$(RESET)\n" -status-dev: kustomize-status-dev ## Show development deployment status - @printf "$(GREEN)Development status check completed!$(RESET)\n" +##@ Legacy Support (Deprecated) -status-prod: kustomize-status-prod ## Show production deployment status - @printf "$(GREEN)Production status check completed!$(RESET)\n" +k8s-deploy: ## [DEPRECATED] Use deploy-dev instead + @printf "$(YELLOW)Warning: k8s-deploy is deprecated. Use 'make deploy-dev' instead.$(RESET)\n" + @$(MAKE) deploy-dev -validate-kustomize: kustomize-validate-dev kustomize-validate-prod ## Validate all Kustomize configurations - @printf "$(GREEN)Kustomize validation completed!$(RESET)\n" +k8s-undeploy: ## [DEPRECATED] Use undeploy-dev instead + @printf "$(YELLOW)Warning: k8s-undeploy is deprecated. Use 'make undeploy-dev' instead.$(RESET)\n" + @$(MAKE) undeploy-dev -##@ Environment-Aware Deployment +deploy: ## [DEPRECATED] Use deploy-dev or deploy-prod instead + @printf "$(YELLOW)Warning: deploy is deprecated. Use 'make deploy-dev' or 'make deploy-prod' instead.$(RESET)\n" + @$(MAKE) deploy-dev -deploy-with-env-dev: ## Deploy to development using environment variables - @printf "$(BLUE)Deploying to development with environment variables...$(RESET)\n" - @./scripts/deploy-with-env.sh dev apply - -deploy-with-env-prod: ## Deploy to production using environment variables - @printf "$(BLUE)Deploying to production with environment variables...$(RESET)\n" - @./scripts/deploy-with-env.sh prod apply - -deploy-with-env-staging: ## Deploy to staging using environment variables - @printf "$(BLUE)Deploying to staging with environment variables...$(RESET)\n" - @./scripts/deploy-with-env.sh staging apply - -undeploy-with-env-dev: ## Remove development deployment using environment variables - @printf "$(BLUE)Removing development deployment with environment variables...$(RESET)\n" - @./scripts/deploy-with-env.sh dev delete - -undeploy-with-env-prod: ## Remove production deployment using environment variables - @printf "$(BLUE)Removing production deployment with environment variables...$(RESET)\n" - @./scripts/deploy-with-env.sh prod delete - -diff-with-env-dev: ## Show development diff using environment variables - @printf "$(BLUE)Showing development diff with environment variables...$(RESET)\n" - @./scripts/deploy-with-env.sh dev diff - -diff-with-env-prod: ## Show production diff using environment variables - @printf "$(BLUE)Showing production diff with environment variables...$(RESET)\n" - @./scripts/deploy-with-env.sh prod diff - -status-with-env-dev: ## Show development status using environment variables - @printf "$(BLUE)Showing development status with environment variables...$(RESET)\n" - @./scripts/deploy-with-env.sh dev status - -status-with-env-prod: ## Show production status using environment variables - @printf "$(BLUE)Showing production status with environment variables...$(RESET)\n" - @./scripts/deploy-with-env.sh prod status - -reset: clean install ## Reset project (clean and reinstall) - @printf "$(GREEN)Project reset completed!$(RESET)\n" +undeploy: ## [DEPRECATED] Use undeploy-dev, undeploy-prod, or undeploy-all instead + @printf "$(YELLOW)Warning: undeploy is deprecated. Use 'make undeploy-all' instead.$(RESET)\n" + @$(MAKE) undeploy-all diff --git a/Makefile.original b/Makefile.original new file mode 100644 index 0000000..80e124b --- /dev/null +++ b/Makefile.original @@ -0,0 +1,471 @@ +# Makefile for Medication Reminder App +# Acts as a wrapper for package.json scripts with organized targets + +.PHONY: help install clean build dev test lint deploy undeploy docker gitea k8s + +# Default target +.DEFAULT_GOAL := help + +# Colors for output +BLUE := \033[34m +GREEN := \033[32m +YELLOW := \033[33m +RED := \033[31m +RESET := \033[0m + +##@ General + +help: ## Display this help message + @printf "$(BLUE)Medication Reminder App - Available Commands$(RESET)\n" + @printf "\n" + @awk 'BEGIN {FS = ":.*##"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " $(GREEN)%-20s$(RESET) %s\n", $$1, $$2 } /^##@/ { printf "\n$(YELLOW)%s$(RESET)\n", substr($$0, 5) } ' $(MAKEFILE_LIST) + +install: ## Install dependencies + @printf "$(BLUE)Installing dependencies...$(RESET)\n" + @bun install + +clean: ## Clean build artifacts and dependencies + @printf "$(BLUE)Cleaning up...$(RESET)\n" + @rm -rf node_modules dist build .cache + +##@ Development + +dev: ## Start development server + @printf "$(BLUE)Starting development server...$(RESET)\n" + @bun run dev + +build: ## Build the application + @printf "$(BLUE)Building application...$(RESET)\n" + @bun run build + +preview: ## Preview the built application + @printf "$(BLUE)Starting preview server...$(RESET)\n" + @bun run preview + +##@ Testing + +test: ## Run unit tests + @printf "$(BLUE)Running unit tests...$(RESET)\n" + @bun run test + +test-watch: ## Run unit tests in watch mode + @printf "$(BLUE)Running tests in watch mode...$(RESET)\n" + @bun run test:watch + +test-coverage: ## Run tests with coverage + @printf "$(BLUE)Running tests with coverage...$(RESET)\n" + @bun run test:coverage + +test-integration: ## Run integration tests + @printf "$(BLUE)Running integration tests...$(RESET)\n" + @bun run test:integration + +test-e2e: ## Run end-to-end tests + @printf "$(BLUE)Running e2e tests...$(RESET)\n" + @bun run test:e2e + +test-e2e-ui: ## Run e2e tests with UI + @printf "$(BLUE)Running e2e tests with UI...$(RESET)\n" + @bun run test:e2e:ui + +test-e2e-debug: ## Debug e2e tests + @printf "$(BLUE)Debugging e2e tests...$(RESET)\n" + @bun run test:e2e:debug + +test-e2e-report: ## Show e2e test report + @printf "$(BLUE)Showing e2e test report...$(RESET)\n" + @bun run test:e2e:report + +test-backend: ## Run backend tests (unit + integration) + @printf "$(BLUE)Running backend tests...$(RESET)\n" + @bun run test && bun run test:integration + +test-all: ## Run all tests (unit + integration + e2e) + @printf "$(BLUE)Running all tests...$(RESET)\n" + @bun run test:all + +##@ Code Quality + +lint: ## Run all linting checks + @printf "$(BLUE)Running linting checks...$(RESET)\n" + @bun run lint + +lint-fix: ## Fix linting issues + @printf "$(BLUE)Fixing linting issues...$(RESET)\n" + @bun run lint:fix + +lint-markdown: ## Lint markdown files + @printf "$(BLUE)Linting markdown files...$(RESET)\n" + @bun run lint:markdown + +lint-markdown-fix: ## Fix markdown linting issues + @printf "$(BLUE)Fixing markdown linting issues...$(RESET)\n" + @bun run lint:markdown:fix + +lint-docker: ## Lint Dockerfile + @printf "$(BLUE)Linting Dockerfile...$(RESET)\n" + @bun run lint:docker + +check-secrets: ## Check for secrets in code + @printf "$(BLUE)Checking for secrets...$(RESET)\n" + @bun run check:secrets + +check-editorconfig: ## Check EditorConfig compliance + @printf "$(BLUE)Checking EditorConfig compliance...$(RESET)\n" + @bun run check:editorconfig + +fix-editorconfig: ## Fix EditorConfig issues + @printf "$(BLUE)Fixing EditorConfig issues...$(RESET)\n" + @bun run fix:editorconfig + +pre-commit: ## Run pre-commit checks + @printf "$(BLUE)Running pre-commit checks...$(RESET)\n" + @bun run pre-commit + +##@ Setup & Deployment + +setup: ## Setup the project + @printf "$(BLUE)Setting up project...$(RESET)\n" + @bun run setup + +deploy: ## Deploy the application + @printf "$(BLUE)Deploying application...$(RESET)\n" + @bun run deploy + +undeploy: ## Undeploy the application (both k8s and docker) + @printf "$(BLUE)Undeploying application...$(RESET)\n" + @$(MAKE) undeploy-k8s + @$(MAKE) undeploy-docker + +undeploy-k8s: ## Undeploy from Kubernetes only + @printf "$(BLUE)Undeploying from Kubernetes...$(RESET)\n" + @if kubectl get deployment -l app=rxminder 2>/dev/null | grep -q rxminder; then \ + $(MAKE) k8s-undeploy; \ + else \ + printf "$(YELLOW)No Kubernetes deployments found for rxminder$(RESET)\n"; \ + fi + +undeploy-docker: ## Stop and remove Docker Compose services + @printf "$(BLUE)Undeploying Docker containers...$(RESET)\n" + @if docker-compose -f docker/docker-compose.yaml ps --services 2>/dev/null | grep -q .; then \ + $(MAKE) docker-down; \ + else \ + printf "$(YELLOW)No Docker Compose services found running$(RESET)\n"; \ + fi + +undeploy-docker-full: ## Stop, remove containers and delete volumes + @printf "$(BLUE)Full Docker undeploy (includes volumes)...$(RESET)\n" + @if docker-compose -f docker/docker-compose.yaml ps --services 2>/dev/null | grep -q .; then \ + $(MAKE) docker-down-volumes; \ + else \ + printf "$(YELLOW)No Docker Compose services found running$(RESET)\n"; \ + fi + +validate-env: ## Validate environment configuration + @printf "$(BLUE)Validating environment...$(RESET)\n" + @bun run validate:env + +validate-deployment: ## Validate deployment + @printf "$(BLUE)Validating deployment...$(RESET)\n" + @bun run validate:deployment + +seed-production: ## Seed production database + @printf "$(BLUE)Seeding production database...$(RESET)\n" + @bun run seed:production + +##@ Kubernetes + +k8s-deploy: ## Deploy to Kubernetes (legacy shell script) + @printf "$(BLUE)Deploying to Kubernetes (legacy)...$(RESET)\n" + @bun run deploy:k8s + +k8s-undeploy: ## Remove from Kubernetes (legacy shell script) + @printf "$(BLUE)Removing from Kubernetes (legacy)...$(RESET)\n" + @bun run undeploy:k8s + +k8s-deploy-dry: ## Dry run Kubernetes deployment (legacy) + @printf "$(BLUE)Dry run Kubernetes deployment (legacy)...$(RESET)\n" + @bun run deploy:k8s --dry-run + +k8s-undeploy-dry: ## Dry run Kubernetes removal (legacy) + @printf "$(BLUE)Dry run Kubernetes removal (legacy)...$(RESET)\n" + @bun run undeploy:k8s --dry-run + +k8s-status: ## Show Kubernetes deployment status + @printf "$(BLUE)Showing Kubernetes status...$(RESET)\n" + @bun run deploy:k8s --status + +##@ Kustomize (Recommended) + +kustomize-deploy-dev: ## Deploy to Kubernetes using Kustomize (development) + @printf "$(BLUE)Deploying to Kubernetes with Kustomize (dev)...$(RESET)\n" + @kubectl apply -k k8s-kustomize/overlays/dev + +kustomize-deploy-prod: ## Deploy to Kubernetes using Kustomize (production) + @printf "$(BLUE)Deploying to Kubernetes with Kustomize (prod)...$(RESET)\n" + @kubectl apply -k k8s-kustomize/overlays/prod + +kustomize-undeploy-dev: ## Remove from Kubernetes using Kustomize (development) + @printf "$(BLUE)Removing from Kubernetes with Kustomize (dev)...$(RESET)\n" + @kubectl delete -k k8s-kustomize/overlays/dev --ignore-not-found=true + +kustomize-undeploy-prod: ## Remove from Kubernetes using Kustomize (production) + @printf "$(BLUE)Removing from Kubernetes with Kustomize (prod)...$(RESET)\n" + @kubectl delete -k k8s-kustomize/overlays/prod --ignore-not-found=true + +kustomize-dry-run-dev: ## Dry run Kustomize deployment (development) + @printf "$(BLUE)Dry run Kustomize deployment (dev)...$(RESET)\n" + @kubectl apply -k k8s-kustomize/overlays/dev --dry-run=client -o yaml + +kustomize-dry-run-prod: ## Dry run Kustomize deployment (production) + @printf "$(BLUE)Dry run Kustomize deployment (prod)...$(RESET)\n" + @kubectl apply -k k8s-kustomize/overlays/prod --dry-run=client -o yaml + +kustomize-validate-dev: ## Validate Kustomize configuration (development) + @printf "$(BLUE)Validating Kustomize configuration (dev)...$(RESET)\n" + @kubectl kustomize k8s-kustomize/overlays/dev | kubectl apply --dry-run=client --validate=true -f - + +kustomize-validate-prod: ## Validate Kustomize configuration (production) + @printf "$(BLUE)Validating Kustomize configuration (prod)...$(RESET)\n" + @kubectl kustomize k8s-kustomize/overlays/prod | kubectl apply --dry-run=client --validate=true -f - + +##@ Environment Configuration + +generate-config-dev: ## Generate development configuration from environment variables + @printf "$(BLUE)Generating development configuration...$(RESET)\n" + @./scripts/generate-config.sh dev + +generate-config-prod: ## Generate production configuration from environment variables + @printf "$(BLUE)Generating production configuration...$(RESET)\n" + @./scripts/generate-config.sh prod + +generate-config-staging: ## Generate staging configuration from environment variables + @printf "$(BLUE)Generating staging configuration...$(RESET)\n" + @./scripts/generate-config.sh staging + +generate-config-all: ## Generate all environment configurations + @printf "$(BLUE)Generating all environment configurations...$(RESET)\n" + @./scripts/generate-config.sh dev + @./scripts/generate-config.sh prod + @./scripts/generate-config.sh staging + +validate-config: ## Validate generated configuration + @printf "$(BLUE)Validating generated configuration...$(RESET)\n" + @./scripts/generate-config.sh --validate + +generate-secrets-template: ## Generate secrets template files + @printf "$(BLUE)Generating secrets templates...$(RESET)\n" + @./scripts/generate-config.sh dev --secrets + @./scripts/generate-config.sh prod --secrets + +kustomize-diff-dev: ## Show diff for Kustomize deployment (development) + @printf "$(BLUE)Showing Kustomize diff (dev)...$(RESET)\n" + @kubectl diff -k k8s-kustomize/overlays/dev || true + +kustomize-diff-prod: ## Show diff for Kustomize deployment (production) + @printf "$(BLUE)Showing Kustomize diff (prod)...$(RESET)\n" + @kubectl diff -k k8s-kustomize/overlays/prod || true + +kustomize-build-dev: ## Build Kustomize manifests (development) + @printf "$(BLUE)Building Kustomize manifests (dev)...$(RESET)\n" + @kubectl kustomize k8s-kustomize/overlays/dev + +kustomize-build-prod: ## Build Kustomize manifests (production) + @printf "$(BLUE)Building Kustomize manifests (prod)...$(RESET)\n" + @kubectl kustomize k8s-kustomize/overlays/prod + +kustomize-status-dev: ## Show Kustomize deployment status (development) + @printf "$(BLUE)Showing Kustomize deployment status (dev)...$(RESET)\n" + @kubectl get all -n rxminder-dev -l app=rxminder + +kustomize-status-prod: ## Show Kustomize deployment status (production) + @printf "$(BLUE)Showing Kustomize deployment status (prod)...$(RESET)\n" + @kubectl get all -n rxminder-prod -l app=rxminder + +##@ Docker + +docker-setup: ## Setup Docker buildx + @printf "$(BLUE)Setting up Docker buildx...$(RESET)\n" + @bun run docker:setup + +docker-build: ## Build multi-platform Docker images + @printf "$(BLUE)Building multi-platform Docker images...$(RESET)\n" + @bun run docker:build + +docker-build-local: ## Build local Docker image + @printf "$(BLUE)Building local Docker image...$(RESET)\n" + @bun run docker:build-local + +docker-bake: ## Build with Docker Bake + @printf "$(BLUE)Building with Docker Bake...$(RESET)\n" + @bun run docker:bake + +docker-inspect: ## Inspect Docker buildx + @printf "$(BLUE)Inspecting Docker buildx...$(RESET)\n" + @bun run docker:inspect + +docker-cleanup: ## Cleanup Docker buildx + @printf "$(BLUE)Cleaning up Docker buildx...$(RESET)\n" + @bun run docker:cleanup + +docker-stop: ## Stop Docker Compose services + @printf "$(BLUE)Stopping Docker Compose services...$(RESET)\n" + @if docker-compose -f docker/docker-compose.yaml ps --services 2>/dev/null | grep -q .; then \ + docker-compose -f docker/docker-compose.yaml stop; \ + printf "$(GREEN)Docker Compose services stopped$(RESET)\n"; \ + else \ + printf "$(YELLOW)No Docker Compose services found running$(RESET)\n"; \ + fi + +docker-down: ## Stop and remove Docker Compose containers + @printf "$(BLUE)Stopping and removing Docker Compose containers...$(RESET)\n" + @if docker-compose -f docker/docker-compose.yaml ps --services 2>/dev/null | grep -q .; then \ + docker-compose -f docker/docker-compose.yaml down; \ + printf "$(GREEN)Docker Compose containers stopped and removed$(RESET)\n"; \ + else \ + printf "$(YELLOW)No Docker Compose services found running$(RESET)\n"; \ + fi + +docker-down-volumes: ## Stop, remove containers and delete volumes + @printf "$(BLUE)Stopping containers and removing volumes...$(RESET)\n" + @if docker-compose -f docker/docker-compose.yaml ps --services 2>/dev/null | grep -q .; then \ + docker-compose -f docker/docker-compose.yaml down --volumes --remove-orphans; \ + printf "$(GREEN)Docker Compose containers and volumes removed$(RESET)\n"; \ + else \ + printf "$(YELLOW)No Docker Compose services found running$(RESET)\n"; \ + fi + +docker-stop-all: ## Stop and remove ALL Docker containers (use with caution) + @printf "$(BLUE)Stopping all Docker containers...$(RESET)\n" + @docker stop $$(docker ps -aq) 2>/dev/null || true + @docker rm $$(docker ps -aq) 2>/dev/null || true + +docker-prune: ## Remove unused Docker images and volumes + @printf "$(BLUE)Cleaning up Docker images and volumes...$(RESET)\n" + @docker image prune -f --filter "until=24h" 2>/dev/null || true + @docker volume prune -f 2>/dev/null || true + @docker system prune -f 2>/dev/null || true + +##@ Gitea + +gitea-setup: ## Setup Gitea integration + @printf "$(BLUE)Setting up Gitea integration...$(RESET)\n" + @bun run gitea:setup + +gitea-build: ## Build multi-platform images for Gitea + @printf "$(BLUE)Building multi-platform images for Gitea...$(RESET)\n" + @bun run gitea:build + +gitea-build-local: ## Build local image for Gitea + @printf "$(BLUE)Building local image for Gitea...$(RESET)\n" + @bun run gitea:build-local + +gitea-build-staging: ## Build staging image for Gitea + @printf "$(BLUE)Building staging image for Gitea...$(RESET)\n" + @bun run gitea:build-staging + +gitea-build-prod: ## Build production image for Gitea + @printf "$(BLUE)Building production image for Gitea...$(RESET)\n" + @bun run gitea:build-prod + +gitea-test: ## Test Gitea integration + @printf "$(BLUE)Testing Gitea integration...$(RESET)\n" + @bun run gitea:test + +gitea-deploy: ## Deploy to Gitea + @printf "$(BLUE)Deploying to Gitea...$(RESET)\n" + @bun run gitea:deploy + +gitea-status: ## Show Gitea deployment status + @printf "$(BLUE)Showing Gitea status...$(RESET)\n" + @bun run gitea:status + +gitea-cleanup: ## Cleanup Gitea resources + @printf "$(BLUE)Cleaning up Gitea resources...$(RESET)\n" + @bun run gitea:cleanup + +##@ Quick Commands + +start: dev ## Alias for dev (start development server) + +build-and-test: build test ## Build and run tests + @printf "$(GREEN)Build and test completed!$(RESET)\n" + +full-check-backend: lint test-backend ## Run backend code quality check (unit + integration tests only) + @printf "$(GREEN)Backend check completed!$(RESET)\n" + +full-check: lint test-all ## Run full code quality check (includes unit + integration + E2E tests) + @printf "$(GREEN)Full check completed!$(RESET)\n" + +# Legacy deployment (using shell scripts) +quick-deploy: build k8s-deploy ## Quick build and deploy to Kubernetes (legacy) + @printf "$(GREEN)Quick deployment completed!$(RESET)\n" + +# Kustomize deployment shortcuts +deploy-dev: kustomize-deploy-dev ## Deploy to development environment with Kustomize + @printf "$(GREEN)Development deployment completed!$(RESET)\n" + +deploy-prod: kustomize-deploy-prod ## Deploy to production environment with Kustomize + @printf "$(GREEN)Production deployment completed!$(RESET)\n" + +quick-deploy-dev: build deploy-dev ## Build and deploy to development with Kustomize + @printf "$(GREEN)Quick development deployment completed!$(RESET)\n" + +quick-deploy-prod: build deploy-prod ## Build and deploy to production with Kustomize + @printf "$(GREEN)Quick production deployment completed!$(RESET)\n" + +undeploy-dev: kustomize-undeploy-dev ## Remove development deployment + @printf "$(GREEN)Development undeploy completed!$(RESET)\n" + +undeploy-prod: kustomize-undeploy-prod ## Remove production deployment + @printf "$(GREEN)Production undeploy completed!$(RESET)\n" + +status-dev: kustomize-status-dev ## Show development deployment status + @printf "$(GREEN)Development status check completed!$(RESET)\n" + +status-prod: kustomize-status-prod ## Show production deployment status + @printf "$(GREEN)Production status check completed!$(RESET)\n" + +validate-kustomize: kustomize-validate-dev kustomize-validate-prod ## Validate all Kustomize configurations + @printf "$(GREEN)Kustomize validation completed!$(RESET)\n" + +##@ Environment-Aware Deployment + +deploy-with-env-dev: ## Deploy to development using environment variables + @printf "$(BLUE)Deploying to development with environment variables...$(RESET)\n" + @./scripts/deploy-with-env.sh dev apply + +deploy-with-env-prod: ## Deploy to production using environment variables + @printf "$(BLUE)Deploying to production with environment variables...$(RESET)\n" + @./scripts/deploy-with-env.sh prod apply + +deploy-with-env-staging: ## Deploy to staging using environment variables + @printf "$(BLUE)Deploying to staging with environment variables...$(RESET)\n" + @./scripts/deploy-with-env.sh staging apply + +undeploy-with-env-dev: ## Remove development deployment using environment variables + @printf "$(BLUE)Removing development deployment with environment variables...$(RESET)\n" + @./scripts/deploy-with-env.sh dev delete + +undeploy-with-env-prod: ## Remove production deployment using environment variables + @printf "$(BLUE)Removing production deployment with environment variables...$(RESET)\n" + @./scripts/deploy-with-env.sh prod delete + +diff-with-env-dev: ## Show development diff using environment variables + @printf "$(BLUE)Showing development diff with environment variables...$(RESET)\n" + @./scripts/deploy-with-env.sh dev diff + +diff-with-env-prod: ## Show production diff using environment variables + @printf "$(BLUE)Showing production diff with environment variables...$(RESET)\n" + @./scripts/deploy-with-env.sh prod diff + +status-with-env-dev: ## Show development status using environment variables + @printf "$(BLUE)Showing development status with environment variables...$(RESET)\n" + @./scripts/deploy-with-env.sh dev status + +status-with-env-prod: ## Show production status using environment variables + @printf "$(BLUE)Showing production status with environment variables...$(RESET)\n" + @./scripts/deploy-with-env.sh prod status + +reset: clean install ## Reset project (clean and reinstall) + @printf "$(GREEN)Project reset completed!$(RESET)\n"