.PHONY: help build push deploy restart login clean compile-mibs # 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)" compile-mibs: ## Pre-compile MIB files to JSON for runtime loading @python3 scripts/compile_mibs.py