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