125 lines
4.2 KiB
Makefile
125 lines
4.2 KiB
Makefile
# Ai Resume - build entry points.
|
|
#
|
|
# `make validate` is the content gate: it is what CI and deploy.sh call.
|
|
# It exits 0 only on a clean content tree.
|
|
#
|
|
# `make build` is the site gate: it generates the templ components, compiles the
|
|
# two small binaries and writes the pre-rendered site into dist/. One binary
|
|
# (bin/resume-server) serves the whole site; there is no bundler and no Node.
|
|
|
|
PYTHON ?= python3
|
|
VALIDATOR := $(PYTHON) tools/validate_content.py
|
|
GO ?= go
|
|
TEMPL ?= templ
|
|
|
|
# The runtime image is distroless/static (deploy/Dockerfile): no libc, no
|
|
# dynamic loader. Everything the server needs is pure Go (modernc.org/sqlite),
|
|
# so a static binary is buildable and is what the container can actually exec.
|
|
# Without this the build host's cgo links the nix glibc loader and the container
|
|
# fails with "exec /usr/bin/resume-server: no such file or directory".
|
|
CGO_ENABLED ?= 0
|
|
|
|
BIN := bin
|
|
DIST := dist
|
|
|
|
.PHONY: build dist generate dev test validate validate-self-test fmt vet clean help \
|
|
corpus corpus-sync corpus-rebuild corpus-offline corpus-audit corpus-verify \
|
|
corpus-demo corpus-test corpus-graph corpus-scan corpus-sources
|
|
|
|
help:
|
|
@echo "make build templ generate, compile bin/, no dist"
|
|
@echo "make dist build, then pre-render content into dist/"
|
|
@echo "make dev pre-render into dist/ and serve it on 127.0.0.1:8096"
|
|
@echo "make generate run templ generate (generated files are not committed)"
|
|
@echo "make test go test ./... plus the validator self-test"
|
|
@echo "make validate validate content/** front-matter against the frozen schema"
|
|
@echo "make fmt vet gofmt / go vet over cmd and internal"
|
|
@echo "make clean remove bin/ and dist/"
|
|
@echo ""
|
|
@echo "corpus (Phase 4, python3 -m corpus.cli):"
|
|
@echo "make corpus rebuild the pool from the estate (drops both collections)"
|
|
@echo "make corpus-offline rebuild content/ only, no Gitea (recovery and CI)"
|
|
@echo "make corpus-sync incremental update; only changed documents are re-embedded"
|
|
@echo "make corpus-audit freshness + drift audit (exit 1 on findings)"
|
|
@echo "make corpus-verify check the index against content/ and Qdrant"
|
|
@echo "make corpus-demo same query with and without an area filter"
|
|
@echo "make corpus-graph Q= query graph nodes and edges (with their source note)"
|
|
@echo "make corpus-scan search the pool for credential-shaped content"
|
|
@echo "make corpus-sources show the platform guides and the last harvest"
|
|
@echo "make corpus-test corpus unit tests (no container, no network)"
|
|
|
|
build: generate
|
|
@mkdir -p $(BIN)
|
|
CGO_ENABLED=$(CGO_ENABLED) $(GO) build -trimpath -buildvcs=false -o $(BIN)/resume-build ./cmd/build
|
|
CGO_ENABLED=$(CGO_ENABLED) $(GO) build -trimpath -buildvcs=false -o $(BIN)/resume-server ./cmd/server
|
|
|
|
dist: build
|
|
@$(BIN)/resume-build --dist $(DIST)
|
|
|
|
dev: dist
|
|
@RESUME_DIST=$(DIST) $(BIN)/resume-server
|
|
|
|
generate:
|
|
@command -v $(TEMPL) >/dev/null || { echo "templ is not on PATH; run this inside 'nix develop'"; exit 1; }
|
|
@$(TEMPL) generate
|
|
|
|
test: generate validate-self-test
|
|
@$(GO) test ./...
|
|
|
|
validate:
|
|
@$(VALIDATOR)
|
|
|
|
validate-self-test:
|
|
@$(VALIDATOR) --self-test
|
|
|
|
fmt:
|
|
@gofmt -l -w cmd internal
|
|
|
|
vet:
|
|
@$(GO) vet ./...
|
|
|
|
# -- corpus (Phase 4, docs/phase-4-corpus.md) --------------------------------
|
|
#
|
|
# The corpus is data, not a build artefact: it lives in data/corpus/ (gitignored)
|
|
# and in Qdrant. RESUME_QDRANT_URL defaults to http://127.0.0.1:6333 and
|
|
# RESUME_EMBED_PROVIDER defaults to local-hashing; production sets both in the
|
|
# environment, never in this file.
|
|
|
|
CORPUS := $(PYTHON) -m corpus.cli
|
|
|
|
corpus: corpus-rebuild
|
|
|
|
corpus-rebuild:
|
|
@$(CORPUS) rebuild
|
|
|
|
corpus-offline:
|
|
@$(CORPUS) --offline rebuild
|
|
|
|
corpus-sync:
|
|
@$(CORPUS) sync
|
|
|
|
corpus-audit:
|
|
@$(CORPUS) audit --fail-on-findings
|
|
|
|
corpus-verify:
|
|
@$(CORPUS) verify
|
|
|
|
corpus-demo:
|
|
@$(CORPUS) demo-filter --query "distributed audio endpoints" --area edge
|
|
|
|
corpus-graph:
|
|
@test -n "$(Q)" || { echo "usage: make corpus-graph Q='photo pipeline'"; exit 2; }
|
|
@$(CORPUS) graph --query "$(Q)"
|
|
|
|
corpus-scan:
|
|
@$(CORPUS) scan
|
|
|
|
corpus-sources:
|
|
@$(CORPUS) sources
|
|
|
|
corpus-test:
|
|
@$(PYTHON) -m unittest discover -s corpus/tests -t .
|
|
|
|
clean:
|
|
@rm -rf $(BIN) $(DIST)
|