github.com/rohankumardubey/cilium@v1.6.12/Makefile (about) 1 include Makefile.defs 2 include daemon/bpf.sha 3 4 SUBDIRS_CILIUM_CONTAINER := proxylib envoy plugins/cilium-cni bpf cilium daemon cilium-health bugtool 5 ifdef LIBNETWORK_PLUGIN 6 SUBDIRS_CILIUM_CONTAINER += plugins/cilium-docker 7 endif 8 SUBDIRS := $(SUBDIRS_CILIUM_CONTAINER) operator plugins tools 9 GOFILES_EVAL := $(subst _$(ROOT_DIR)/,,$(shell $(CGO_DISABLED) $(GO) list ./... | grep -v -e /vendor/ -e /contrib/)) 10 GOFILES ?= $(GOFILES_EVAL) 11 TESTPKGS_EVAL := $(subst github.com/cilium/cilium/,,$(shell $(CGO_DISABLED) $(GO) list ./... | grep -v '/api/v1\|/vendor\|/contrib' | grep -v -P 'test(?!/helpers/logutils)')) 12 TESTPKGS ?= $(TESTPKGS_EVAL) 13 GOLANGVERSION := $(shell $(GO) version 2>/dev/null | grep -Eo '(go[0-9].[0-9])') 14 GOLANG_SRCFILES := $(shell for pkg in $(subst github.com/cilium/cilium/,,$(GOFILES)); do find $$pkg -name *.go -print; done | grep -v vendor | sort | uniq) 15 BPF_FILES_EVAL := $(shell git ls-files $(ROOT_DIR)/bpf/ | grep -v .gitignore | tr "\n" ' ') 16 BPF_FILES ?= $(BPF_FILES_EVAL) 17 BPF_SRCFILES := $(subst ../,,$(BPF_FILES)) 18 19 SWAGGER_VERSION := v0.19.0 20 SWAGGER := $(CONTAINER_ENGINE_FULL) run --rm -v $(CURDIR):$(CURDIR) -w $(CURDIR) -e GOPATH=$(GOPATH) --entrypoint swagger quay.io/goswagger/swagger:$(SWAGGER_VERSION) 21 22 COVERPKG_EVAL := $(shell if [ $$(echo "$(TESTPKGS)" | wc -w) -gt 1 ]; then echo "./..."; else echo "$(TESTPKGS)"; fi) 23 COVERPKG ?= $(COVERPKG_EVAL) 24 GOTEST_BASE := -test.v -timeout 360s 25 GOTEST_UNIT_BASE := $(GOTEST_BASE) -check.vv 26 GOTEST_PRIV_OPTS := $(GOTEST_UNIT_BASE) -tags=privileged_tests 27 GOTEST_COVER_OPTS := -coverprofile=coverage.out -covermode=count -coverpkg $(COVERPKG) 28 BENCH_EVAL := "." 29 BENCH ?= $(BENCH_EVAL) 30 BENCHFLAGS_EVAL := -bench=$(BENCH) -run=^$ -benchtime=10s 31 BENCHFLAGS ?= $(BENCHFLAGS_EVAL) 32 # Level of logs emitted to console during unit test runs 33 LOGLEVEL ?= "error" 34 35 JOB_BASE_NAME ?= cilium_test 36 37 UTC_DATE=$(shell date -u "+%Y-%m-%d") 38 39 # Since there's a bug with NFS or the kernel, the flock syscall hangs the documentation 40 # build in the developer VM. For this reason the documentation build is skipped if NFS 41 # is running in the developer VM. 42 SKIP_DOCS ?= $(shell if mount | grep -q "/home/vagrant/go/src/github.com/cilium/cilium type nfs"; then echo "true"; else echo "false"; fi) 43 44 TEST_LDFLAGS=-ldflags "-X github.com/cilium/cilium/pkg/kvstore.consulDummyAddress=https://consul:8443 \ 45 -X github.com/cilium/cilium/pkg/kvstore.etcdDummyAddress=http://etcd:4002 \ 46 -X github.com/cilium/cilium/pkg/testutils.CiliumRootDir=$(ROOT_DIR) \ 47 -X github.com/cilium/cilium/pkg/datapath.DatapathSHA=1234567890abcdef7890" 48 49 TEST_UNITTEST_LDFLAGS= -ldflags "-X github.com/cilium/cilium/pkg/kvstore.consulDummyConfigFile=/tmp/cilium-consul-certs/cilium-consul.yaml \ 50 -X github.com/cilium/cilium/pkg/testutils.CiliumRootDir=$(ROOT_DIR) \ 51 -X github.com/cilium/cilium/pkg/datapath.DatapathSHA=1234567890abcdef7890 \ 52 -X github.com/cilium/cilium/pkg/logging.DefaultLogLevelStr=$(LOGLEVEL)" 53 54 define generate_k8s_api 55 cd "./vendor/k8s.io/code-generator" && \ 56 GO111MODULE=off ./generate-groups.sh $(1) \ 57 github.com/cilium/cilium/pkg/k8s/client \ 58 $(2) \ 59 $(3) \ 60 --go-header-file "$(PWD)/hack/custom-boilerplate.go.txt" 61 endef 62 63 define generate_k8s_api_all 64 $(call generate_k8s_api,all,$(1),$(2)) 65 endef 66 67 define generate_k8s_api_deepcopy 68 $(call generate_k8s_api,deepcopy,$(1),$(2)) 69 endef 70 71 all: precheck build postcheck 72 @echo "Build finished." 73 74 build: $(SUBDIRS) 75 76 build-container: 77 for i in $(SUBDIRS_CILIUM_CONTAINER); do $(MAKE) -C $$i all; done 78 79 $(SUBDIRS): force 80 @ $(MAKE) -C $@ all 81 82 jenkins-precheck: 83 docker-compose -f test/docker-compose.yml -p $(JOB_BASE_NAME)-$$BUILD_NUMBER run --rm precheck 84 85 clean-jenkins-precheck: 86 docker-compose -f test/docker-compose.yml -p $(JOB_BASE_NAME)-$$BUILD_NUMBER rm 87 # remove the networks 88 docker-compose -f test/docker-compose.yml -p $(JOB_BASE_NAME)-$$BUILD_NUMBER down 89 90 PRIV_TEST_PKGS_EVAL := $(shell for pkg in $(TESTPKGS); do echo $(pkg); done | xargs grep --include='*.go' -ril '+build [^!]*privileged_tests' | xargs dirname | sort | uniq) 91 PRIV_TEST_PKGS ?= $(PRIV_TEST_PKGS_EVAL) 92 tests-privileged: 93 # cilium-map-migrate is a dependency of some unit tests. 94 $(MAKE) -C bpf cilium-map-migrate 95 $(QUIET)$(foreach pkg,$(PRIV_TEST_PKGS),\ 96 $(GO) test $(TEST_LDFLAGS) github.com/cilium/cilium/$(pkg) $(GOTEST_PRIV_OPTS) || exit 1;) 97 98 start-kvstores: 99 @echo Starting key-value store containers... 100 -$(CONTAINER_ENGINE_FULL) rm -f "cilium-etcd-test-container" 2> /dev/null 101 $(CONTAINER_ENGINE_FULL) run -d \ 102 --name "cilium-etcd-test-container" \ 103 -p 4002:4001 \ 104 quay.io/coreos/etcd:v3.2.17 \ 105 etcd -name etcd0 \ 106 -advertise-client-urls http://0.0.0.0:4001 \ 107 -listen-client-urls http://0.0.0.0:4001 \ 108 -listen-peer-urls http://0.0.0.0:2380 \ 109 -initial-cluster-token etcd-cluster-1 \ 110 -initial-cluster-state new 111 -$(CONTAINER_ENGINE_FULL) rm -f "cilium-consul-test-container" 2> /dev/null 112 rm -rf /tmp/cilium-consul-certs 113 mkdir /tmp/cilium-consul-certs 114 cp $(CURDIR)/test/consul/* /tmp/cilium-consul-certs 115 chmod -R a+rX /tmp/cilium-consul-certs 116 $(CONTAINER_ENGINE_FULL) run -d \ 117 --name "cilium-consul-test-container" \ 118 -p 8501:8443 \ 119 -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true, "disable_update_check": true}' \ 120 -v /tmp/cilium-consul-certs:/cilium-consul/ \ 121 consul:1.1.0 \ 122 agent -client=0.0.0.0 -server -bootstrap-expect 1 -config-file=/cilium-consul/consul-config.json 123 124 stop-kvstores: 125 $(CONTAINER_ENGINE_FULL) rm -f "cilium-etcd-test-container" 126 $(CONTAINER_ENGINE_FULL) rm -f "cilium-consul-test-container" 127 rm -rf /tmp/cilium-consul-certs 128 129 tests: force 130 $(MAKE) unit-tests 131 132 generate-cov: 133 # Remove generated code from coverage 134 $(QUIET) grep -Ev '(^github.com/cilium/cilium/api/v1)|(generated.deepcopy.go)|(^github.com/cilium/cilium/pkg/k8s/client/)' \ 135 coverage-all-tmp.out > coverage-all.out 136 $(QUIET)$(GO) tool cover -html=coverage-all.out -o=coverage-all.html 137 $(QUIET) rm coverage.out coverage-all-tmp.out 138 139 unit-tests: start-kvstores 140 $(QUIET) $(MAKE) -C test/bpf/ 141 test/bpf/unit-test 142 $(QUIET) $(MAKE) -C daemon/ check-bindata 143 $(MAKE) govet 144 $(QUIET) echo "mode: count" > coverage-all-tmp.out 145 $(QUIET) echo "mode: count" > coverage.out 146 $(QUIET)$(foreach pkg,$(patsubst %,github.com/cilium/cilium/%,$(TESTPKGS)),\ 147 $(GO) test $(TEST_UNITTEST_LDFLAGS) $(pkg) $(GOTEST_BASE) $(GOTEST_COVER_OPTS) || exit 1; \ 148 tail -n +2 coverage.out >> coverage-all-tmp.out;) 149 $(MAKE) generate-cov 150 @rmdir ./daemon/1 ./daemon/1_backup 2> /dev/null || true 151 $(MAKE) stop-kvstores 152 153 bench: start-kvstores 154 $(QUIET)$(foreach pkg,$(patsubst %,github.com/cilium/cilium/%,$(TESTPKGS)),\ 155 $(GO) test $(TEST_UNITTEST_LDFLAGS) $(GOTEST_BASE) $(BENCHFLAGS) \ 156 $(pkg) \ 157 || exit 1;) 158 $(MAKE) stop-kvstores 159 160 bench-privileged: 161 $(QUIET)$(foreach pkg,$(patsubst %,github.com/cilium/cilium/%,$(TESTPKGS)),\ 162 $(GO) test $(TEST_UNITTEST_LDFLAGS) $(GOTEST_BASE) $(BENCHFLAGS) \ 163 -tags=privileged_tests $(pkg) \ 164 || exit 1;) 165 166 clean-tags: 167 @$(ECHO_CLEAN) tags 168 @-rm -f cscope.out cscope.in.out cscope.po.out cscope.files tags 169 170 tags: $(GOLANG_SRCFILES) $(BPF_SRCFILES) cscope.files 171 ctags $(GOLANG_SRCFILES) $(BPF_SRCFILES) 172 @ echo $(GOLANG_SRCFILES) $(BPF_SRCFILES) | sed 's/ /\n/g' | sort > cscope.files 173 cscope -R -b -q 174 175 clean-container: 176 -for i in $(SUBDIRS); do $(MAKE) -C $$i clean; done 177 178 clean: clean-container 179 -$(MAKE) -C ./contrib/packaging/deb clean 180 -$(MAKE) -C ./contrib/packaging/rpm clean 181 -rm -f GIT_VERSION 182 183 install: 184 $(INSTALL) -m 0755 -d $(DESTDIR)$(BINDIR) 185 for i in $(SUBDIRS); do $(MAKE) -C $$i install; done 186 187 install-container: 188 $(INSTALL) -m 0755 -d $(DESTDIR)$(BINDIR) 189 for i in $(SUBDIRS_CILIUM_CONTAINER); do $(MAKE) -C $$i install; done 190 191 # Workaround for not having git in the build environment 192 GIT_VERSION: .git 193 echo "$(GIT_VERSION)" >GIT_VERSION 194 195 docker-image: clean docker-image-no-clean docker-operator-image 196 197 docker-image-no-clean: GIT_VERSION 198 $(CONTAINER_ENGINE_FULL) build \ 199 --build-arg LOCKDEBUG=${LOCKDEBUG} \ 200 --build-arg V=${V} \ 201 --build-arg LIBNETWORK_PLUGIN=${LIBNETWORK_PLUGIN} \ 202 -t "cilium/cilium:$(DOCKER_IMAGE_TAG)" . 203 $(QUIET)echo "Push like this when ready:" 204 $(QUIET)echo "${CONTAINER_ENGINE} push cilium/cilium:$(DOCKER_IMAGE_TAG)" 205 206 dev-docker-image: GIT_VERSION 207 $(CONTAINER_ENGINE_FULL) build \ 208 --build-arg LOCKDEBUG=${LOCKDEBUG} \ 209 --build-arg V=${V} \ 210 --build-arg LIBNETWORK_PLUGIN=${LIBNETWORK_PLUGIN} \ 211 -t "cilium/cilium-dev:$(DOCKER_IMAGE_TAG)" . 212 $(QUIET)echo "Push like this when ready:" 213 $(QUIET)echo "${CONTAINER_ENGINE} push cilium/cilium-dev:$(DOCKER_IMAGE_TAG)" 214 215 docker-operator-image: GIT_VERSION 216 $(CONTAINER_ENGINE_FULL) build --build-arg LOCKDEBUG=${LOCKDEBUG} -f cilium-operator.Dockerfile -t "cilium/operator:$(DOCKER_IMAGE_TAG)" . 217 $(QUIET)echo "Push like this when ready:" 218 $(QUIET)echo "docker push cilium/operator:$(DOCKER_IMAGE_TAG)" 219 220 docker-image-init: 221 $(QUIET)cd contrib/packaging/docker && ${CONTAINER_ENGINE} build -t "cilium/cilium-init:$(UTC_DATE)" -f Dockerfile.init . 222 223 docker-image-runtime: 224 cd contrib/packaging/docker && ${CONTAINER_ENGINE} build -t "cilium/cilium-runtime:$(UTC_DATE)" -f Dockerfile.runtime . 225 226 docker-image-builder: 227 ${CONTAINER_ENGINE_FULL} build -t "cilium/cilium-builder:$(UTC_DATE)" -f Dockerfile.builder . 228 229 build-deb: 230 $(MAKE) -C ./contrib/packaging/deb 231 232 build-rpm: 233 $(MAKE) -C ./contrib/packaging/rpm 234 235 runtime-tests: 236 $(MAKE) -C tests runtime-tests 237 238 k8s-tests: 239 $(MAKE) -C tests k8s-tests 240 241 generate-api: api/v1/openapi.yaml 242 @$(ECHO_GEN)api/v1/openapi.yaml 243 -$(SWAGGER) generate server -s server -a restapi \ 244 -t api/v1 -f api/v1/openapi.yaml --default-scheme=unix -C api/v1/cilium-server.yml 245 -$(SWAGGER) generate client -a restapi \ 246 -t api/v1 -f api/v1/openapi.yaml 247 248 generate-health-api: api/v1/health/openapi.yaml 249 @$(ECHO_GEN)api/v1/health/openapi.yaml 250 -$(SWAGGER) generate server -s server -a restapi \ 251 -t api/v1 -t api/v1/health/ -f api/v1/health/openapi.yaml --default-scheme=unix -C api/v1/cilium-server.yml 252 -$(SWAGGER) generate client -a restapi \ 253 -t api/v1 -t api/v1/health/ -f api/v1/health/openapi.yaml 254 255 generate-k8s-api: 256 $(call generate_k8s_api_all,github.com/cilium/cilium/pkg/k8s/apis,"cilium.io:v2") 257 $(call generate_k8s_api_deepcopy,github.com/cilium/cilium/pkg,"policy:api") 258 $(call generate_k8s_api_deepcopy,github.com/cilium/cilium,"pkg:node") 259 $(call generate_k8s_api_deepcopy,github.com/cilium/cilium,"pkg:service") 260 $(call generate_k8s_api_deepcopy,github.com/cilium/cilium/api,"v1:models") 261 $(call generate_k8s_api_deepcopy,github.com/cilium/cilium/pkg,"k8s:types") 262 $(call generate_k8s_api_deepcopy,github.com/cilium/cilium/pkg,"maps:policymap") 263 $(call generate_k8s_api_deepcopy,github.com/cilium/cilium/pkg,"maps:ipcache") 264 $(call generate_k8s_api_deepcopy,github.com/cilium/cilium/pkg,"maps:lxcmap") 265 $(call generate_k8s_api_deepcopy,github.com/cilium/cilium/pkg,"maps:tunnel") 266 $(call generate_k8s_api_deepcopy,github.com/cilium/cilium/pkg,"maps:encrypt") 267 $(call generate_k8s_api_deepcopy,github.com/cilium/cilium/pkg,"maps:metricsmap") 268 $(call generate_k8s_api_deepcopy,github.com/cilium/cilium/pkg,"maps:nat") 269 $(call generate_k8s_api_deepcopy,github.com/cilium/cilium/pkg,"maps:lbmap") 270 $(call generate_k8s_api_deepcopy,github.com/cilium/cilium/pkg,"maps:configmap") 271 $(call generate_k8s_api_deepcopy,github.com/cilium/cilium/pkg,"maps:eppolicymap") 272 $(call generate_k8s_api_deepcopy,github.com/cilium/cilium/pkg,"maps:sockmap") 273 $(call generate_k8s_api_deepcopy,github.com/cilium/cilium/pkg,"maps:ctmap") 274 $(call generate_k8s_api_deepcopy,github.com/cilium/cilium,"pkg:tuple") 275 $(call generate_k8s_api_deepcopy,github.com/cilium/cilium,"pkg:bpf") 276 277 vps: 278 VBoxManage list runningvms 279 280 reload: 281 sudo systemctl stop cilium cilium-docker 282 sudo $(MAKE) install 283 sudo systemctl start cilium cilium-docker 284 sleep 6 285 cilium status 286 287 release: 288 $(eval TAG_VERSION := $(shell git tag | grep v$(VERSION) > /dev/null; echo $$?)) 289 $(eval BRANCH := $(shell git rev-parse --abbrev-ref HEAD)) 290 $(info Checking if tag $(VERSION) is created '$(TAG_VERSION)' $(BRANCH)) 291 292 @if [ "$(TAG_VERSION)" -eq "0" ];then { echo Git tag v$(VERSION) is already created; exit 1; } fi 293 $(MAKE) -C ./contrib/packaging/deb release 294 git commit -m "Version $(VERSION)" 295 git tag v$(VERSION) 296 git archive --format tar $(BRANCH) | gzip > ../cilium_$(VERSION).orig.tar.gz 297 298 gofmt: 299 $(QUIET)for pkg in $(GOFILES); do $(GO) fmt $$pkg; done 300 301 govet: 302 @$(ECHO_CHECK) vetting all GOFILES... 303 $(QUIET)$(GO) vet \ 304 ./api/... \ 305 ./bugtool/... \ 306 ./cilium/... \ 307 ./cilium-health/... \ 308 ./common/... \ 309 ./daemon/... \ 310 ./operator/... \ 311 ./pkg/... \ 312 ./plugins/... \ 313 ./proxylib/... \ 314 ./test/. \ 315 ./test/config/... \ 316 ./test/ginkgo-ext/... \ 317 ./test/helpers/... \ 318 ./test/runtime/... \ 319 ./test/k8sT/... \ 320 ./tools/... 321 322 ineffassign: 323 @$(ECHO_CHECK) ineffassign 324 $(QUIET) ineffassign . 325 326 logging-subsys-field: 327 @$(ECHO_CHECK) contrib/scripts/check-logging-subsys-field.sh 328 $(QUIET) contrib/scripts/check-logging-subsys-field.sh 329 330 check-microk8s: 331 @$(ECHO_CHECK) microk8s is ready... 332 $(QUIET)microk8s.status >/dev/null \ 333 || (echo "Error: Microk8s is not running" && exit 1) 334 $(QUIET)microk8s.status --yaml | grep -q "registry.*enabled" \ 335 || (echo "Error: Microk8s registry must be enabled" && exit 1) 336 337 LOCAL_IMAGE_TAG=local 338 LOCAL_IMAGE=localhost:32000/cilium/cilium:$(LOCAL_IMAGE_TAG) 339 microk8s: check-microk8s 340 $(QUIET)$(MAKE) dev-docker-image DOCKER_IMAGE_TAG=$(LOCAL_IMAGE_TAG) 341 @echo " DPLOY image to microk8s ($(LOCAL_IMAGE))" 342 $(CONTAINER_ENGINE_FULL) tag cilium/cilium-dev:$(LOCAL_IMAGE_TAG) $(LOCAL_IMAGE) 343 $(CONTAINER_ENGINE_FULL) push $(LOCAL_IMAGE) 344 $(QUIET)kubectl apply -f contrib/k8s/microk8s-prepull.yaml 345 $(QUIET)kubectl -n kube-system delete pod -l name=prepull 346 $(QUIET)kubectl -n kube-system rollout status ds/prepull 347 @echo 348 @echo "Update image tag like this when ready:" 349 @echo " kubectl -n kube-system set image ds/cilium cilium-agent=$(LOCAL_IMAGE)" 350 @echo "Or, redeploy the Cilium pods:" 351 @echo " kubectl -n kube-system delete pod -l k8s-app=cilium" 352 353 precheck: ineffassign logging-subsys-field 354 @$(ECHO_CHECK) contrib/scripts/check-fmt.sh 355 $(QUIET) contrib/scripts/check-fmt.sh 356 @$(ECHO_CHECK) contrib/scripts/check-log-newlines.sh 357 $(QUIET) contrib/scripts/check-log-newlines.sh 358 @$(ECHO_CHECK) contrib/scripts/check-missing-tags-in-tests.sh 359 $(QUIET) contrib/scripts/check-missing-tags-in-tests.sh 360 @$(ECHO_CHECK) contrib/scripts/check-assert-deep-equals.sh 361 $(QUIET) contrib/scripts/check-assert-deep-equals.sh 362 $(QUIET) $(MAKE) -C bpf build_all 363 364 pprof-help: 365 @echo "Available pprof targets:" 366 @echo " pprof-heap" 367 @echo " pprof-profile" 368 @echo " pprof-block" 369 @echo " pprof-trace-5s" 370 @echo " pprof-mutex" 371 372 pprof-heap: 373 $(QUIET)$(GO) tool pprof http://localhost:6060/debug/pprof/heap 374 375 pprof-profile: 376 $(QUIET)$(GO) tool pprof http://localhost:6060/debug/pprof/profile 377 378 379 pprof-block: 380 $(QUIET)$(GO) tool pprof http://localhost:6060/debug/pprof/block 381 382 pprof-trace-5s: 383 curl http://localhost:6060/debug/pprof/trace?seconds=5 384 385 pprof-mutex: 386 $(QUIET)$(GO) tool pprof http://localhost:6060/debug/pprof/mutex 387 388 update-authors: 389 @echo "Updating AUTHORS file..." 390 @echo "The following people, in alphabetical order, have either authored or signed" > AUTHORS 391 @echo "off on commits in the Cilium repository:" >> AUTHORS 392 @echo "" >> AUTHORS 393 @contrib/scripts/extract_authors.sh >> AUTHORS 394 @cat .authors.aux >> AUTHORS 395 396 docs-container: 397 $(QUIET)cp -r ./api ./Documentation/_api 398 $(CONTAINER_ENGINE_FULL) image build -t cilium/docs-builder -f Documentation/Dockerfile ./Documentation; \ 399 (ret=$$?; rm -r ./Documentation/_api && exit $$ret) 400 401 DOCS_PORT=9081 402 render-docs: test-docs 403 $(CONTAINER_ENGINE_FULL) container run --rm -dit --name docs-cilium -p $(DOCS_PORT):80 -v $$(pwd)/Documentation/_build/html/:/usr/local/apache2/htdocs/ httpd:2.4 404 @echo "$$(tput setaf 2)Running at http://localhost:$(DOCS_PORT)$$(tput sgr0)" 405 406 test-docs: docs-container 407 -$(CONTAINER_ENGINE_FULL) container rm -f docs-cilium >/dev/null 2>&1 || true 408 $(CONTAINER_ENGINE_FULL) container run --rm -v $$(pwd):/srv/ cilium/docs-builder /bin/bash -c 'make html' 409 410 manpages: 411 -rm -r man 412 mkdir -p man 413 cilium cmdman -d man 414 415 install-manpages: 416 cp man/* /usr/local/share/man/man1/ 417 mandb 418 419 # Strip "tabs assets" errors from the dummy target, but fail on target failure. 420 check-docs: 421 $(QUIET)($(MAKE) -C Documentation/ dummy SPHINXOPTS="$(SPHINXOPTS)" 2>&1 && touch $@.ok) \ 422 | grep -v "tabs assets" 423 @rm $@.ok 2>/dev/null 424 425 postcheck: build 426 @$(ECHO_CHECK) contrib/scripts/check-cmdref.sh 427 $(QUIET) MAKE=$(MAKE) contrib/scripts/check-cmdref.sh 428 @$(ECHO_CHECK) contrib/scripts/lock-check.sh 429 $(QUIET) contrib/scripts/lock-check.sh 430 @$(SKIP_DOCS) || $(MAKE) check-docs 431 432 minikube: 433 $(QUIET) contrib/scripts/minikube.sh 434 435 .PHONY: force generate-api generate-health-api install 436 force :;