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