.PHONY: help build push deploy restart login clean geoip-import geoip-import-prod # Variables REGISTRY := registry.gitlab.com/towerops/towerops IMAGE_NAME := towerops-web COMMIT_SHA := $(shell git rev-parse --short HEAD) IMAGE_TAG_LATEST := $(REGISTRY)/$(IMAGE_NAME):latest IMAGE_TAG_COMMIT := $(REGISTRY)/$(IMAGE_NAME):$(COMMIT_SHA) PLATFORM := linux/amd64 KUBECTL := kubectl K8S_NAMESPACE := towerops K8S_DEPLOYMENT := towerops DEPLOY_TIMESTAMP := $(shell date -u +"%Y-%m-%dT%H:%M:%SZ") help: ## Show this help message @echo "Available targets:" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-15s\033[0m %s\n", $$1, $$2}' login: ## Login to GitLab container registry @echo "Logging in to $(REGISTRY)..." @podman login $(REGISTRY) build: ## Build and push Docker image for amd64 architecture @echo "Building and pushing $(IMAGE_NAME) for $(PLATFORM)..." @echo " Tags: latest, $(COMMIT_SHA)" docker buildx build \ --platform $(PLATFORM) \ -t $(IMAGE_TAG_LATEST) \ -t $(IMAGE_TAG_COMMIT) \ -f Dockerfile \ --push \ . @echo "Build and push complete!" build-native: ## Build Docker image for native architecture (for testing) @echo "Building $(IMAGE_NAME) for native architecture..." @echo " Tags: latest, $(COMMIT_SHA)" docker build \ -t $(IMAGE_TAG_LATEST) \ -t $(IMAGE_TAG_COMMIT) \ -f Dockerfile \ . @echo "Build complete!" restart: ## Trigger Kubernetes deployment rollout @echo "Updating Kubernetes deployment..." @echo " Namespace: $(K8S_NAMESPACE)" @echo " Deployment: $(K8S_DEPLOYMENT)" @echo " Image: $(IMAGE_TAG_COMMIT)" @echo " Timestamp: $(DEPLOY_TIMESTAMP)" $(KUBECTL) config use-context towerops/towerops:home-cluster-agent $(KUBECTL) set image deployment/$(K8S_DEPLOYMENT) $(K8S_DEPLOYMENT)=$(IMAGE_TAG_COMMIT) -n $(K8S_NAMESPACE) $(KUBECTL) set env deployment/$(K8S_DEPLOYMENT) DEPLOY_TIMESTAMP=$(DEPLOY_TIMESTAMP) -n $(K8S_NAMESPACE) @echo "Kubernetes deployment updated!" deploy: build restart ## Build, push, and deploy to Kubernetes (full deployment) @echo "Full deployment complete!" @echo "Image available at:" @echo " $(IMAGE_TAG_LATEST)" @echo " $(IMAGE_TAG_COMMIT)" clean: ## Remove local Docker images @echo "Removing local images..." -podman rmi $(IMAGE_TAG_LATEST) -podman rmi $(IMAGE_TAG_COMMIT) @echo "Clean complete!" info: ## Show current image information @echo "Registry: $(REGISTRY)" @echo "Image: $(IMAGE_NAME)" @echo "Commit SHA: $(COMMIT_SHA)" @echo "Platform: $(PLATFORM)" @echo "" @echo "Tags:" @echo " $(IMAGE_TAG_LATEST)" @echo " $(IMAGE_TAG_COMMIT)" geoip-import: ## Import MaxMind GeoLite2 City CSV database to local database (specify DIR=path/to/csv) @if [ -z "$(DIR)" ]; then \ echo "Error: Please specify DIR variable"; \ echo "Usage: make geoip-import DIR=~/Downloads/GeoLite2-City-CSV_20260127/"; \ exit 1; \ fi @echo "Importing GeoIP database to local database..." @mix geoip.import $(DIR) geoip-import-prod: ## Import MaxMind GeoLite2 City CSV to production via API (specify DIR=path/to/csv, requires TOWEROPS_KEY env var) @if [ -z "$(DIR)" ]; then \ echo "Error: Please specify DIR variable"; \ echo "Usage: make geoip-import-prod DIR=~/Downloads/GeoLite2-City-CSV_20260127/"; \ echo "Note: TOWEROPS_KEY environment variable must be set"; \ exit 1; \ fi @echo "Importing GeoIP database to production via API..." @mix geoip.import $(DIR) --production