towerops/Makefile

76 lines
2.5 KiB
Makefile

.PHONY: help build push deploy restart login clean
# 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)"