github.com/kubeshop/testkube@v1.17.23/Makefile (about)

     1  .PHONY: test cover
     2  
     3  CHART_NAME=api-server
     4  BIN_DIR ?= $(HOME)/bin
     5  USER ?= $(USER)
     6  NAMESPACE ?= "testkube"
     7  DATE ?= $(shell date '+%s')
     8  COMMIT ?= $(shell git log -1 --pretty=format:"%h")
     9  VERSION ?= 999.0.0-$(shell git log -1 --pretty=format:"%h")
    10  DEBUG ?= ${DEBUG:-0}
    11  DASHBOARD_URI ?= ${DASHBOARD_URI:-"https://demo.testkube.io"}
    12  ANALYTICS_TRACKING_ID = ${ANALYTICS_TRACKING_ID:-""}
    13  ANALYTICS_API_KEY = ${ANALYTICS_API_KEY:-""}
    14  PROTOC := ${BIN_DIR}/protoc/bin/protoc
    15  PROTOC_GEN_GO := ${BIN_DIR}/protoc-gen-go
    16  PROTOC_GEN_GO_GRPC := ${BIN_DIR}/protoc-gen-go-grpc
    17  LD_FLAGS += -X github.com/kubeshop/testkube/internal/app/api/v1.SlackBotClientID=$(SLACK_BOT_CLIENT_ID)
    18  LD_FLAGS += -X github.com/kubeshop/testkube/internal/app/api/v1.SlackBotClientSecret=$(SLACK_BOT_CLIENT_SECRET)
    19  LD_FLAGS += -X github.com/kubeshop/testkube/pkg/telemetry.TestkubeMeasurementID=$(ANALYTICS_TRACKING_ID)
    20  LD_FLAGS += -X github.com/kubeshop/testkube/pkg/telemetry.TestkubeMeasurementSecret=$(ANALYTICS_API_KEY)
    21  LD_FLAGS += -X github.com/kubeshop/testkube/pkg/tcl/testworkflowstcl/testworkflowprocessor/constants.DefaultImage=$(BUSYBOX_IMAGE)
    22  LD_FLAGS += -X github.com/kubeshop/testkube/internal/pkg/api.Version=$(VERSION)
    23  LD_FLAGS += -X github.com/kubeshop/testkube/internal/pkg/api.Commit=$(COMMIT)
    24  
    25  define setup_env
    26  	$(eval include .env)
    27  	$(eval export)
    28  endef
    29  
    30  use-env-file:
    31  	$(call setup_env)
    32  
    33  .PHONY: refresh-config
    34  refresh-config:
    35  	wget "https://raw.githubusercontent.com/kubeshop/helm-charts/develop/charts/testkube-api/executors.json" -O config/executors.json &
    36  	wget "https://raw.githubusercontent.com/kubeshop/helm-charts/develop/charts/testkube-api/job-container-template.yml" -O config/job-container-template.yml &
    37  	wget "https://raw.githubusercontent.com/kubeshop/helm-charts/develop/charts/testkube-api/job-scraper-template.yml" -O config/job-scraper-template.yml &
    38  	wget "https://raw.githubusercontent.com/kubeshop/helm-charts/develop/charts/testkube-api/job-template.yml" -O config/job-template.yml &
    39  	wget "https://raw.githubusercontent.com/kubeshop/helm-charts/develop/charts/testkube-api/pvc-template.yml" -O config/pvc-template.yml &
    40  	wget "https://raw.githubusercontent.com/kubeshop/helm-charts/develop/charts/testkube-api/slack-config.json" -O config/slack-config.json &
    41  	wget "https://raw.githubusercontent.com/kubeshop/helm-charts/develop/charts/testkube-api/slack-template.json" -O config/slack-template.json
    42  
    43  
    44  generate-protobuf: use-env-file 
    45  	protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative pkg/logs/pb/logs.proto
    46  
    47  just-run-api: use-env-file 
    48  	TESTKUBE_DASHBOARD_URI=$(DASHBOARD_URI) APISERVER_CONFIG=testkube-api-server-config-testkube TESTKUBE_ANALYTICS_ENABLED=$(TESTKUBE_ANALYTICS_ENABLED) TESTKUBE_NAMESPACE=$(NAMESPACE) SCRAPPERENABLED=true STORAGE_SSL=true DEBUG=$(DEBUG) APISERVER_PORT=8088 go run  -ldflags='$(LD_FLAGS)' cmd/api-server/main.go
    49  
    50  run-api: use-env-file refresh-config
    51  	TESTKUBE_DASHBOARD_URI=$(DASHBOARD_URI) APISERVER_CONFIG=testkube-api-server-config-testkube TESTKUBE_ANALYTICS_ENABLED=$(TESTKUBE_ANALYTICS_ENABLED) TESTKUBE_NAMESPACE=$(NAMESPACE) SCRAPPERENABLED=true STORAGE_SSL=true DEBUG=$(DEBUG) APISERVER_PORT=8088 go run  -ldflags='$(LD_FLAGS)' cmd/api-server/main.go
    52  
    53  run-api-race-detector: use-env-file refresh-config
    54  	TESTKUBE_DASHBOARD_URI=$(DASHBOARD_URI) APISERVER_CONFIG=testkube-api-server-config-testkube TESTKUBE_NAMESPACE=$(NAMESPACE) DEBUG=1 APISERVER_PORT=8088 go run -race -ldflags='$(LD_FLAGS)'  cmd/api-server/main.go
    55  
    56  run-api-telepresence: use-env-file refresh-config
    57  	TESTKUBE_DASHBOARD_URI=$(DASHBOARD_URI) APISERVER_CONFIG=testkube-api-server-config-testkube TESTKUBE_NAMESPACE=$(NAMESPACE) DEBUG=1 API_MONGO_DSN=mongodb://testkube-mongodb:27017 APISERVER_PORT=8088 go run cmd/api-server/main.go
    58  
    59  run-mongo-dev:
    60  	docker run --name mongodb -p 27017:27017 --rm mongo
    61  
    62  build: build-api-server build-testkube-bin
    63  
    64  build-api-server:
    65  	go build -o $(BIN_DIR)/api-server -ldflags='$(LD_FLAGS)' cmd/api-server/main.go
    66  
    67  build-testkube-bin:
    68  	go build \
    69  		-ldflags="-s -w -X main.version=999.0.0-$(COMMIT) \
    70  			-X main.commit=$(COMMIT) \
    71  			-X main.date=$(DATE) \
    72  			-X main.builtBy=$(USER) \
    73  			-X github.com/kubeshop/testkube/internal/app/api/v1.SlackBotClientID=$(SLACK_BOT_CLIENT_ID) \
    74  			-X github.com/kubeshop/testkube/internal/app/api/v1.SlackBotClientSecret=$(SLACK_BOT_CLIENT_SECRET) \
    75  			-X github.com/kubeshop/testkube/pkg/telemetry.TestkubeMeasurementID=$(ANALYTICS_TRACKING_ID)  \
    76  			-X github.com/kubeshop/testkube/pkg/telemetry.TestkubeMeasurementSecret=$(ANALYTICS_API_KEY) \
    77  			-X github.com/kubeshop/testkube/pkg/tcl/testworkflowstcl/testworkflowprocessor/constants.DefaultImage=$(BUSYBOX_IMAGE)" \
    78  		-o "$(BIN_DIR)/kubectl-testkube" \
    79  		cmd/kubectl-testkube/main.go
    80  
    81  build-testkube-bin-intel:
    82  	env GOARCH=amd64 \
    83  	go build \
    84  		-ldflags="-s -w -X main.version=999.0.0-$(COMMIT) \
    85  			-X main.commit=$(COMMIT) \
    86  			-X main.date=$(DATE) \
    87  			-X main.builtBy=$(USER) \
    88  			-X github.com/kubeshop/testkube/internal/app/api/v1.SlackBotClientID=$(SLACK_BOT_CLIENT_ID) \
    89  			-X github.com/kubeshop/testkube/internal/app/api/v1.SlackBotClientSecret=$(SLACK_BOT_CLIENT_SECRET) \
    90  			-X github.com/kubeshop/testkube/pkg/telemetry.TestkubeMeasurementID=$(ANALYTICS_TRACKING_ID)  \
    91  			-X github.com/kubeshop/testkube/pkg/telemetry.TestkubeMeasurementSecret=$(ANALYTICS_API_KEY) \
    92  			-X github.com/kubeshop/testkube/pkg/tcl/testworkflowstcl/testworkflowprocessor/constants.DefaultImage=$(BUSYBOX_IMAGE)" \
    93  		-o "$(BIN_DIR)/kubectl-testkube" \
    94  		cmd/kubectl-testkube/main.go
    95  
    96  docker-build-api:
    97  	env SLACK_BOT_CLIENT_ID=** SLACK_BOT_CLIENT_SECRET=** ANALYTICS_TRACKING_ID=** ANALYTICS_API_KEY=** SEGMENTIO_KEY=** CLOUD_SEGMENTIO_KEY=** DOCKER_BUILDX_CACHE_FROM=type=registry,ref=docker.io/kubeshop/testkube-api-server:latest ALPINE_IMAGE=alpine:3.18.0 goreleaser release -f goreleaser_files/.goreleaser-docker-build-api.yml --rm-dist --snapshot
    98  
    99  docker-build-cli:
   100  	env SLACK_BOT_CLIENT_ID=** SLACK_BOT_CLIENT_SECRET=** ANALYTICS_TRACKING_ID=** ANALYTICS_API_KEY=** SEGMENTIO_KEY=** CLOUD_SEGMENTIO_KEY=** DOCKER_BUILDX_CACHE_FROM=type=registry,ref=docker.io/kubeshop/testkube-cli:latest ALPINE_IMAGE=alpine:3.18.0 goreleaser release -f .builds-linux.goreleaser.yml --rm-dist --snapshot
   101  
   102  #make docker-build-executor EXECUTOR=zap GITHUB_TOKEN=*** DOCKER_BUILDX_CACHE_FROM=type=registry,ref=docker.io/kubeshop/testkube-zap-executor:latest
   103  #add ALPINE_IMAGE=alpine:3.18.0 env var for building of curl and scraper executor
   104  docker-build-executor:
   105  	goreleaser release -f goreleaser_files/.goreleaser-docker-build-executor.yml --clean --snapshot
   106  
   107  dev-install-local-executors:
   108  	kubectl apply --namespace testkube -f https://raw.githubusercontent.com/kubeshop/testkube-operator/main/config/samples/executor_v1_executor.yaml
   109  
   110  install-swagger-codegen-mac:
   111  	brew install swagger-codegen
   112  
   113  openapi-generate-model: openapi-generate-model-testkube
   114  
   115  openapi-generate-model-testkube:
   116  	swagger-codegen generate --model-package testkube -i api/v1/testkube.yaml -l go -o tmp/api/testkube
   117  	mv tmp/api/testkube/model_test.go tmp/api/testkube/model_test_base.go || true
   118  	mv tmp/api/testkube/model_test_suite_step_execute_test.go tmp/api/testkube/model_test_suite_step_execute_test_base.go || true
   119  	mv tmp/api/testkube/model_*.go pkg/api/v1/testkube/
   120  	rm -rf tmp
   121  	find ./pkg/api/v1/testkube -type f -exec sed -i '' -e "s/package swagger/package testkube/g" {} \;
   122  	find ./pkg/api/v1/testkube -type f -exec sed -i '' -e "s/\*map\[string\]/map[string]/g" {} \;
   123  	find ./pkg/api/v1/testkube -name "*.go" -type f -exec sed -i '' -e "s/ map\[string\]Object / map\[string\]interface\{\} /g" {} \; # support map with empty additional properties
   124  	find ./pkg/api/v1/testkube -name "*update*.go" -type f -exec sed -i '' -e "s/ map/ \*map/g" {} \;
   125  	find ./pkg/api/v1/testkube -name "*update*.go" -type f -exec sed -i '' -e "s/ string/ \*string/g" {} \;
   126  	find ./pkg/api/v1/testkube -name "*update*.go" -type f -exec sed -i '' -e "s/ \[\]/ \*\[\]/g" {} \;
   127  	find ./pkg/api/v1/testkube -name "*update*.go" -type f -exec sed -i '' -e "s/ \*TestContent/ \*\*TestContentUpdate/g" {} \;
   128  	find ./pkg/api/v1/testkube -name "*update*.go" -type f -exec sed -i '' -e "s/ \*ExecutionRequest/ \*\*ExecutionUpdateRequest/g" {} \;
   129  	find ./pkg/api/v1/testkube -name "*update*.go" -type f -exec sed -i '' -e "s/ \*Repository/ \*\*RepositoryUpdate/g" {} \;
   130  	find ./pkg/api/v1/testkube -name "*update*.go" -type f -exec sed -i '' -e "s/ \*SecretRef/ \*\*SecretRef/g" {} \;
   131  	find ./pkg/api/v1/testkube -name "*update*.go" -type f -exec sed -i '' -e "s/ int32/ \*int32/g" {} \;
   132  	find ./pkg/api/v1/testkube -name "*update*.go" -type f -exec sed -i '' -e "s/ int64/ \*int64/g" {} \;
   133  	find ./pkg/api/v1/testkube -name "*update*.go" -type f -exec sed -i '' -e "s/ bool/ \*bool/g" {} \;
   134  	find ./pkg/api/v1/testkube -name "*update*.go" -type f -exec sed -i '' -e "s/ \*ArtifactRequest/ \*\*ArtifactUpdateRequest/g" {} \;
   135  	find ./pkg/api/v1/testkube -name "*update*.go" -type f -exec sed -i '' -e "s/ \*TestSuiteExecutionRequest/ \*\*TestSuiteExecutionUpdateRequest/g" {} \;
   136  	find ./pkg/api/v1/testkube -name "*update*.go" -type f -exec sed -i '' -e "s/ \*ExecutorMeta/ \*\*ExecutorMetaUpdate/g" {} \;
   137  	find ./pkg/api/v1/testkube -name "*update*.go" -type f -exec sed -i '' -e "s/ \*PodRequest/ \*\*PodUpdateRequest/g" {} \;
   138  	find ./pkg/api/v1/testkube -name "*update*.go" -type f -exec sed -i '' -e "s/ \*PodResourcesRequest/ \*\*PodResourcesUpdateRequest/g" {} \;
   139  	find ./pkg/api/v1/testkube -name "*update*.go" -type f -exec sed -i '' -e "s/ \*ResourceRequest/ \*ResourceUpdateRequest/g" {} \;	
   140  	find ./pkg/api/v1/testkube -type f -exec sed -i '' -e "s/ Deprecated/ \\n\/\/ Deprecated/g" {} \;
   141  	go fmt pkg/api/v1/testkube/*.go
   142  
   143  protobuf-generate:
   144  	$(PROTOC) \
   145      --go_out=. --go-grpc_out=. proto/service.proto
   146  
   147  install-protobuf: $(PROTOC) $(PROTOC_GEN_GO) $(PROTOC_GEN_GO_GRPC)
   148  # Protoc and friends installation and generation
   149  $(PROTOC):
   150  	$(call install-protoc)
   151  
   152  $(PROTOC_GEN_GO):
   153  	@echo "[INFO]: Installing protobuf go generation plugin."
   154  	GOBIN=${BIN_DIR} go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28
   155  
   156  $(PROTOC_GEN_GO_GRPC):
   157  	@echo "[INFO]: Installing protobuf GRPC go generation plugin."
   158  	GOBIN=${BIN_DIR} go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2
   159  
   160  .PHONY: unit-tests
   161  unit-tests:
   162  	gotestsum --format pkgname -- -cover ./...
   163  
   164  .PHONY: integration-tests
   165  integration-tests:
   166  	INTEGRATION="true" gotestsum --format pkgname -- -tags=integration -cover ./...
   167  
   168  test-e2e:
   169  	go test --tags=e2e -v ./test/e2e
   170  
   171  test-e2e-namespace:
   172  	NAMESPACE=$(NAMESPACE) go test --tags=e2e -v  ./test/e2e
   173  
   174  create-examples:
   175  	test/create.sh
   176  
   177  execute-testkube-cli-test-suite:
   178  	test/run.sh
   179  
   180  test-reload-sanity-test:
   181  	kubectl delete secrets sanity-secrets -ntestkube
   182  	kubectl delete test sanity -ntestkube || true
   183  	kubectl testkube create test -f test/postman/Testkube-Sanity.postman_collection.json --name sanity
   184  
   185  
   186  # test local api server intance - need local-postman/collection type registered to local postman executor
   187  test-api-local:
   188  	newman run test/postman/Testkube-Sanity.postman_collection.json --env-var test_name=fill-me --env-var test_type=postman/collection  --env-var api_uri=http://localhost:8088 --env-var test_api_uri=http://localhost:8088 --env-var execution_name=fill --verbose
   189  
   190  # run by newman but on top of port-forwarded cluster service to api-server
   191  # e.g. kubectl port-forward svc/testkube-api-server 8088
   192  test-api-port-forwarded:
   193  	newman run test/postman/Testkube-Sanity.postman_collection.json --env-var test_name=fill-me --env-var test_type=postman/collection  --env-var api_uri=http://localhost:8088 --env-var execution_name=fill --env-var test_api_uri=http://testkube-api-server:8088 --verbose
   194  
   195  # run test by testkube plugin
   196  test-api-on-cluster:
   197  	kubectl testkube run test sanity -f -p api_uri=http://testkube-api-server:8088 -p test_api_uri=http://testkube-api-server:8088 -p test_type=postman/collection -p test_name=fill-me -p execution_name=fill-me
   198  
   199  cover:
   200  	@go test -failfast -count=1 -v -tags test  -coverprofile=./testCoverage.txt ./... && go tool cover -html=./testCoverage.txt -o testCoverage.html && rm ./testCoverage.txt
   201  	open testCoverage.html
   202  
   203  version-bump: version-bump-patch
   204  
   205  version-bump-patch:
   206  	go run cmd/tools/main.go bump -k patch
   207  
   208  version-bump-minor:
   209  	go run cmd/tools/main.go bump -k minor
   210  
   211  version-bump-major:
   212  	go run cmd/tools/main.go bump -k major
   213  
   214  version-bump-dev:
   215  	go run cmd/tools/main.go bump --dev
   216  
   217  commands-reference:
   218  	go run cmd/kubectl-testkube/main.go generate doc
   219  
   220  .PHONY: docs
   221  docs: commands-reference
   222  
   223  prerelease:
   224  	go run cmd/tools/main.go release -d -a $(CHART_NAME)
   225  
   226  release:
   227  	go run cmd/tools/main.go release -a $(CHART_NAME)
   228  
   229  video:
   230  	gource \
   231  		-s .5 \
   232  		-1280x720 \
   233  		--auto-skip-seconds .1 \
   234  		--multi-sampling \
   235  		--stop-at-end \
   236  		--key \
   237  		--highlight-users \
   238  		--date-format "%d/%m/%y" \
   239  		--hide mouse,filenames \
   240  		--file-idle-time 0 \
   241  		--max-files 0  \
   242  		--background-colour 000000 \
   243  		--font-size 25 \
   244  		--output-ppm-stream stream.out \
   245  		--output-framerate 30
   246  
   247  	ffmpeg -y -r 30 -f image2pipe -vcodec ppm -i stream.out -b 65536K movie.mp4
   248  
   249  port-forward-minio:
   250  	kubectl port-forward svc/testkube-minio-service-testkube 9090:9090 -ntestkube
   251  
   252  port-forward-mongo:
   253  	kubectl port-forward svc/testkube-mongodb 27017 -ntestkube
   254  
   255  port-forward-api:
   256  	kubectl port-forward svc/testkube-api-server 8088 -ntestkube
   257  
   258  run-proxy:
   259  	go run cmd/proxy/main.go --namespace $(NAMESPACE)
   260  
   261  define install-protoc
   262  @[ -f "${PROTOC}" ] || { \
   263  set -e ;\
   264  echo "[INFO] Installing protoc compiler to ${BIN_DIR}/protoc" ;\
   265  mkdir -pv "${BIN_DIR}/" ;\
   266  TMP_DIR=$$(mktemp -d) ;\
   267  cd $$TMP_DIR ;\
   268  PB_REL="https://github.com/protocolbuffers/protobuf/releases" ;\
   269  VERSION=3.19.4 ;\
   270  if [ "$$(uname)" == "Darwin" ];then FILENAME=protoc-$${VERSION}-osx-x86_64.zip ;fi ;\
   271  if [ "$$(uname)" == "Linux" ];then FILENAME=protoc-$${VERSION}-linux-x86_64.zip;fi ;\
   272  echo "Downloading $${FILENAME} to $${TMP_DIR}" ;\
   273  curl -LO $${PB_REL}/download/v$${VERSION}/$${FILENAME} ; unzip $${FILENAME} -d ${BIN_DIR}/protoc ; \
   274  rm -rf $${TMP_DIR} ;\
   275  }
   276  endef