100 lines
5.3 KiB
Makefile
100 lines
5.3 KiB
Makefile
# Thin control Makefile: the subcommand is an argument (`make cluster down`); logic lives in ctrl/ scripts.
|
|
# make check | deps | cluster up | tilt | docs (`make help` lists all)
|
|
# Start with: make check && make deps && make cluster up
|
|
# Notes: docs/notes/Makefile.md
|
|
|
|
# Identity and ports, asked once of ctrl/ports.sh, read positionally (selftest pins the order):
|
|
# CLUSTER KUBECONTEXT HTTP HTTPS TILT REGISTRY MANIFESTS_DIR
|
|
FACTS := $(shell bash ctrl/ports.sh active 2>/dev/null)
|
|
SLUG := $(shell echo '$(notdir $(CURDIR))' | tr '[:upper:]' '[:lower:]' | tr -c 'a-z0-9-' '-' | sed 's/^-*//; s/-*$$//')
|
|
# Fall back to the folder name, not empty, if ports.sh fails on a broken config.
|
|
CLUSTER := $(or $(word 1,$(FACTS)),$(SLUG))
|
|
KCTX := --context $(or $(word 2,$(FACTS)),kind-$(SLUG))
|
|
TILT_PORT := $(word 5,$(FACTS))
|
|
DEPSIMG := $(SLUG)-deps
|
|
|
|
# Words after the target become the script's subcommand. Make would otherwise
|
|
# treat them as goals of their own, so each gets a no-op rule.
|
|
ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
|
ifneq ($(ARGS),)
|
|
$(eval $(ARGS):;@:)
|
|
# ...and as PHONY, because some of those words name real directories (ctrl, docs, ...).
|
|
.PHONY: $(ARGS)
|
|
endif
|
|
|
|
.PHONY: help check deps cluster tilt docs selftest standalone \
|
|
kind-up kind-down kind-reset tilt-up tilt-down
|
|
|
|
help: ## list targets
|
|
@grep -hE '^[a-z][a-z-]*:.*?##' $(MAKEFILE_LIST) | sed 's/:.*##/\t/' | expand -t16
|
|
|
|
# ── this machine ───────────────────────────────────────────────────────────
|
|
|
|
# Everything that looks and never changes anything: host, docker, toolchain,
|
|
# config, memory, ports, registry, addons. `check mem` goes deeper on memory —
|
|
# how far it really climbs, and the WSL .wslconfig backup/restore.
|
|
check: ## is this machine ready? [all] [mem [status|push|all|backup|restore]]
|
|
bash ctrl/check.sh $(ARGS)
|
|
|
|
# `deps image` is for a machine with nothing but Docker: the installer runs from
|
|
# the image instead — see BOOTSTRAP.md. `full` bakes every binary in.
|
|
deps: ## install the toolchain [core|dev] [image [full]]
|
|
ifeq ($(word 1,$(ARGS)),image)
|
|
docker build -f ctrl/Dockerfile.deps \
|
|
--target $(if $(filter full,$(ARGS)),deps-full,deps) \
|
|
-t $(DEPSIMG):$(if $(filter full,$(ARGS)),full,deps) .
|
|
else
|
|
bash ctrl/deps.sh install $(or $(ARGS),dev)
|
|
endif
|
|
|
|
# ── the cluster ────────────────────────────────────────────────────────────
|
|
|
|
# up also starts the registry and installs the profile's addons, and the ports
|
|
# derive from the folder name — there is nothing else to run first.
|
|
cluster: ## this env + the machine [up|down|reset|list|free]
|
|
bash ctrl/cluster.sh $(or $(ARGS),up)
|
|
|
|
# ── dev loop + docs ────────────────────────────────────────────────────────
|
|
|
|
docs: ## documentation [serve|graphs] (default serve)
|
|
bash ctrl/docs.sh $(or $(ARGS),serve)
|
|
|
|
# --port only when TILT_PORT resolved; the Tiltfile asks ports.sh for the rest itself.
|
|
tilt: ## dev loop [up|down] (default up)
|
|
cd ctrl && tilt $(or $(ARGS),up) $(KCTX) $(if $(filter down,$(ARGS)),,$(if $(TILT_PORT),--port $(TILT_PORT)))
|
|
|
|
# ── maintaining rig ────────────────────────────────────────────────────────
|
|
|
|
# The counterpart to check: that one asks about the MACHINE and never fails,
|
|
# this one asks about RIG and exits 1. Checks are written as the decisions they
|
|
# defend, so a failure names what is being undone.
|
|
selftest: ## does rig still do what it says? exits 1 if not
|
|
bash ctrl/selftest.sh
|
|
|
|
# The one-file versions of rig's tools, one folder per profile, for machines the
|
|
# full rig is not going to. Generated from rig as it is, never edited by hand;
|
|
# `check` is what selftest runs to catch a kit left behind by a change to rig.
|
|
standalone: ## single-file kits [write|check|export DIR] (default write)
|
|
bash ctrl/standalone.sh $(or $(ARGS),write)
|
|
|
|
# ── the shape every other project uses ─────────────────────────────────────
|
|
# Aliases matching other projects' kind-up / tilt-up; each calls the same script.
|
|
# Nothing else reads these names: rename, delete or add freely (and update .PHONY).
|
|
|
|
kind-up: ## alias for `cluster up`
|
|
bash ctrl/cluster.sh up
|
|
|
|
kind-down: ## alias for `cluster down`
|
|
bash ctrl/cluster.sh down
|
|
|
|
kind-reset: ## alias for `cluster reset`
|
|
bash ctrl/cluster.sh reset
|
|
|
|
# These two match the other projects' spelling. rig ships ctrl/Tiltfile, so they
|
|
# run — it deploys the examples in k8s/base until you replace them.
|
|
tilt-up: ## alias for `tilt up`
|
|
cd ctrl && tilt up $(KCTX) $(if $(TILT_PORT),--port $(TILT_PORT))
|
|
|
|
tilt-down: ## alias for `tilt down`
|
|
cd ctrl && tilt down $(KCTX)
|