github.com/argoproj/argo-events@v1.9.1/Makefile (about) 1 PACKAGE=github.com/argoproj/argo-events 2 CURRENT_DIR=$(shell pwd) 3 DIST_DIR=${CURRENT_DIR}/dist 4 5 DOCKERFILE:=Dockerfile 6 7 BINARY_NAME:=argo-events 8 9 BUILD_DATE=$(shell date -u +'%Y-%m-%dT%H:%M:%SZ') 10 GIT_COMMIT=$(shell git rev-parse HEAD) 11 GIT_BRANCH=$(shell git rev-parse --symbolic-full-name --verify --quiet --abbrev-ref HEAD) 12 GIT_TAG=$(shell if [ -z "`git status --porcelain`" ]; then git describe --exact-match --tags HEAD 2>/dev/null; fi) 13 GIT_TREE_STATE=$(shell if [ -z "`git status --porcelain`" ]; then echo "clean" ; else echo "dirty"; fi) 14 EXECUTABLES = curl docker gzip go 15 16 # docker image publishing options 17 DOCKER_PUSH?=false 18 IMAGE_NAMESPACE?=quay.io/argoproj 19 VERSION?=v1.9.1 20 BASE_VERSION:=v1.9.1 21 22 override LDFLAGS += \ 23 -X ${PACKAGE}.version=${VERSION} \ 24 -X ${PACKAGE}.buildDate=${BUILD_DATE} \ 25 -X ${PACKAGE}.gitCommit=${GIT_COMMIT} \ 26 -X ${PACKAGE}.gitTreeState=${GIT_TREE_STATE} 27 28 ifeq (${DOCKER_PUSH},true) 29 PUSH_OPTION="--push" 30 ifndef IMAGE_NAMESPACE 31 $(error IMAGE_NAMESPACE must be set to push images (e.g. IMAGE_NAMESPACE=quay.io/argoproj)) 32 endif 33 endif 34 35 ifneq (${GIT_TAG},) 36 VERSION=$(GIT_TAG) 37 override LDFLAGS += -X ${PACKAGE}.gitTag=${GIT_TAG} 38 endif 39 40 K3D ?= $(shell [ "`command -v kubectl`" != '' ] && [ "`command -v k3d`" != '' ] && [[ "`kubectl config current-context`" =~ k3d-* ]] && echo true || echo false) 41 42 # Check that the needed executables are available, else exit before the build 43 K := $(foreach exec,$(EXECUTABLES), $(if $(shell which $(exec)),some string,$(error "No $(exec) in PATH"))) 44 45 .PHONY: build image clean test 46 47 # build 48 .PHONY: build 49 build: dist/$(BINARY_NAME)-linux-amd64.gz dist/$(BINARY_NAME)-linux-arm64.gz dist/$(BINARY_NAME)-linux-arm.gz dist/$(BINARY_NAME)-linux-ppc64le.gz dist/$(BINARY_NAME)-linux-s390x.gz 50 51 dist/$(BINARY_NAME)-%.gz: dist/$(BINARY_NAME)-% 52 @[ -e dist/$(BINARY_NAME)-$*.gz ] || gzip -k dist/$(BINARY_NAME)-$* 53 54 dist/$(BINARY_NAME): GOARGS = GOOS= GOARCH= 55 dist/$(BINARY_NAME)-linux-amd64: GOARGS = GOOS=linux GOARCH=amd64 56 dist/$(BINARY_NAME)-linux-arm64: GOARGS = GOOS=linux GOARCH=arm64 57 dist/$(BINARY_NAME)-linux-arm: GOARGS = GOOS=linux GOARCH=arm 58 dist/$(BINARY_NAME)-linux-ppc64le: GOARGS = GOOS=linux GOARCH=ppc64le 59 dist/$(BINARY_NAME)-linux-s390x: GOARGS = GOOS=linux GOARCH=s390x 60 61 dist/$(BINARY_NAME): 62 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/$(BINARY_NAME) ./cmd 63 64 dist/$(BINARY_NAME)-%: 65 CGO_ENABLED=0 $(GOARGS) go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/$(BINARY_NAME)-$* ./cmd 66 67 .PHONY: image 68 BUILD_DIST = dist/$(BINARY_NAME)-linux-amd64 69 ifeq ($(shell uname -m),arm64) 70 BUILD_DIST = dist/$(BINARY_NAME)-linux-arm64 71 endif 72 image: clean $(BUILD_DIST) 73 DOCKER_BUILDKIT=1 docker build -t $(IMAGE_NAMESPACE)/$(BINARY_NAME):$(VERSION) --target $(BINARY_NAME) -f $(DOCKERFILE) . 74 @if [ "$(DOCKER_PUSH)" = "true" ]; then docker push $(IMAGE_NAMESPACE)/$(BINARY_NAME):$(VERSION); fi 75 ifeq ($(K3D),true) 76 k3d image import $(IMAGE_NAMESPACE)/$(BINARY_NAME):$(VERSION) 77 endif 78 79 image-linux-%: dist/$(BINARY_NAME)-linux-% 80 DOCKER_BUILDKIT=1 docker build --build-arg "ARCH=$*" -t $(IMAGE_NAMESPACE)/$(BINARY_NAME):$(VERSION)-linux-$* --platform "linux/$*" --target $(BINARY_NAME) -f $(DOCKERFILE) . 81 @if [ "$(DOCKER_PUSH)" = "true" ]; then docker push $(IMAGE_NAMESPACE)/$(BINARY_NAME):$(VERSION)-linux-$*; fi 82 83 image-multi: set-qemu dist/$(BINARY_NAME)-linux-arm64.gz dist/$(BINARY_NAME)-linux-amd64.gz 84 docker buildx build --sbom=false --provenance=false --tag $(IMAGE_NAMESPACE)/$(BINARY_NAME):$(VERSION) --target $(BINARY_NAME) --platform linux/amd64,linux/arm64 --file ./Dockerfile ${PUSH_OPTION} . 85 86 set-qemu: 87 docker pull tonistiigi/binfmt:latest 88 docker run --rm --privileged tonistiigi/binfmt:latest --install amd64,arm64 89 90 test: 91 go test $(shell go list ./... | grep -v /vendor/ | grep -v /test/e2e/) -race -short -v 92 93 test-functional: 94 ifeq ($(EventBusDriver),kafka) 95 kubectl -n argo-events apply -k test/manifests/kafka 96 kubectl -n argo-events wait -l statefulset.kubernetes.io/pod-name=kafka-0 --for=condition=ready pod --timeout=60s 97 endif 98 go test -v -timeout 20m -count 1 --tags functional -p 1 ./test/e2e 99 ifeq ($(EventBusDriver),kafka) 100 kubectl -n argo-events delete -k test/manifests/kafka 101 endif 102 103 # to run just one of the functional e2e tests by name (i.e. 'make TestMetricsWithWebhook'): 104 Test%: 105 go test -v -timeout 10m -count 1 --tags functional -p 1 ./test/e2e -run='.*/$*' 106 107 108 coverage: 109 go test -covermode=count -coverprofile=profile.cov $(shell go list ./... | grep -v /vendor/ | grep -v /test/e2e/) 110 go tool cover -func=profile.cov 111 112 clean: 113 -rm -rf ${CURRENT_DIR}/dist 114 115 .PHONY: crds 116 crds: 117 ./hack/crdgen.sh 118 119 .PHONY: manifests 120 manifests: crds 121 kubectl kustomize manifests/cluster-install > manifests/install.yaml 122 kubectl kustomize manifests/namespace-install > manifests/namespace-install.yaml 123 kubectl kustomize manifests/extensions/validating-webhook > manifests/install-validating-webhook.yaml 124 125 .PHONY: swagger 126 swagger: 127 ./hack/update-swagger.sh ${VERSION} 128 $(MAKE) api/jsonschema/schema.json 129 130 api/jsonschema/schema.json: api/openapi-spec/swagger.json hack/jsonschema/main.go 131 go run ./hack/jsonschema 132 133 .PHONY: codegen 134 codegen: 135 ./hack/generate-proto.sh 136 ./hack/update-codegen.sh 137 ./hack/update-openapigen.sh 138 $(MAKE) swagger 139 ./hack/update-api-docs.sh 140 $(MAKE) manifests 141 rm -rf ./vendor 142 go mod tidy 143 144 go-diagrams/diagram.dot: ./hack/diagram/main.go 145 rm -Rf go-diagrams 146 go run ./hack/diagram 147 148 docs/assets/diagram.png: go-diagrams/diagram.dot 149 cd go-diagrams && dot -Tpng diagram.dot -o ../docs/assets/diagram.png 150 151 .PHONY: start 152 start: image 153 kubectl apply -f test/manifests/argo-events-ns.yaml 154 kubectl kustomize test/manifests | sed 's@quay.io/argoproj/@$(IMAGE_NAMESPACE)/@' | sed 's/:$(BASE_VERSION)/:$(VERSION)/' | kubectl -n argo-events apply -l app.kubernetes.io/part-of=argo-events --prune=false --force -f - 155 kubectl -n argo-events wait --for=condition=Ready --timeout 60s pod --all 156 157 $(GOPATH)/bin/golangci-lint: 158 curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b `go env GOPATH`/bin v1.52.1 159 160 .PHONY: lint 161 lint: $(GOPATH)/bin/golangci-lint 162 go mod tidy 163 golangci-lint run --fix --verbose --concurrency 4 --timeout 10m 164 165 # release - targets only available on release branch 166 ifneq ($(findstring release,$(GIT_BRANCH)),) 167 168 .PHONY: prepare-release 169 prepare-release: check-version-warning clean update-manifests-version codegen 170 git status 171 @git diff --quiet || echo "\n\nPlease run 'git diff' to confirm the file changes are correct.\n" 172 173 .PHONY: release 174 release: check-version-warning 175 @echo "\n1. Make sure you have run 'VERSION=$(VERSION) make prepare-release', and confirmed all the changes are expected." 176 @echo "\n2. Run following commands to commit the changes to the release branch, add give a tag.\n" 177 @echo "git commit -am \"Update manifests to $(VERSION)\"" 178 @echo "git push {your-remote}\n" 179 @echo "git tag -a $(VERSION) -m $(VERSION)" 180 @echo "git push {your-remote} $(VERSION)\n" 181 182 endif 183 184 .PHONY: check-version-warning 185 check-version-warning: 186 @if [[ ! "$(VERSION)" =~ ^v[0-9]+\.[0-9]+\.[0-9]+.*$ ]]; then echo -n "It looks like you're not using a version format like 'v1.2.3', or 'v1.2.3-rc2', that version format is required for our releases. Do you wish to continue anyway? [y/N]" && read ans && [ $${ans:-N} = y ]; fi 187 188 .PHONY: update-manifests-version 189 update-manifests-version: 190 cat manifests/base/kustomization.yaml | sed 's/newTag: .*/newTag: $(VERSION)/' | sed 's@value: quay.io/argoproj/argo-events:.*@value: quay.io/argoproj/argo-events:$(VERSION)@' > /tmp/base_kustomization.yaml 191 mv /tmp/base_kustomization.yaml manifests/base/kustomization.yaml 192 cat manifests/extensions/validating-webhook/kustomization.yaml | sed 's/newTag: .*/newTag: $(VERSION)/' > /tmp/wh_kustomization.yaml 193 mv /tmp/wh_kustomization.yaml manifests/extensions/validating-webhook/kustomization.yaml 194 cat Makefile | sed 's/^VERSION?=.*/VERSION?=$(VERSION)/' | sed 's/^BASE_VERSION:=.*/BASE_VERSION:=$(VERSION)/' > /tmp/ae_makefile 195 mv /tmp/ae_makefile Makefile 196 197 .PHONY: checksums 198 checksums: 199 sha256sum ./dist/$(BINARY_NAME)-*.gz | awk -F './dist/' '{print $$1 $$2}' > ./dist/$(BINARY_NAME)-checksums.txt