BINARY := guenther BUILD_DIR := build CMD := ./cmd/pipeline/main.go CONFIG := configs/default.yaml GO_IMAGE := golang:bookworm BUILD_TAGS := duckdb_arrow LDFLAGS := -s -w GO_BUILD_FLAGS := -tags=$(BUILD_TAGS) -buildvcs=false -ldflags='$(LDFLAGS)' # ── Targets ─────────────────────────────────────────────────────────────────── .PHONY: all build build-local test clean run help all: build ## build: Build the binary inside a Docker container (no local toolchain needed) build: @mkdir -p $(BUILD_DIR) docker run --rm \ -v $(PWD):/app:Z \ -w /app \ $(GO_IMAGE) \ sh -c "apt-get update -qq && \ apt-get install -y -qq gcc libc6-dev && \ CGO_ENABLED=1 go build $(GO_BUILD_FLAGS) -o $(BUILD_DIR)/$(BINARY) $(CMD) && \ echo BUILD_OK" \ 2>&1 ## build-local: Build the binary using the local Go toolchain (requires gcc) build-local: @mkdir -p $(BUILD_DIR) CGO_ENABLED=1 go build $(GO_BUILD_FLAGS) -o $(BUILD_DIR)/$(BINARY) $(CMD) ## test: Run all tests (requires local Go toolchain with gcc) test: CGO_ENABLED=1 go test -v -tags=$(BUILD_TAGS) ./... ## run: Run the pipeline with the default config (binary must be built first) run: $(BUILD_DIR)/$(BINARY) ./$(BUILD_DIR)/$(BINARY) -config $(CONFIG) ## clean: Remove build artefacts clean: rm -rf $(BUILD_DIR) ## help: Show this help message help: @grep -E '^## ' $(MAKEFILE_LIST) | sed 's/^## / /'