GO_MOD_DIRS := $(shell find . -type f -name 'go.mod' -exec dirname {} \; | sort) REDIS_VERSION ?= 8.2 RE_CLUSTER ?= false RCE_DOCKER ?= true CLIENT_LIBS_TEST_IMAGE ?= redislabs/client-libs-test:8.2.1-pre docker.start: export RE_CLUSTER=$(RE_CLUSTER) && \ export RCE_DOCKER=$(RCE_DOCKER) && \ export REDIS_VERSION=$(REDIS_VERSION) && \ export CLIENT_LIBS_TEST_IMAGE=$(CLIENT_LIBS_TEST_IMAGE) && \ docker compose --profile all up -d --quiet-pull docker.stop: docker compose --profile all down test: $(MAKE) docker.start @if [ -z "$(REDIS_VERSION)" ]; then \ echo "REDIS_VERSION not set, running all tests"; \ $(MAKE) test.ci; \ else \ MAJOR_VERSION=$$(echo "$(REDIS_VERSION)" | cut -d. -f1); \ if [ "$$MAJOR_VERSION" -ge 8 ]; then \ echo "REDIS_VERSION $(REDIS_VERSION) >= 8, running all tests"; \ $(MAKE) test.ci; \ else \ echo "REDIS_VERSION $(REDIS_VERSION) < 8, skipping vector_sets tests"; \ $(MAKE) test.ci.skip-vectorsets; \ fi; \ fi $(MAKE) docker.stop test.ci: set -e; for dir in $(GO_MOD_DIRS); do \ echo "go test in $${dir}"; \ (cd "$${dir}" && \ export RE_CLUSTER=$(RE_CLUSTER) && \ export RCE_DOCKER=$(RCE_DOCKER) && \ export REDIS_VERSION=$(REDIS_VERSION) && \ go mod tidy -compat=1.18 && \ go vet && \ go test -v -coverprofile=coverage.txt -covermode=atomic ./... -race -skip Example); \ done cd internal/customvet && go build . go vet -vettool ./internal/customvet/customvet test.ci.skip-vectorsets: set -e; for dir in $(GO_MOD_DIRS); do \ echo "go test in $${dir} (skipping vector sets)"; \ (cd "$${dir}" && \ export RE_CLUSTER=$(RE_CLUSTER) && \ export RCE_DOCKER=$(RCE_DOCKER) && \ export REDIS_VERSION=$(REDIS_VERSION) && \ go mod tidy -compat=1.18 && \ go vet && \ go test -v -coverprofile=coverage.txt -covermode=atomic ./... -race \ -run '^(?!.*(?:VectorSet|vectorset|ExampleClient_vectorset)).*$$' -skip Example); \ done cd internal/customvet && go build . go vet -vettool ./internal/customvet/customvet bench: export RE_CLUSTER=$(RE_CLUSTER) && \ export RCE_DOCKER=$(RCE_DOCKER) && \ export REDIS_VERSION=$(REDIS_VERSION) && \ go test ./... -test.run=NONE -test.bench=. -test.benchmem -skip Example .PHONY: all test test.ci test.ci.skip-vectorsets bench fmt build: export RE_CLUSTER=$(RE_CLUSTER) && \ export RCE_DOCKER=$(RCE_DOCKER) && \ export REDIS_VERSION=$(REDIS_VERSION) && \ go build . fmt: gofumpt -w ./ goimports -w -local github.com/redis/go-redis ./ go_mod_tidy: set -e; for dir in $(GO_MOD_DIRS); do \ echo "go mod tidy in $${dir}"; \ (cd "$${dir}" && \ go get -u ./... && \ go mod tidy -compat=1.18); \ done