homelab/Makefile
Gonçalo Rodrigues 3621df170a fix(skaffold): pass defaultRepo as --default-repo flag, add deploy targets
defaultRepo is not valid inside a profile build block in v4beta13.
Pass it as a CLI flag instead and expose make deploy / make deploy-<module>
targets for convenience.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 22:39:58 +01:00

83 lines
3.2 KiB
Makefile

SHELL := /bin/zsh
.DEFAULT_GOAL := help
K3D_SCRIPT := infrastructure/k3d/k3d.sh
TERRAFORM := terraform
REGISTRY := git.gugagr.xyz/admin
# ── Cluster ───────────────────────────────────────────────────────────────────
.PHONY: up
up: ## Create the k3d dev cluster
$(K3D_SCRIPT) homelab
.PHONY: down
down: ## Delete the k3d dev cluster
$(K3D_SCRIPT) homelab delete
# ── Infrastructure ────────────────────────────────────────────────────────────
.PHONY: infra
infra: ## Deploy shared infrastructure (MongoDB, monitoring, Traefik)
$(TERRAFORM) -chdir=infrastructure/terraform/ apply
# ── Services (Skaffold) ───────────────────────────────────────────────────────
.PHONY: dev
dev: ## Watch all services — rebuild and redeploy on file change
skaffold dev
.PHONY: run
run: ## Build and deploy all services once (local)
skaffold run
.PHONY: deploy
deploy: ## Build for ARM64, push to Gitea, and deploy all services to VPS
skaffold run -p ci --default-repo $(REGISTRY)
.PHONY: deploy-%
deploy-%: ## Build and deploy a single service to VPS (e.g. make deploy-finance-api)
skaffold run -p ci -m $* --default-repo $(REGISTRY)
.PHONY: dev-finance
dev-finance: ## Watch finance API only
skaffold dev -f apps/finance/services/api/skaffold.yaml -p local
.PHONY: dev-gateway
dev-gateway: ## Watch auth gateway only
skaffold dev -f apps/auth/services/gateway/skaffold.yaml -p local
.PHONY: dev-users
dev-users: ## Watch auth users only
skaffold dev -f apps/auth/services/users/skaffold.yaml -p local
.PHONY: dev-example
dev-example: ## Watch test example-service only
skaffold dev -f apps/test/services/example-service/skaffold.yaml -p local
# ── Tests ─────────────────────────────────────────────────────────────────────
.PHONY: test
test: ## Run all unit tests
go test ./...
.PHONY: test-integration
test-integration: ## Run integration tests (requires Docker for testcontainers)
go test -tags integration ./...
# ── Lifecycle ─────────────────────────────────────────────────────────────────
.PHONY: bootstrap
bootstrap: up infra run ## Full bootstrap: cluster + infra + all services
.PHONY: reset
reset: down bootstrap ## Tear down and rebuild everything from scratch
# ── Help ──────────────────────────────────────────────────────────────────────
.PHONY: help
help: ## Show this help
@grep -hE '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | \
awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'