156 lines
7.9 KiB
Makefile
156 lines
7.9 KiB
Makefile
# Thin control Makefile — one target per ctrl/ script, and the subcommand is an
|
|
# argument rather than a second target: `make cluster down`, not `make cluster-down`.
|
|
#
|
|
# The logic lives in the scripts, never here. Each target maps to exactly one
|
|
# bash file, and that file holds the variants:
|
|
#
|
|
# make cluster up -> ctrl/cluster.sh up
|
|
#
|
|
# Config layers, weakest first: ctrl/versions.env (pinned toolchain) <
|
|
# ctrl/env.d/<profile>.env (cluster shape) < ctrl/.env (local, gitignored) <
|
|
# the environment. So `make cluster up PROFILE=client` beats everything.
|
|
#
|
|
# Start with: make setup (then: make cluster up && make docs)
|
|
|
|
# Identity follows the FOLDER NAME, so this directory can be copied elsewhere,
|
|
# renamed, and run as a separate environment with no edits. ctrl/.env overrides
|
|
# it when you want a name that differs from the directory.
|
|
#
|
|
# Asked once, of ctrl/ports.sh, which resolves it through lib/config.sh:
|
|
#
|
|
# CLUSTER KUBECONTEXT HTTP HTTPS TILT REGISTRY MANIFESTS_DIR
|
|
#
|
|
# Read positionally, so the order is a contract — ctrl/selftest.sh pins it.
|
|
#
|
|
# This used to be sed over ctrl/.env plus a slug computed here, which is a
|
|
# SECOND derivation of values lib/config.sh already owns — and the two could
|
|
# disagree about the port after `make ports persist`, or about the name for any
|
|
# directory whose sanitised form differs from its raw one. One source now; the
|
|
# Tiltfile reads the same line.
|
|
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/-*$$//')
|
|
# The fallback matters: ports.sh sources config.sh, and if a profile or .env is
|
|
# broken it exits non-zero. Losing the cluster name would send --context to the
|
|
# wrong place, so fall back to the folder rather than to empty.
|
|
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. `cfg`,
|
|
# `ctrl`, `docs`, `gen` and `init` all exist at this level, and make considers a
|
|
# target that is an existing directory already built — so `make build ctrl` ran
|
|
# the build and then printed "make: 'ctrl' is up to date". The empty rule above
|
|
# is not enough on its own; only .PHONY stops make consulting the filesystem.
|
|
.PHONY: $(ARGS)
|
|
endif
|
|
|
|
.PHONY: help setup check selftest mem deps deps-image standalone cluster registry addons ports \
|
|
docs tilt \
|
|
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
|
|
|
|
# ── setup ──────────────────────────────────────────────────────────────────
|
|
|
|
setup: ## prepare this machine [core] [--cluster]
|
|
bash ctrl/setup.sh $(ARGS)
|
|
|
|
check: ## is this machine ready? reports, never fixes
|
|
bash ctrl/check.sh
|
|
|
|
# The counterpart to check: that one asks about the MACHINE and never fails,
|
|
# this one asks about RIG and exits 1, as `make standalone check` does. 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
|
|
|
|
mem: ## memory, its caps, what it survives [status|push|all|backup|restore]
|
|
bash ctrl/mem.sh $(or $(ARGS),status)
|
|
|
|
deps: ## install the toolchain [core|dev] (default dev)
|
|
bash ctrl/deps.sh install $(or $(ARGS),dev)
|
|
|
|
# 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: ## generate standalone/<profile>/ kits [write|check] (default write)
|
|
bash ctrl/standalone.sh $(or $(ARGS),write)
|
|
|
|
deps-image: ## build the installer image [full]
|
|
docker build -f ctrl/Dockerfile.deps \
|
|
--target $(if $(filter full,$(ARGS)),deps-full,deps) \
|
|
-t $(DEPSIMG):$(if $(filter full,$(ARGS)),full,deps) .
|
|
|
|
# ── cluster ────────────────────────────────────────────────────────────────
|
|
|
|
cluster: ## this env + the machine [up|down|reset|list|free]
|
|
bash ctrl/cluster.sh $(or $(ARGS),up)
|
|
|
|
registry: ## registry wiring [up|down|status] (default status)
|
|
bash ctrl/registry.sh $(or $(ARGS),status)
|
|
|
|
addons: ## profile addons [install|list] (default list)
|
|
bash ctrl/addons.sh $(or $(ARGS),list)
|
|
|
|
ports: ## this environment's port block [show|persist]
|
|
bash ctrl/ports.sh $(or $(ARGS),show)
|
|
|
|
# ── docs + dev loop ────────────────────────────────────────────────────────
|
|
|
|
docs: ## documentation [serve|graphs] (default serve)
|
|
bash ctrl/docs.sh $(or $(ARGS),serve)
|
|
|
|
# --port is only passed when TILT_PORT resolved. It normally does, since FACTS
|
|
# above asks ports.sh — but ports.sh can fail on a broken profile, and without
|
|
# the guard tilt receives a bare `--port` with no value and fails on the flag
|
|
# rather than on anything real. Tilt's own default is 10350, which is the number
|
|
# every project on this machine is trying not to collide on, so falling back to
|
|
# it silently is worse than not passing the flag.
|
|
#
|
|
# The Tiltfile asks ports.sh for the rest itself — cluster, registry and where
|
|
# the manifests are — so nothing needs passing here beyond what tilt's own flags
|
|
# require.
|
|
tilt: ## dev loop [up|down] (default up)
|
|
cd ctrl && tilt $(or $(ARGS),up) $(KCTX) $(if $(filter down,$(ARGS)),,$(if $(TILT_PORT),--port $(TILT_PORT)))
|
|
|
|
# ── the shape every other project uses ─────────────────────────────────────
|
|
# Aliases, not a second implementation: each one calls the same script the
|
|
# canonical target does.
|
|
#
|
|
# The header above argues for `make cluster down` over `make cluster-down`, and
|
|
# that still holds *within* this file. But rig is one repo among several on the
|
|
# same machine, and every other one answers to kind-up / tilt-up. Muscle memory
|
|
# spanning six projects beats internal tidiness in one, so both spellings work.
|
|
#
|
|
# `cluster list` and `cluster free` have no hyphenated twin on purpose — they
|
|
# are rig's own, with nothing to be consistent with.
|
|
#
|
|
# Nothing outside this file reads these names: the script is `ctrl/cluster.sh`
|
|
# and it takes the verb. So rename them, delete the ones you never type, or add
|
|
# the spelling your own projects use — an alias is two lines, and adding one
|
|
# costs nothing but a line in .PHONY above.
|
|
|
|
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)
|