|
| 1 | +# Copyright 2022 TriggerMesh Inc. |
| 2 | +# SPDX-License-Identifier: Apache-2.0 |
| 3 | + |
| 4 | +KREPO = triggermesh-core |
| 5 | +KREPO_DESC = TriggerMesh Core Components (broker, triggers) |
| 6 | + |
| 7 | +BASE_DIR ?= $(CURDIR) |
| 8 | +OUTPUT_DIR ?= $(BASE_DIR)/_output |
| 9 | + |
| 10 | +# Dynamically generate the list of commands based on the directory name cited in the cmd directory |
| 11 | +COMMANDS := $(notdir $(wildcard cmd/*)) |
| 12 | + |
| 13 | +# Commands and images that require custom build proccess |
| 14 | +CUSTOM_BUILD_BINARIES := |
| 15 | +CUSTOM_BUILD_IMAGES := |
| 16 | + |
| 17 | +BIN_OUTPUT_DIR ?= $(OUTPUT_DIR) |
| 18 | +DOCS_OUTPUT_DIR ?= $(OUTPUT_DIR) |
| 19 | +TEST_OUTPUT_DIR ?= $(OUTPUT_DIR) |
| 20 | +COVER_OUTPUT_DIR ?= $(OUTPUT_DIR) |
| 21 | +DIST_DIR ?= $(OUTPUT_DIR) |
| 22 | + |
| 23 | +# Rely on ko for building/publishing images and generating/deploying manifests |
| 24 | +KO ?= ko |
| 25 | +KOFLAGS ?= |
| 26 | +IMAGE_TAG ?= $(shell git rev-parse HEAD) |
| 27 | + |
| 28 | +# Go build variables |
| 29 | +GO ?= go |
| 30 | +GOFMT ?= gofmt |
| 31 | +GOLINT ?= golangci-lint run --timeout 5m |
| 32 | +GOTOOL ?= go tool |
| 33 | +GOTEST ?= gotestsum --junitfile $(TEST_OUTPUT_DIR)/$(KREPO)-unit-tests.xml --format pkgname-and-test-fails -- |
| 34 | + |
| 35 | +GOMODULE = github.com/triggermesh/triggermesh-core |
| 36 | + |
| 37 | +GOPKGS = ./cmd/... ./pkg/apis/... ./pkg/reconciler/... |
| 38 | +GOPKGS_SKIP_TESTS = |
| 39 | + |
| 40 | +# List of packages that expect the environment to have installed |
| 41 | +# the dependencies for running tests: |
| 42 | +# |
| 43 | +# ... |
| 44 | +# |
| 45 | +GOPKGS_TESTS_WITH_DEPENDENCIES = |
| 46 | + |
| 47 | +# This environment variable should be set when dependencies have been installed |
| 48 | +# at the running instance. |
| 49 | +WITH_DEPENDENCIES ?= |
| 50 | + |
| 51 | +LDFLAGS = -w -s |
| 52 | +LDFLAGS_STATIC = $(LDFLAGS) -extldflags=-static |
| 53 | + |
| 54 | +HAS_GOTESTSUM := $(shell command -v gotestsum;) |
| 55 | +HAS_GOLANGCI_LINT := $(shell command -v golangci-lint;) |
| 56 | + |
| 57 | +SED := sed -i |
| 58 | + |
| 59 | +OS := $(shell sh -c 'uname 2>/dev/null || echo Unknown') |
| 60 | +ifeq ($(OS),$(filter $(OS),Darwin FreeBSD NetBSD)) |
| 61 | + SED += '' |
| 62 | +endif |
| 63 | + |
| 64 | +.PHONY: help all build release vm-images test lint fmt fmt-test images clean install-gotestsum install-golangci-lint deploy undeploy |
| 65 | + |
| 66 | +.DEFAULT_GOAL := build |
| 67 | + |
| 68 | +all: codegen build test lint |
| 69 | + |
| 70 | +# Verify lint and tests |
| 71 | +install-gotestsum: |
| 72 | +ifndef HAS_GOTESTSUM |
| 73 | + curl -SL https://github.com/gotestyourself/gotestsum/releases/download/v1.8.0/gotestsum_1.8.0_linux_amd64.tar.gz | tar -C $(shell go env GOPATH)/bin -zxf - |
| 74 | +endif |
| 75 | + |
| 76 | +install-golangci-lint: |
| 77 | +ifndef HAS_GOLANGCI_LINT |
| 78 | + curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(shell go env GOPATH)/bin v1.45.2 |
| 79 | +endif |
| 80 | + |
| 81 | +help: ## Display this help |
| 82 | + @awk 'BEGIN {FS = ":.*?## "; printf "\n$(KREPO_DESC)\n\nUsage:\n make \033[36m<cmd>\033[0m\n"} /^[a-zA-Z0-9._-]+:.*?## / {printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) |
| 83 | + |
| 84 | +build: $(COMMANDS) ## Build all artifacts |
| 85 | + |
| 86 | +$(filter-out $(CUSTOM_BUILD_BINARIES), $(COMMANDS)): ## Build artifact |
| 87 | + $(GO) build -ldflags "$(LDFLAGS_STATIC)" -o $(BIN_OUTPUT_DIR)/$@ ./cmd/$@ |
| 88 | + |
| 89 | +confluenttarget-adapter: |
| 90 | + CGO_ENABLED=1 $(GO) build -ldflags "$(LDFLAGS_STATIC)" -o $(BIN_OUTPUT_DIR)/$@ ./cmd/$@ |
| 91 | + |
| 92 | +dataweavetransformation-adapter: ## Builds DataWeave |
| 93 | + $(GO) build -ldflags "$(LDFLAGS)" -o $(BIN_OUTPUT_DIR)/$@ ./cmd/$@ |
| 94 | + |
| 95 | +deploy: ## Deploy TriggerMesh stack to default Kubernetes cluster |
| 96 | + $(KO) resolve -f $(BASE_DIR)/config > $(BASE_DIR)/triggermesh-$(IMAGE_TAG).yaml |
| 97 | + @for component in $(CUSTOM_BUILD_IMAGES); do \ |
| 98 | + $(MAKE) -C ./cmd/$$component build CONTEXT=$(BASE_DIR) IMAGE_TAG=$(KO_DOCKER_REPO)/$$component-$(IMAGE_TAG) && \ |
| 99 | + $(MAKE) -C ./cmd/$$component push IMAGE_TAG=$(KO_DOCKER_REPO)/$$component-$(IMAGE_TAG) && \ |
| 100 | + $(SED) 's|value: .*'$$component'.*|value: $(KO_DOCKER_REPO)/'$$component'-$(IMAGE_TAG)|g' $(BASE_DIR)/triggermesh-$(IMAGE_TAG).yaml || exit 1; \ |
| 101 | + done |
| 102 | + |
| 103 | + $(KO) apply -f $(BASE_DIR)/triggermesh-$(IMAGE_TAG).yaml |
| 104 | + @rm $(BASE_DIR)/triggermesh-$(IMAGE_TAG).yaml |
| 105 | + |
| 106 | +undeploy: ## Remove TriggerMesh stack from default Kubernetes cluster |
| 107 | + $(KO) delete -f $(BASE_DIR)/config |
| 108 | + |
| 109 | +vm-images: |
| 110 | + @$(MAKE) -C packer/ |
| 111 | + |
| 112 | +release: ## Publish container images and generate release manifests |
| 113 | + @mkdir -p $(DIST_DIR) |
| 114 | + $(KO) resolve -f config/ -l 'triggermesh.io/crd-install' > $(DIST_DIR)/triggermesh-crds.yaml |
| 115 | + @cp config/namespace/100-namespace.yaml $(DIST_DIR)/triggermesh.yaml |
| 116 | + $(KO) resolve $(KOFLAGS) -B -t latest -f config/ -l '!triggermesh.io/crd-install' > /dev/null |
| 117 | + $(KO) resolve $(KOFLAGS) -B -t $(IMAGE_TAG) --tag-only -f config/ -l '!triggermesh.io/crd-install' >> $(DIST_DIR)/triggermesh.yaml |
| 118 | + |
| 119 | + @for component in $(CUSTOM_BUILD_IMAGES); do \ |
| 120 | + $(MAKE) -C ./cmd/$$component build CONTEXT=$(BASE_DIR) IMAGE_TAG=$(KO_DOCKER_REPO)/$$component:$(IMAGE_TAG) && \ |
| 121 | + $(MAKE) -C ./cmd/$$component tag IMAGE_TAG=$(KO_DOCKER_REPO)/$$component:$(IMAGE_TAG) TAGS=$(KO_DOCKER_REPO)/$$component:latest && \ |
| 122 | + $(MAKE) -C ./cmd/$$component push IMAGE_TAG=$(KO_DOCKER_REPO)/$$component && \ |
| 123 | + $(SED) 's/'$$component':.*/'$$component':$(IMAGE_TAG)/g' $(DIST_DIR)/triggermesh.yaml || exit 1; \ |
| 124 | + done |
| 125 | + |
| 126 | +gen-apidocs: ## Generate API docs |
| 127 | + GOPATH="" OUTPUT_DIR=$(DOCS_OUTPUT_DIR) ./hack/gen-api-reference-docs.sh |
| 128 | + |
| 129 | + |
| 130 | +GOPKGS_LIST ?= $(filter-out $(GOPKGS_SKIP_TESTS), $(shell go list $(GOPKGS))) |
| 131 | +ifdef WITH_DEPENDENCIES |
| 132 | + GOPKGS_LIST += $(GOPKGS_TESTS_WITH_DEPENDENCIES) |
| 133 | +endif |
| 134 | +test: install-gotestsum ## Run unit tests |
| 135 | + @mkdir -p $(TEST_OUTPUT_DIR) |
| 136 | + |
| 137 | + $(GOTEST) -p=1 -race -cover -coverprofile=$(TEST_OUTPUT_DIR)/$(KREPO)-c.out $(GOPKGS_LIST) |
| 138 | + |
| 139 | + @for component in $(CUSTOM_BUILD_IMAGES); do \ |
| 140 | + $(MAKE) -C ./cmd/$$component test || exit 1; \ |
| 141 | + done |
| 142 | + |
| 143 | +cover: test ## Generate code coverage |
| 144 | + @mkdir -p $(COVER_OUTPUT_DIR) |
| 145 | + $(GOTOOL) cover -html=$(TEST_OUTPUT_DIR)/$(KREPO)-c.out -o $(COVER_OUTPUT_DIR)/$(KREPO)-coverage.html |
| 146 | + |
| 147 | +lint: install-golangci-lint ## Lint source files |
| 148 | + $(GOLINT) $(GOPKGS) ./test/... |
| 149 | + |
| 150 | +fmt: ## Format source files |
| 151 | + $(GOFMT) -s -w $(shell $(GO) list -f '{{$$d := .Dir}}{{range .GoFiles}}{{$$d}}/{{.}} {{end}} {{$$d := .Dir}}{{range .TestGoFiles}}{{$$d}}/{{.}} {{end}}' $(GOPKGS)) |
| 152 | + |
| 153 | +fmt-test: ## Check source formatting |
| 154 | + @test -z $(shell $(GOFMT) -l $(shell $(GO) list -f '{{$$d := .Dir}}{{range .GoFiles}}{{$$d}}/{{.}} {{end}} {{$$d := .Dir}}{{range .TestGoFiles}}{{$$d}}/{{.}} {{end}}' $(GOPKGS))) |
| 155 | + |
| 156 | +KO_PUBLISHABLE = $(filter-out $(CUSTOM_BUILD_IMAGES), $(COMMANDS)) |
| 157 | +KO_IMAGES = $(foreach cmd,$(KO_PUBLISHABLE),$(cmd).image) |
| 158 | +CUSTOM_IMAGES = $(foreach cmd,$(CUSTOM_BUILD_IMAGES),$(cmd).image) |
| 159 | + |
| 160 | +images: $(KO_IMAGES) $(CUSTOM_IMAGES) ## Build container images |
| 161 | +$(KO_IMAGES): %.image: |
| 162 | + $(KO) publish --push=false -B --tag-only -t $(IMAGE_TAG) ./cmd/$* |
| 163 | + |
| 164 | +$(CUSTOM_IMAGES): %.image: |
| 165 | + @$(MAKE) -C ./cmd/$* image CONTEXT=$(BASE_DIR) IMAGE_TAG=$(KO_DOCKER_REPO)/$*:$(IMAGE_TAG) |
| 166 | + |
| 167 | +clean: ## Clean build artifacts |
| 168 | + @for bin in $(COMMANDS) ; do \ |
| 169 | + $(RM) -v $(BIN_OUTPUT_DIR)/$$bin; \ |
| 170 | + done |
| 171 | + @$(RM) -v $(DIST_DIR)/triggermesh-crds.yaml $(DIST_DIR)/triggermesh.yaml |
| 172 | + @$(RM) -v $(TEST_OUTPUT_DIR)/$(KREPO)-c.out $(TEST_OUTPUT_DIR)/$(KREPO)-unit-tests.xml |
| 173 | + @$(RM) -v $(COVER_OUTPUT_DIR)/$(KREPO)-coverage.html |
| 174 | + |
| 175 | +# Code generation |
| 176 | +include $(BASE_DIR)/hack/inc.Codegen.mk |
0 commit comments