95 lines
3.4 KiB
Makefile
95 lines
3.4 KiB
Makefile
.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
|