.PHONY: run gen bpf generate check-generate build test lint fmt docker docs schema check-schema cli-docs check-cli-docs labels-docs check-labels-docs openapi check-openapi client check-client test-client metrics-docs check-metrics-docs .DEFAULT_GOAL := build export GOFLAGS=-tags=nomsgpack run: go run ./cmd/sablier start --storage.file=state.json --logging.level=debug gen: go generate -v ./... # Regenerate the eBPF counter (pkg/activity/bpf) with clang and libbpf headers # inside a container, so no local toolchain is needed. bpf: docker run --rm -v $(CURDIR):/src -w /src golang:1.27.1-bookworm sh -c 'apt-get update -qq && apt-get install -y -qq clang llvm libbpf-dev >/dev/null && go generate -tags bpfgen ./pkg/activity/bpf' schema: go run ./cmd/schemagen -out docs/static/theme.schema.json check-schema: @go run ./cmd/schemagen | diff - docs/static/theme.schema.json || (echo "docs/static/theme.schema.json is out of date. Run 'make schema' to regenerate."; exit 1) cli-docs: go run ./cmd/docgen -out docs/content/reference/cli.md check-cli-docs: @go run ./cmd/docgen | diff - docs/content/reference/cli.md || (echo "docs/content/reference/cli.md is out of date. Run 'make cli-docs' to regenerate."; exit 1) labels-docs: go run ./cmd/labelsgen -src pkg/sablier/labels.go -out docs/content/reference/labels.md check-labels-docs: @go run ./cmd/labelsgen -src pkg/sablier/labels.go | diff - docs/content/reference/labels.md || (echo "docs/content/reference/labels.md is out of date. Run 'make labels-docs' to regenerate."; exit 1) openapi: go run ./cmd/openapigen -out docs/static/openapi.json check-openapi: @go run ./cmd/openapigen | diff - docs/static/openapi.json || (echo "docs/static/openapi.json is out of date. Run 'make openapi' to regenerate."; exit 1) # The Go client's types in client/ are generated from the OpenAPI spec, so # regenerate them after `make openapi`. client: cd client && go generate ./... # Also fails if the client gains a dependency: it must stay standard library only. check-client: @go tool -modfile=tools.mod oapi-codegen -config client/oapi-codegen.yaml docs/static/openapi.json | diff - client/types.gen.go || (echo "client/types.gen.go is out of date. Run 'make client' to regenerate."; exit 1) @! grep -q '^require' client/go.mod || (echo "client/go.mod must not require anything: the client is standard library only."; exit 1) metrics-docs: go run ./cmd/metricsgen -out docs/content/features/metrics.md check-metrics-docs: @go run ./cmd/metricsgen | diff - docs/content/features/metrics.md || (echo "docs/content/features/metrics.md is out of date. Run 'make metrics-docs' to regenerate."; exit 1) # Regenerate every committed generated file: the CLI, labels and metrics # reference docs, the theme JSON schema, the OpenAPI spec and its Go client. generate: schema cli-docs labels-docs openapi client metrics-docs # Verify every committed generated file is up to date. Used in CI; run # `make generate` and commit the result if it fails. check-generate: check-schema check-cli-docs check-labels-docs check-openapi check-client check-metrics-docs .PHONY: build build: goreleaser build --single-target --snapshot --clean --output . test: test-client go test ./... # client/ is a separate module, so `go test ./...` from the root skips it. test-client: cd client && go test ./... lint: golangci-lint run fix: golangci-lint run --fix fmt: golangci-lint fmt ./... docker: goreleaser release --snapshot --clean --skip=publish docs: cd docs && hugo server