The demo writes a whole site root that exercises every feature: two languages with a fallback, a series with ordered chapters, a gallery, a figure, an include, extras, tags across sections, a slug with an alias, an undated page, a draft, a template override, static files and site.yaml. It generates its filler rather than copying stored files, because nothing in this repository is content (ADR-0011) — and that makes it a test of the engine rather than a fixture: anything khosra can do that the demo cannot express is a gap. Two things found by generating and then serving it, which is the whole point: `khosra check` reported the demo's own series as mixing ordered and unordered members. It was right — the chapter bodies *described* `order: 10` while the frontmatter never carried it. The checker caught its own author. And `/` was a **404**. ADR-0008 leaves the root engine-owned, which is right, but "engine-owned" was never given an answer, so a visitor to the site's own address got nothing. The root now lists every bundle, newest first, paginated like any other listing, and 404s only when nothing is published. A hand-written home page stays a separate decision, recorded as such. Verified end to end: 23 files written, 12 bundles, 12 derivatives, `check` clean, and every URL the demo promises answers — including the alias redirecting, the draft hidden, and the front page rendering through the site's *own* template override.
48 lines
1.6 KiB
Makefile
48 lines
1.6 KiB
Makefile
# Convenience only. `go build`, `go test` and ./scripts/verify.sh are the ground truth — nothing here
|
|
# is required to work on khosra, and the gate never invokes make.
|
|
|
|
SITE ?= $(KHOSRA_SITE)
|
|
ADDR ?= localhost:8080
|
|
BIN := ./khosra
|
|
|
|
.PHONY: help build run check new demo test verify fmt tidy clean
|
|
|
|
help: ## list targets
|
|
@grep -hE '^[a-z]+:.*##' $(MAKEFILE_LIST) | sed 's/:[^#]*## /|/' | column -t -s '|'
|
|
|
|
build: ## compile the binary
|
|
go build -o $(BIN) ./cmd/khosra
|
|
|
|
run: build ## serve a site root: make run SITE=/path/to/site
|
|
@test -n "$(SITE)" || { echo "set SITE=/path/to/site, or export KHOSRA_SITE"; exit 1; }
|
|
$(BIN) -site "$(SITE)" -addr "$(ADDR)"
|
|
|
|
check: build ## validate a site root's content: make check SITE=/path/to/site
|
|
@test -n "$(SITE)" || { echo "set SITE=/path/to/site, or export KHOSRA_SITE"; exit 1; }
|
|
$(BIN) check -site "$(SITE)"
|
|
|
|
new: build ## scaffold a bundle: make new KEY=posts/hello-world SITE=/path/to/site
|
|
@test -n "$(SITE)" || { echo "set SITE=/path/to/site, or export KHOSRA_SITE"; exit 1; }
|
|
@test -n "$(KEY)" || { echo "set KEY=posts/hello-world"; exit 1; }
|
|
$(BIN) new -site "$(SITE)" "$(KEY)"
|
|
|
|
demo: build ## write a demo site that exercises every feature: make demo SITE=/tmp/khosra-demo
|
|
@test -n "$(SITE)" || { echo "set SITE=/path/to/empty/dir"; exit 1; }
|
|
@mkdir -p "$(SITE)"
|
|
$(BIN) demo -site "$(SITE)"
|
|
|
|
test: ## run tests with the race detector
|
|
go test -race ./...
|
|
|
|
verify: ## everything the harness enforces; must be green before a commit
|
|
./scripts/verify.sh
|
|
|
|
fmt: ## format all Go source
|
|
gofmt -w .
|
|
|
|
tidy: ## tidy go.mod
|
|
go mod tidy
|
|
|
|
clean: ## remove build output
|
|
rm -f $(BIN)
|