mirror of
https://github.com/hanzoai/tasks.git
synced 2026-10-04 02:04:03 +00:00
590 lines
27 KiB
Makefile
590 lines
27 KiB
Makefile
############################# Main targets #############################
|
|
# Install all tools and builds binaries.
|
|
install: bins
|
|
|
|
# Rebuild binaries (used by Dockerfile).
|
|
bins: temporal-server temporal-cassandra-tool temporal-sql-tool tdbg
|
|
|
|
# Install all tools, recompile proto files, run all possible checks and tests (long but comprehensive).
|
|
all: clean proto bins check test
|
|
|
|
# Used in CI
|
|
ci-build-misc: print-go-version proto bins shell-check copyright-check go-generate gomodtidy ensure-no-changes
|
|
|
|
# Delete all build artifacts
|
|
clean: clean-bins clean-test-results
|
|
rm -rf $(STAMPDIR)
|
|
rm -rf $(TEST_OUTPUT_ROOT)
|
|
rm -rf $(LOCALBIN)
|
|
|
|
# Recompile proto files.
|
|
proto: clean-proto lint-protos lint-api protoc service-clients goimports-proto proto-mocks copyright-proto
|
|
|
|
# Update proto submodule from remote and recompile proto files.
|
|
update-proto: update-proto-submodule proto gomodtidy
|
|
########################################################################
|
|
|
|
.PHONY: proto proto-mocks protoc install bins ci-build-misc clean
|
|
|
|
##### Arguments ######
|
|
GOOS ?= $(shell go env GOOS)
|
|
GOARCH ?= $(shell go env GOARCH)
|
|
GOPATH ?= $(shell go env GOPATH)
|
|
# Disable cgo by default.
|
|
CGO_ENABLED ?= 0
|
|
|
|
TEST_ARGS ?= -race
|
|
PERSISTENCE_TYPE ?= nosql
|
|
PERSISTENCE_DRIVER ?= cassandra
|
|
|
|
# Optional args to create multiple keyspaces:
|
|
# make install-schema TEMPORAL_DB=temporal2 VISIBILITY_DB=temporal_visibility2
|
|
TEMPORAL_DB ?= temporal
|
|
VISIBILITY_DB ?= temporal_visibility
|
|
|
|
# Always use "protolegacy" tag to allow disabling utf-8 validation on proto messages
|
|
# during proto library transition.
|
|
ALL_BUILD_TAGS := protolegacy,$(BUILD_TAG)
|
|
ALL_TEST_TAGS := $(ALL_BUILD_TAGS),$(TEST_TAG)
|
|
BUILD_TAG_FLAG := -tags $(ALL_BUILD_TAGS)
|
|
TEST_TAG_FLAG := -tags $(ALL_TEST_TAGS)
|
|
|
|
|
|
##### Variables ######
|
|
|
|
ROOT := $(shell git rev-parse --show-toplevel)
|
|
LOCALBIN := .bin
|
|
STAMPDIR := .stamp
|
|
export PATH := $(ROOT)/$(LOCALBIN):$(PATH)
|
|
GOINSTALL := GOBIN=$(ROOT)/$(LOCALBIN) go install
|
|
|
|
MODULE_ROOT := $(lastword $(shell grep -e "^module " go.mod))
|
|
COLOR := "\e[1;36m%s\e[0m\n"
|
|
RED := "\e[1;31m%s\e[0m\n"
|
|
|
|
define NEWLINE
|
|
|
|
|
|
endef
|
|
|
|
TEST_TIMEOUT := 30m
|
|
|
|
PROTO_ROOT := proto
|
|
PROTO_FILES = $(shell find ./$(PROTO_ROOT)/internal -name "*.proto")
|
|
PROTO_DIRS = $(sort $(dir $(PROTO_FILES)))
|
|
PROTO_IMPORTS = -I=$(PROTO_ROOT)/internal -I=$(PROTO_ROOT)/api -I=$(PROTO_ROOT)/dependencies
|
|
PROTO_OPTS = paths=source_relative:$(PROTO_OUT)
|
|
PROTO_OUT := api
|
|
PROTO_ENUMS := $(shell grep -R '^enum ' $(PROTO_ROOT) | cut -d ' ' -f2)
|
|
PROTO_PATHS = paths=source_relative:$(PROTO_OUT)
|
|
|
|
ALL_SRC := $(shell find . -name "*.go")
|
|
ALL_SRC += go.mod
|
|
ALL_SCRIPTS := $(shell find . -name "*.sh")
|
|
|
|
MAIN_BRANCH := main
|
|
|
|
TEST_DIRS := $(sort $(dir $(filter %_test.go,$(ALL_SRC))))
|
|
FUNCTIONAL_TEST_ROOT := ./tests
|
|
FUNCTIONAL_TEST_XDC_ROOT := ./tests/xdc
|
|
FUNCTIONAL_TEST_NDC_ROOT := ./tests/ndc
|
|
DB_INTEGRATION_TEST_ROOT := ./common/persistence/tests
|
|
DB_TOOL_INTEGRATION_TEST_ROOT := ./tools/tests
|
|
INTEGRATION_TEST_DIRS := $(DB_INTEGRATION_TEST_ROOT) $(DB_TOOL_INTEGRATION_TEST_ROOT) ./temporaltest ./internal/temporalite
|
|
UNIT_TEST_DIRS := $(filter-out $(FUNCTIONAL_TEST_ROOT)% $(FUNCTIONAL_TEST_XDC_ROOT)% $(FUNCTIONAL_TEST_NDC_ROOT)% $(DB_INTEGRATION_TEST_ROOT)% $(DB_TOOL_INTEGRATION_TEST_ROOT)% ./temporaltest% ./internal/temporalite%,$(TEST_DIRS))
|
|
|
|
# github.com/urfave/cli/[email protected] - needs to accept comma in values before unlocking https://github.com/urfave/cli/pull/1241.
|
|
PINNED_DEPENDENCIES := \
|
|
github.com/go-sql-driver/[email protected] \
|
|
github.com/urfave/cli/[email protected]
|
|
|
|
# Code coverage & test report output files.
|
|
TEST_OUTPUT_ROOT := ./.testoutput
|
|
NEW_COVER_PROFILE = $(TEST_OUTPUT_ROOT)/$(shell xxd -p -l 16 /dev/urandom).cover.out # generates a new filename each time it's substituted
|
|
SUMMARY_COVER_PROFILE := $(TEST_OUTPUT_ROOT)/summary.cover.out
|
|
NEW_REPORT = $(TEST_OUTPUT_ROOT)/$(shell xxd -p -l 16 /dev/urandom).junit.xml # generates a new filename each time it's substituted
|
|
|
|
# DB
|
|
SQL_USER ?= temporal
|
|
SQL_PASSWORD ?= temporal
|
|
|
|
# Need the following option to have integration and functional tests count towards coverage. godoc below:
|
|
# -coverpkg pkg1,pkg2,pkg3
|
|
# Apply coverage analysis in each test to the given list of packages.
|
|
# The default is for each test to analyze only the package being tested.
|
|
# Packages are specified as import paths.
|
|
INTEGRATION_TEST_COVERPKG := -coverpkg="$(MODULE_ROOT)/common/persistence/..."
|
|
FUNCTIONAL_TEST_COVERPKG := -coverpkg="$(MODULE_ROOT)/client/...,$(MODULE_ROOT)/common/...,$(MODULE_ROOT)/service/...,$(MODULE_ROOT)/temporal/..."
|
|
|
|
# Only prints output if the exit code is non-zero
|
|
define silent_exec
|
|
@output=$$($(1) 2>&1); \
|
|
status=$$?; \
|
|
if [ $$status -ne 0 ]; then \
|
|
echo "$$output"; \
|
|
fi; \
|
|
exit $$status
|
|
endef
|
|
|
|
##### Tools #####
|
|
print-go-version:
|
|
@go version
|
|
|
|
$(STAMPDIR):
|
|
@mkdir -p $(STAMPDIR)
|
|
|
|
$(LOCALBIN):
|
|
@mkdir -p $(LOCALBIN)
|
|
|
|
# When updating the version, update the golangci-lint GHA workflow as well.
|
|
.PHONY: golangci-lint
|
|
GOLANGCI_LINT_BASE_REV ?= $(MAIN_BRANCH)
|
|
GOLANGCI_LINT_FIX ?= true
|
|
GOLANGCI_LINT_VERSION := v1.57.2
|
|
GOLANGCI_LINT := $(LOCALBIN)/golangci-lint-$(GOLANGCI_LINT_VERSION)
|
|
$(GOLANGCI_LINT): $(LOCALBIN)
|
|
$(call go-install-tool,$(GOLANGCI_LINT),github.com/golangci/golangci-lint/cmd/golangci-lint,$(GOLANGCI_LINT_VERSION))
|
|
|
|
GOTESTSUM_VER := v1.11
|
|
GOTESTSUM := $(LOCALBIN)/gotestsum-$(GOTESTSUM_VER)
|
|
$(GOTESTSUM): | $(LOCALBIN)
|
|
$(call go-install-tool,$(GOTESTSUM),gotest.tools/gotestsum,$(GOTESTSUM_VER))
|
|
|
|
API_LINTER_VER := v1.32.3
|
|
API_LINTER := $(LOCALBIN)/api-linter-$(API_LINTER_VER)
|
|
$(API_LINTER): | $(LOCALBIN)
|
|
$(call go-install-tool,$(API_LINTER),github.com/googleapis/api-linter/cmd/api-linter,$(API_LINTER_VER))
|
|
|
|
BUF_VER := v1.6.0
|
|
BUF := $(LOCALBIN)/buf-$(BUF_VER)
|
|
$(BUF): | $(LOCALBIN)
|
|
$(call go-install-tool,$(BUF),github.com/bufbuild/buf/cmd/buf,$(BUF_VER))
|
|
|
|
GO_API_VER := v1.29.0
|
|
PROTOGEN := $(LOCALBIN)/protogen-$(GO_API_VER)
|
|
$(PROTOGEN): | $(LOCALBIN)
|
|
$(call go-install-tool,$(PROTOGEN),go.temporal.io/api/cmd/protogen,$(GO_API_VER))
|
|
|
|
ACTIONLINT_VER := v1.6.27
|
|
ACTIONLINT := $(LOCALBIN)/actionlint-$(ACTIONLINT_VER)
|
|
$(ACTIONLINT): | $(LOCALBIN)
|
|
$(call go-install-tool,$(ACTIONLINT),github.com/rhysd/actionlint/cmd/actionlint,$(ACTIONLINT_VER))
|
|
|
|
# The following tools need to have a consistent name, so we use a versioned stamp file to ensure the version we want is installed
|
|
# while installing to an unversioned binary name.
|
|
GOIMPORTS_VER := v0.20.0
|
|
GOIMPORTS := $(LOCALBIN)/goimports
|
|
$(STAMPDIR)/goimports-$(GOIMPORTS_VER): | $(STAMPDIR) $(LOCALBIN)
|
|
$(call go-install-tool,$(GOIMPORTS),golang.org/x/tools/cmd/goimports,$(GOIMPORTS_VER))
|
|
@touch $@
|
|
$(GOIMPORTS): $(STAMPDIR)/goimports-$(GOIMPORTS_VER)
|
|
|
|
# Mockgen is called by name throughout the codebase, so we need to keep the binary name consistent
|
|
MOCKGEN_VER := v1.7.0-rc.1
|
|
MOCKGEN := $(LOCALBIN)/mockgen
|
|
$(STAMPDIR)/mockgen-$(MOCKGEN_VER): | $(STAMPDIR) $(LOCALBIN)
|
|
$(call go-install-tool,$(MOCKGEN),github.com/golang/mock/mockgen,$(MOCKGEN_VER))
|
|
@touch $@
|
|
$(MOCKGEN): $(STAMPDIR)/mockgen-$(MOCKGEN_VER)
|
|
PROTOC_GEN_GO_VER := v1.33.0
|
|
PROTOC_GEN_GO := $(LOCALBIN)/protoc-gen-go
|
|
$(STAMPDIR)/protoc-gen-go-$(PROTOC_GEN_GO_VER): | $(STAMPDIR) $(LOCALBIN)
|
|
$(call go-install-tool,$(PROTOC_GEN_GO),google.golang.org/protobuf/cmd/protoc-gen-go,$(PROTOC_GEN_GO_VER))
|
|
@touch $@
|
|
$(PROTOC_GEN_GO): $(STAMPDIR)/protoc-gen-go-$(PROTOC_GEN_GO_VER)
|
|
|
|
PROTOC_GEN_GO_GRPC_VER := v1.3.0
|
|
PROTOC_GEN_GO_GRPC := $(LOCALBIN)/protoc-gen-go-grpc
|
|
$(STAMPDIR)/protoc-gen-go-grpc-$(PROTOC_GEN_GO_GRPC_VER): | $(STAMPDIR) $(LOCALBIN)
|
|
$(call go-install-tool,$(PROTOC_GEN_GO_GRPC),google.golang.org/grpc/cmd/protoc-gen-go-grpc,$(PROTOC_GEN_GO_GRPC_VER))
|
|
@touch $@
|
|
$(PROTOC_GEN_GO_GRPC): $(STAMPDIR)/protoc-gen-go-grpc-$(PROTOC_GEN_GO_GRPC_VER)
|
|
|
|
PROTOC_GEN_GO_HELPERS := $(LOCALBIN)/protoc-gen-go-helpers
|
|
$(STAMPDIR)/protoc-gen-go-helpers-$(GO_API_VER): | $(STAMPDIR) $(LOCALBIN)
|
|
$(call go-install-tool,$(PROTOC_GEN_GO_HELPERS),go.temporal.io/api/cmd/protoc-gen-go-helpers,$(GO_API_VER))
|
|
@touch $@
|
|
$(PROTOC_GEN_GO_HELPERS): $(STAMPDIR)/protoc-gen-go-helpers-$(GO_API_VER)
|
|
|
|
# go-install-tool will 'go install' any package with custom target and name of binary, if it doesn't exist
|
|
# $1 - target path with name of binary (ideally with version)
|
|
# $2 - package url which can be installed
|
|
# $3 - specific version of package
|
|
# This is courtesy of https://github.com/kubernetes-sigs/kubebuilder/pull/3718
|
|
define go-install-tool
|
|
@[ -f $(1) ] || { \
|
|
set -e; \
|
|
package=$(2)@$(3) ;\
|
|
printf $(COLOR) "Downloading $${package}" ;\
|
|
tmpdir=$$(mktemp -d) ;\
|
|
GOBIN=$${tmpdir} go install $${package} ;\
|
|
mv $${tmpdir}/$$(basename "$$(echo "$(1)" | sed "s/-$(3)$$//")") $(1) ;\
|
|
rm -rf $${tmpdir} ;\
|
|
}
|
|
endef
|
|
|
|
##### Proto #####
|
|
$(PROTO_OUT):
|
|
@mkdir -p $(PROTO_OUT)
|
|
|
|
# We depend on gomodtidy to ensure that go.mod is up to date before we delete the generated files
|
|
# in case protogen fails, and we need to rerun it.
|
|
clean-proto: gomodtidy
|
|
@rm -rf $(PROTO_OUT)/*
|
|
|
|
update-proto-submodule:
|
|
@printf $(COLOR) "Update proto submodule from remote..."
|
|
git submodule update --force --remote $(PROTO_ROOT)/api
|
|
|
|
install-proto-submodule:
|
|
@printf $(COLOR) "Install proto submodule..."
|
|
git submodule update --init $(PROTO_ROOT)/api
|
|
|
|
protoc: clean-proto $(PROTO_OUT) $(PROTOGEN) $(PROTOC_GEN_GO) $(PROTOC_GEN_GO_GRPC) $(PROTOC_GEN_GO_HELPERS)
|
|
@$(PROTOGEN) \
|
|
-I=proto/api \
|
|
-I=proto/dependencies \
|
|
--root=proto/internal \
|
|
--rewrite-enum=BuildId_State:BuildId \
|
|
-p go-grpc_out=$(PROTO_PATHS) \
|
|
-p go-helpers_out=$(PROTO_PATHS)
|
|
@mv -f "$(PROTO_OUT)/temporal/server/api/"* "$(PROTO_OUT)"
|
|
|
|
# All gRPC generated service files paths relative to PROTO_OUT.
|
|
PROTO_GRPC_SERVICES = $(patsubst $(PROTO_OUT)/%,%,$(shell find $(PROTO_OUT) -name "service.pb.go" -o -name "service_grpc.pb.go"))
|
|
service_name = $(firstword $(subst /, ,$(1)))
|
|
mock_file_name = $(call service_name,$(1))mock/$(subst $(call service_name,$(1))/,,$(1:go=mock.go))
|
|
|
|
proto-mocks: protoc $(MOCKGEN)
|
|
@printf $(COLOR) "Generate proto mocks..."
|
|
$(foreach PROTO_GRPC_SERVICE,$(PROTO_GRPC_SERVICES),\
|
|
@cd $(PROTO_OUT) && \
|
|
$(ROOT)/$(MOCKGEN) -copyright_file ../LICENSE -package $(call service_name,$(PROTO_GRPC_SERVICE))mock -source $(PROTO_GRPC_SERVICE) -destination $(call mock_file_name,$(PROTO_GRPC_SERVICE)) \
|
|
$(NEWLINE))
|
|
|
|
service-clients:
|
|
@printf $(COLOR) "Generate service clients..."
|
|
@go generate -run rpcwrappers ./client/...
|
|
|
|
update-go-api:
|
|
@printf $(COLOR) "Update go.temporal.io/api@master..."
|
|
@go get -u go.temporal.io/api@master
|
|
|
|
goimports-proto: $(GOIMPORTS)
|
|
@printf $(COLOR) "Run goimports for proto files..."
|
|
@$(GOIMPORTS) -w $(PROTO_OUT)
|
|
|
|
copyright-proto:
|
|
@printf $(COLOR) "Update license headers for proto files..."
|
|
@go run ./cmd/tools/copyright/licensegen.go --scanDir $(PROTO_OUT)
|
|
|
|
##### Binaries #####
|
|
clean-bins:
|
|
@printf $(COLOR) "Delete old binaries..."
|
|
@rm -f temporal-server
|
|
@rm -f temporal-cassandra-tool
|
|
@rm -f tdbg
|
|
@rm -f temporal-sql-tool
|
|
|
|
temporal-server: $(ALL_SRC)
|
|
@printf $(COLOR) "Build temporal-server with CGO_ENABLED=$(CGO_ENABLED) for $(GOOS)/$(GOARCH)..."
|
|
CGO_ENABLED=$(CGO_ENABLED) go build $(BUILD_TAG_FLAG) -o temporal-server ./cmd/server
|
|
|
|
tdbg: $(ALL_SRC)
|
|
@printf $(COLOR) "Build tdbg with CGO_ENABLED=$(CGO_ENABLED) for $(GOOS)/$(GOARCH)..."
|
|
CGO_ENABLED=$(CGO_ENABLED) go build $(BUILD_TAG_FLAG) -o tdbg ./cmd/tools/tdbg
|
|
|
|
temporal-cassandra-tool: $(ALL_SRC)
|
|
@printf $(COLOR) "Build temporal-cassandra-tool with CGO_ENABLED=$(CGO_ENABLED) for $(GOOS)/$(GOARCH)..."
|
|
CGO_ENABLED=$(CGO_ENABLED) go build $(BUILD_TAG_FLAG) -o temporal-cassandra-tool ./cmd/tools/cassandra
|
|
|
|
temporal-sql-tool: $(ALL_SRC)
|
|
@printf $(COLOR) "Build temporal-sql-tool with CGO_ENABLED=$(CGO_ENABLED) for $(GOOS)/$(GOARCH)..."
|
|
CGO_ENABLED=$(CGO_ENABLED) go build $(BUILD_TAG_FLAG) -o temporal-sql-tool ./cmd/tools/sql
|
|
|
|
temporal-server-debug: $(ALL_SRC)
|
|
@printf $(COLOR) "Build temporal-server-debug with CGO_ENABLED=$(CGO_ENABLED) for $(GOOS)/$(GOARCH)..."
|
|
CGO_ENABLED=$(CGO_ENABLED) go build $(BUILD_TAG_FLAG),TEMPORAL_DEBUG -o temporal-server-debug ./cmd/server
|
|
|
|
##### Checks #####
|
|
copyright-check:
|
|
@printf $(COLOR) "Check license header..."
|
|
@go run ./cmd/tools/copyright/licensegen.go --verifyOnly
|
|
|
|
copyright:
|
|
@printf $(COLOR) "Fix license header..."
|
|
@go run ./cmd/tools/copyright/licensegen.go
|
|
|
|
goimports: MERGE_BASE ?= $(shell test -d .git && git merge-base $(MAIN_BRANCH) HEAD)
|
|
goimports: MODIFIED_FILES := $(shell test -d .git && git diff --name-status $(MERGE_BASE) -- | cut -f2)
|
|
goimports:
|
|
@printf $(COLOR) "Run goimports for modified files..."
|
|
@printf "Merge base: $(MERGE_BASE)\n"
|
|
@printf "Modified files: $(MODIFIED_FILES)\n"
|
|
@$(GOIMPORTS_BIN) -w $(filter %.go, $(MODIFIED_FILES))
|
|
|
|
lint-actions: $(ACTIONLINT)
|
|
@printf $(COLOR) "Linting GitHub actions..."
|
|
@$(ACTIONLINT)
|
|
|
|
lint-code: $(GOLANGCI_LINT)
|
|
@printf $(COLOR) "Linting code..."
|
|
@$(GOLANGCI_LINT) run --verbose --timeout 10m --fix=$(GOLANGCI_LINT_FIX) --new-from-rev=$(GOLANGCI_LINT_BASE_REV) --config=.golangci.yml
|
|
|
|
lint: lint-code lint-actions lint-api lint-protos
|
|
@printf $(COLOR) "Run linters..."
|
|
|
|
lint-api: $(API_LINTER)
|
|
@printf $(COLOR) "Linting proto API..."
|
|
$(call silent_exec, $(API_LINTER) --set-exit-status $(PROTO_IMPORTS) --config=$(PROTO_ROOT)/api-linter.yaml $(PROTO_FILES))
|
|
|
|
lint-protos: $(BUF)
|
|
@printf $(COLOR) "Linting proto definitions..."
|
|
@(cd $(PROTO_ROOT) && $(ROOT)/$(BUF) lint)
|
|
|
|
buf-build: $(BUF)
|
|
@printf $(COLOR) "Build image.bin with buf..."
|
|
@(cd $(PROTO_ROOT) && $(ROOT)/$(BUF) build -o image.bin)
|
|
|
|
buf-breaking: $(BUF)
|
|
@printf $(COLOR) "Run buf breaking changes check against image.bin..."
|
|
@(cd $(PROTO_ROOT) && $(ROOT)/$(BUF) check breaking --against image.bin)
|
|
|
|
shell-check:
|
|
@printf $(COLOR) "Run shellcheck for script files..."
|
|
@shellcheck $(ALL_SCRIPTS)
|
|
|
|
check: copyright-check lint shell-check
|
|
|
|
##### Tests #####
|
|
clean-test-results:
|
|
@rm -f test.log $(TEST_OUTPUT_ROOT)/*
|
|
@go clean -testcache
|
|
|
|
build-tests:
|
|
@printf $(COLOR) "Build tests..."
|
|
@go test $(TEST_TAG_FLAG) -exec="true" -count=0 $(TEST_DIRS)
|
|
|
|
unit-test: clean-test-results
|
|
@printf $(COLOR) "Run unit tests..."
|
|
@go test $(UNIT_TEST_DIRS) -timeout=$(TEST_TIMEOUT) $(TEST_TAG_FLAG) $(TEST_ARGS) 2>&1 | tee -a test.log
|
|
@! grep -q "^--- FAIL" test.log
|
|
|
|
integration-test: clean-test-results
|
|
@printf $(COLOR) "Run integration tests..."
|
|
@go test $(INTEGRATION_TEST_DIRS) -timeout=$(TEST_TIMEOUT) $(TEST_TAG_FLAG) $(TEST_ARGS) 2>&1 | tee -a test.log
|
|
@! grep -q "^--- FAIL" test.log
|
|
|
|
functional-test: clean-test-results
|
|
@printf $(COLOR) "Run functional tests..."
|
|
@go test $(FUNCTIONAL_TEST_ROOT) -timeout=$(TEST_TIMEOUT) $(TEST_TAG_FLAG) $(TEST_ARGS) -persistenceType=$(PERSISTENCE_TYPE) -persistenceDriver=$(PERSISTENCE_DRIVER) 2>&1 | tee -a test.log
|
|
@go test $(FUNCTIONAL_TEST_NDC_ROOT) -timeout=$(TEST_TIMEOUT) $(TEST_TAG_FLAG) $(TEST_ARGS) -persistenceType=$(PERSISTENCE_TYPE) -persistenceDriver=$(PERSISTENCE_DRIVER) 2>&1 | tee -a test.log
|
|
# Need to run xdc tests with race detector off because of ringpop bug causing data race issue.
|
|
@go test $(FUNCTIONAL_TEST_XDC_ROOT) -timeout=$(TEST_TIMEOUT) $(TEST_TAG_FLAG) -persistenceType=$(PERSISTENCE_TYPE) -persistenceDriver=$(PERSISTENCE_DRIVER) 2>&1 | tee -a test.log
|
|
@! grep -q "^--- FAIL" test.log
|
|
|
|
functional-with-fault-injection-test: clean-test-results
|
|
@printf $(COLOR) "Run integration tests with fault injection..."
|
|
@go test $(FUNCTIONAL_TEST_ROOT) -timeout=$(TEST_TIMEOUT) $(TEST_TAG_FLAG) $(TEST_ARGS) -PersistenceFaultInjectionRate=0.005 -persistenceType=$(PERSISTENCE_TYPE) -persistenceDriver=$(PERSISTENCE_DRIVER) 2>&1 | tee -a test.log
|
|
@go test $(FUNCTIONAL_TEST_NDC_ROOT) -timeout=$(TEST_TIMEOUT) $(TEST_TAG_FLAG) $(TEST_ARGS) -PersistenceFaultInjectionRate=0.005 -persistenceType=$(PERSISTENCE_TYPE) -persistenceDriver=$(PERSISTENCE_DRIVER) 2>&1 | tee -a test.log
|
|
# Need to run xdc tests with race detector off because of ringpop bug causing data race issue.
|
|
@go test $(FUNCTIONAL_TEST_XDC_ROOT) -timeout=$(TEST_TIMEOUT) $(TEST_TAG_FLAG) -PersistenceFaultInjectionRate=0.005 -persistenceType=$(PERSISTENCE_TYPE) -persistenceDriver=$(PERSISTENCE_DRIVER) 2>&1 | tee -a test.log
|
|
@! grep -q "^--- FAIL" test.log
|
|
|
|
test: unit-test integration-test functional-test functional-with-fault-injection-test
|
|
|
|
##### Coverage & Reporting #####
|
|
$(TEST_OUTPUT_ROOT):
|
|
@mkdir -p $(TEST_OUTPUT_ROOT)
|
|
|
|
prepare-coverage-test: $(GOTESTSUM) $(TEST_OUTPUT_ROOT)
|
|
|
|
unit-test-coverage: prepare-coverage-test
|
|
@printf $(COLOR) "Run unit tests with coverage..."
|
|
@$(GOTESTSUM) --junitfile $(NEW_REPORT) -- \
|
|
$(UNIT_TEST_DIRS) -timeout=$(TEST_TIMEOUT) -race $(TEST_TAG_FLAG) -coverprofile=$(NEW_COVER_PROFILE)
|
|
|
|
integration-test-coverage: prepare-coverage-test
|
|
@printf $(COLOR) "Run integration tests with coverage..."
|
|
@$(GOTESTSUM) --junitfile $(NEW_REPORT) -- \
|
|
$(INTEGRATION_TEST_DIRS) -timeout=$(TEST_TIMEOUT) $(TEST_TAG_FLAG) $(INTEGRATION_TEST_COVERPKG) -coverprofile=$(NEW_COVER_PROFILE)
|
|
|
|
# This should use the same build flags as functional-test-coverage for best build caching.
|
|
pre-build-functional-test-coverage: prepare-coverage-test
|
|
@go test -c -o /dev/null $(FUNCTIONAL_TEST_ROOT) -race $(TEST_TAG_FLAG) $(FUNCTIONAL_TEST_COVERPKG)
|
|
|
|
functional-test-coverage: prepare-coverage-test
|
|
@printf $(COLOR) "Run functional tests with coverage with $(PERSISTENCE_DRIVER) driver..."
|
|
@$(GOTESTSUM) --junitfile $(NEW_REPORT) -- \
|
|
$(FUNCTIONAL_TEST_ROOT) -timeout=$(TEST_TIMEOUT) $(TEST_ARGS) $(TEST_TAG_FLAG) -persistenceType=$(PERSISTENCE_TYPE) -persistenceDriver=$(PERSISTENCE_DRIVER) $(FUNCTIONAL_TEST_COVERPKG) -coverprofile=$(NEW_COVER_PROFILE)
|
|
|
|
functional-test-xdc-coverage: prepare-coverage-test
|
|
@printf $(COLOR) "Run functional test for cross DC with coverage with $(PERSISTENCE_DRIVER) driver..."
|
|
@$(GOTESTSUM) --junitfile $(NEW_REPORT) -- \
|
|
$(FUNCTIONAL_TEST_XDC_ROOT) -timeout=$(TEST_TIMEOUT) $(TEST_TAG_FLAG) -persistenceType=$(PERSISTENCE_TYPE) -persistenceDriver=$(PERSISTENCE_DRIVER) $(FUNCTIONAL_TEST_COVERPKG) -coverprofile=$(NEW_COVER_PROFILE)
|
|
|
|
functional-test-ndc-coverage: prepare-coverage-test
|
|
@printf $(COLOR) "Run functional test for NDC with coverage with $(PERSISTENCE_DRIVER) driver..."
|
|
@$(GOTESTSUM) --junitfile $(NEW_REPORT) -- \
|
|
$(FUNCTIONAL_TEST_NDC_ROOT) -timeout=$(TEST_TIMEOUT) $(TEST_ARGS) $(TEST_TAG_FLAG) -persistenceType=$(PERSISTENCE_TYPE) -persistenceDriver=$(PERSISTENCE_DRIVER) $(FUNCTIONAL_TEST_COVERPKG) -coverprofile=$(NEW_COVER_PROFILE)
|
|
|
|
.PHONY: $(SUMMARY_COVER_PROFILE)
|
|
$(SUMMARY_COVER_PROFILE):
|
|
@printf $(COLOR) "Combine coverage reports to $(SUMMARY_COVER_PROFILE)..."
|
|
@rm -f $(SUMMARY_COVER_PROFILE) $(SUMMARY_COVER_PROFILE).html
|
|
@if [ -z "$(wildcard $(TEST_OUTPUT_ROOT)/*.cover.out)" ]; then \
|
|
echo "No coverage data, aborting!" && exit 1; \
|
|
fi
|
|
@echo "mode: atomic" > $(SUMMARY_COVER_PROFILE)
|
|
$(foreach COVER_PROFILE,$(wildcard $(TEST_OUTPUT_ROOT)/*.cover.out),\
|
|
@printf "Add %s...\n" $(COVER_PROFILE); \
|
|
@grep -v -e "[Mm]ocks\?.go" -e "^mode: \w\+" $(COVER_PROFILE) >> $(SUMMARY_COVER_PROFILE) || true \
|
|
$(NEWLINE))
|
|
|
|
coverage-report: $(SUMMARY_COVER_PROFILE)
|
|
@printf $(COLOR) "Generate HTML report from $(SUMMARY_COVER_PROFILE) to $(SUMMARY_COVER_PROFILE).html..."
|
|
@go tool cover -html=$(SUMMARY_COVER_PROFILE) -o $(SUMMARY_COVER_PROFILE).html
|
|
|
|
##### Schema #####
|
|
install-schema-cass-es: temporal-cassandra-tool install-schema-es
|
|
@printf $(COLOR) "Install Cassandra schema..."
|
|
./temporal-cassandra-tool drop -k $(TEMPORAL_DB) -f
|
|
./temporal-cassandra-tool create -k $(TEMPORAL_DB) --rf 1
|
|
./temporal-cassandra-tool -k $(TEMPORAL_DB) setup-schema -v 0.0
|
|
./temporal-cassandra-tool -k $(TEMPORAL_DB) update-schema -d ./schema/cassandra/temporal/versioned
|
|
|
|
install-schema-mysql: install-schema-mysql8
|
|
|
|
install-schema-mysql8: temporal-sql-tool
|
|
@printf $(COLOR) "Install MySQL schema..."
|
|
./temporal-sql-tool -u $(SQL_USER) --pw $(SQL_PASSWORD) --pl mysql8 --db $(TEMPORAL_DB) drop -f
|
|
./temporal-sql-tool -u $(SQL_USER) --pw $(SQL_PASSWORD) --pl mysql8 --db $(TEMPORAL_DB) create
|
|
./temporal-sql-tool -u $(SQL_USER) --pw $(SQL_PASSWORD) --pl mysql8 --db $(TEMPORAL_DB) setup-schema -v 0.0
|
|
./temporal-sql-tool -u $(SQL_USER) --pw $(SQL_PASSWORD) --pl mysql8 --db $(TEMPORAL_DB) update-schema -d ./schema/mysql/v8/temporal/versioned
|
|
./temporal-sql-tool -u $(SQL_USER) --pw $(SQL_PASSWORD) --pl mysql8 --db $(VISIBILITY_DB) drop -f
|
|
./temporal-sql-tool -u $(SQL_USER) --pw $(SQL_PASSWORD) --pl mysql8 --db $(VISIBILITY_DB) create
|
|
./temporal-sql-tool -u $(SQL_USER) --pw $(SQL_PASSWORD) --pl mysql8 --db $(VISIBILITY_DB) setup-schema -v 0.0
|
|
./temporal-sql-tool -u $(SQL_USER) --pw $(SQL_PASSWORD) --pl mysql8 --db $(VISIBILITY_DB) update-schema -d ./schema/mysql/v8/visibility/versioned
|
|
|
|
install-schema-postgresql: install-schema-postgresql12
|
|
|
|
install-schema-postgresql12: temporal-sql-tool
|
|
@printf $(COLOR) "Install Postgres schema..."
|
|
./temporal-sql-tool -u $(SQL_USER) --pw $(SQL_PASSWORD) -p 5432 --pl postgres12 --db $(TEMPORAL_DB) drop -f
|
|
./temporal-sql-tool -u $(SQL_USER) --pw $(SQL_PASSWORD) -p 5432 --pl postgres12 --db $(TEMPORAL_DB) create
|
|
./temporal-sql-tool -u $(SQL_USER) --pw $(SQL_PASSWORD) -p 5432 --pl postgres12 --db $(TEMPORAL_DB) setup -v 0.0
|
|
./temporal-sql-tool -u $(SQL_USER) --pw $(SQL_PASSWORD) -p 5432 --pl postgres12 --db $(TEMPORAL_DB) update-schema -d ./schema/postgresql/v12/temporal/versioned
|
|
./temporal-sql-tool -u $(SQL_USER) --pw $(SQL_PASSWORD) -p 5432 --pl postgres12 --db $(VISIBILITY_DB) drop -f
|
|
./temporal-sql-tool -u $(SQL_USER) --pw $(SQL_PASSWORD) -p 5432 --pl postgres12 --db $(VISIBILITY_DB) create
|
|
./temporal-sql-tool -u $(SQL_USER) --pw $(SQL_PASSWORD) -p 5432 --pl postgres12 --db $(VISIBILITY_DB) setup-schema -v 0.0
|
|
./temporal-sql-tool -u $(SQL_USER) --pw $(SQL_PASSWORD) -p 5432 --pl postgres12 --db $(VISIBILITY_DB) update-schema -d ./schema/postgresql/v12/visibility/versioned
|
|
|
|
install-schema-es:
|
|
@printf $(COLOR) "Install Elasticsearch schema..."
|
|
curl --fail -X PUT "http://127.0.0.1:9200/_cluster/settings" -H "Content-Type: application/json" --data-binary @./schema/elasticsearch/visibility/cluster_settings_v7.json --write-out "\n"
|
|
curl --fail -X PUT "http://127.0.0.1:9200/_template/temporal_visibility_v1_template" -H "Content-Type: application/json" --data-binary @./schema/elasticsearch/visibility/index_template_v7.json --write-out "\n"
|
|
# No --fail here because create index is not idempotent operation.
|
|
curl -X PUT "http://127.0.0.1:9200/temporal_visibility_v1_dev" --write-out "\n"
|
|
|
|
install-schema-xdc: temporal-cassandra-tool
|
|
@printf $(COLOR) "Install Cassandra schema (active)..."
|
|
./temporal-cassandra-tool drop -k temporal_cluster_a -f
|
|
./temporal-cassandra-tool create -k temporal_cluster_a --rf 1
|
|
./temporal-cassandra-tool -k temporal_cluster_a setup-schema -v 0.0
|
|
./temporal-cassandra-tool -k temporal_cluster_a update-schema -d ./schema/cassandra/temporal/versioned
|
|
|
|
@printf $(COLOR) "Install Cassandra schema (standby)..."
|
|
./temporal-cassandra-tool drop -k temporal_cluster_b -f
|
|
./temporal-cassandra-tool create -k temporal_cluster_b --rf 1
|
|
./temporal-cassandra-tool -k temporal_cluster_b setup-schema -v 0.0
|
|
./temporal-cassandra-tool -k temporal_cluster_b update-schema -d ./schema/cassandra/temporal/versioned
|
|
|
|
@printf $(COLOR) "Install Cassandra schema (other)..."
|
|
./temporal-cassandra-tool drop -k temporal_cluster_c -f
|
|
./temporal-cassandra-tool create -k temporal_cluster_c --rf 1
|
|
./temporal-cassandra-tool -k temporal_cluster_c setup-schema -v 0.0
|
|
./temporal-cassandra-tool -k temporal_cluster_c update-schema -d ./schema/cassandra/temporal/versioned
|
|
|
|
@printf $(COLOR) "Install Elasticsearch schemas..."
|
|
curl --fail -X PUT "http://127.0.0.1:9200/_cluster/settings" -H "Content-Type: application/json" --data-binary @./schema/elasticsearch/visibility/cluster_settings_v7.json --write-out "\n"
|
|
curl --fail -X PUT "http://127.0.0.1:9200/_template/temporal_visibility_v1_template" -H "Content-Type: application/json" --data-binary @./schema/elasticsearch/visibility/index_template_v7.json --write-out "\n"
|
|
# No --fail here because create index is not idempotent operation.
|
|
curl -X DELETE http://localhost:9200/temporal_visibility_v1_dev_cluster_a
|
|
curl -X DELETE http://localhost:9200/temporal_visibility_v1_dev_cluster_b
|
|
curl -X DELETE http://localhost:9200/temporal_visibility_v1_dev_cluster_c
|
|
curl -X PUT "http://127.0.0.1:9200/temporal_visibility_v1_dev_cluster_a" --write-out "\n"
|
|
curl -X PUT "http://127.0.0.1:9200/temporal_visibility_v1_dev_cluster_b" --write-out "\n"
|
|
curl -X PUT "http://127.0.0.1:9200/temporal_visibility_v1_dev_cluster_c" --write-out "\n"
|
|
|
|
##### Run server #####
|
|
DOCKER_COMPOSE_FILES := -f ./develop/docker-compose/docker-compose.yml -f ./develop/docker-compose/docker-compose.$(GOOS).yml
|
|
DOCKER_COMPOSE_CDC_FILES := -f ./develop/docker-compose/docker-compose.cdc.yml -f ./develop/docker-compose/docker-compose.cdc.$(GOOS).yml
|
|
start-dependencies:
|
|
docker compose $(DOCKER_COMPOSE_FILES) up
|
|
|
|
stop-dependencies:
|
|
docker compose $(DOCKER_COMPOSE_FILES) down
|
|
|
|
start-dependencies-cdc:
|
|
docker compose $(DOCKER_COMPOSE_FILES) $(DOCKER_COMPOSE_CDC_FILES) up
|
|
|
|
stop-dependencies-cdc:
|
|
docker compose $(DOCKER_COMPOSE_FILES) $(DOCKER_COMPOSE_CDC_FILES) down
|
|
|
|
start: start-sqlite
|
|
|
|
start-cass-es: temporal-server
|
|
./temporal-server --env development-cass-es --allow-no-auth start
|
|
|
|
start-es-fi: temporal-server
|
|
./temporal-server --env development-cass-es-fi --allow-no-auth start
|
|
|
|
start-mysql: start-mysql8
|
|
|
|
start-mysql8: temporal-server
|
|
./temporal-server --env development-mysql8 --allow-no-auth start
|
|
|
|
start-mysql-es: temporal-server
|
|
./temporal-server --env development-mysql-es --allow-no-auth start
|
|
|
|
start-postgres: start-postgres12
|
|
|
|
start-postgres12: temporal-server
|
|
./temporal-server --env development-postgres12 --allow-no-auth start
|
|
|
|
start-sqlite: temporal-server
|
|
./temporal-server --env development-sqlite --allow-no-auth start
|
|
|
|
start-xdc-cluster-a: temporal-server
|
|
./temporal-server --env development-cluster-a --allow-no-auth start
|
|
|
|
start-xdc-cluster-b: temporal-server
|
|
./temporal-server --env development-cluster-b --allow-no-auth start
|
|
|
|
start-xdc-cluster-c: temporal-server
|
|
./temporal-server --env development-cluster-c --allow-no-auth start
|
|
|
|
##### Grafana #####
|
|
update-dashboards:
|
|
@printf $(COLOR) "Update dashboards submodule from remote..."
|
|
git submodule update --force --init --remote develop/docker-compose/grafana/provisioning/temporalio-dashboards
|
|
|
|
##### Auxiliary #####
|
|
gomodtidy:
|
|
@printf $(COLOR) "go mod tidy..."
|
|
@go mod tidy
|
|
|
|
update-dependencies:
|
|
@printf $(COLOR) "Update dependencies..."
|
|
@go get -u -t $(PINNED_DEPENDENCIES) ./...
|
|
@go mod tidy
|
|
|
|
go-generate: $(MOCKGEN)
|
|
@printf $(COLOR) "Process go:generate directives..."
|
|
@go generate ./...
|
|
|
|
ensure-no-changes:
|
|
@printf $(COLOR) "Check for local changes..."
|
|
@printf $(COLOR) "========================================================================"
|
|
@git diff --name-status --exit-code || (printf $(COLOR) "========================================================================"; printf $(RED) "Above files are not regenerated properly. Regenerate them and try again."; exit 1)
|