# Vellum — developer commands. # # Requires Go >= 1.26 and pnpm. On Fedora: sudo dnf install golang # Frontend: cd web && pnpm install BINARY := vellum VERSION ?= 0.4.0-dev LDFLAGS := -s -w -X main.version=$(VERSION) .PHONY: build web build-go dev run test fmt vet tidy check gate docker clean # Backend + Vite dev server together, with hot reload. Ctrl-C stops both. dev: ./scripts/dev.sh # Build the frontend first: the Go build embeds web/dist. build: web CGO_ENABLED=0 go build -trimpath -ldflags "$(LDFLAGS)" -o $(BINARY) ./cmd/vellum web: cd web && pnpm install --silent && pnpm build # Go-only build, for when the frontend is unchanged. build-go: CGO_ENABLED=0 go build -trimpath -ldflags "$(LDFLAGS)" -o $(BINARY) ./cmd/vellum run: go run ./cmd/vellum test: go test ./... fmt: gofmt -w . vet: go vet ./... tidy: go mod tidy # Fix formatting, then vet and test. Rewrites files, so it is a fixer, not a # gate — use `gate` before pushing. check: fmt vet test # The same checks as check, but verify-only: gate never rewrites a file. gate: gofmt_out=$$(gofmt -l .); if [ -n "$$gofmt_out" ]; then echo "gofmt: not formatted:"; echo "$$gofmt_out"; exit 1; fi echo "go build" go build ./... echo "go vet" go vet ./... echo "go test" go test ./... echo "web check" cd web && pnpm install --frozen-lockfile && pnpm check docker: podman build --build-arg VERSION=$(VERSION) -t localhost/vellum:$(VERSION) . clean: rm -f $(BINARY) rm -rf data config web/dist/*.js web/dist/*.css web/dist/assets web/dist/index.html