Files
kserve/Makefile.tools.mk
2026-04-01 18:50:53 +05:30

96 lines
3.0 KiB
Makefile

LOCALBIN ?= $(shell pwd)/bin
$(LOCALBIN):
mkdir -p $(LOCALBIN)
PYTHON_VENV = $(LOCALBIN)/.venv
PYTHON_BIN = $(PYTHON_VENV)/bin
DEPS_ENV ?= kserve-deps.env
## Tool binary names.
GOLANGCI_LINT = $(LOCALBIN)/golangci-lint
CONTROLLER_GEN = $(LOCALBIN)/controller-gen
ENVTEST = $(LOCALBIN)/setup-envtest
KUSTOMIZE = $(LOCALBIN)/kustomize
YQ = $(LOCALBIN)/yq
HELM_DOCS = $(LOCALBIN)/helm-docs
PINACT = $(LOCALBIN)/pinact
UV = $(PYTHON_BIN)/uv
RUFF = $(PYTHON_BIN)/ruff
## Tool versions are defined in kserve-deps.env (included in main Makefile)
.PHONY: golangci-lint
golangci-lint: $(GOLANGCI_LINT)
$(GOLANGCI_LINT): $(LOCALBIN) $(DEPS_ENV)
$(call go-install-tool,$(GOLANGCI_LINT),github.com/golangci/golangci-lint/v2/cmd/golangci-lint,$(GOLANGCI_LINT_VERSION))
## Download controller-gen locally if necessary.
.PHONY: controller-gen
controller-gen: $(CONTROLLER_GEN)
$(CONTROLLER_GEN): $(LOCALBIN) $(DEPS_ENV)
$(call go-install-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/controller-gen,$(CONTROLLER_TOOLS_VERSION))
## Download envtest-setup locally if necessary.
.PHONY: envtest
envtest: $(ENVTEST)
$(ENVTEST): $(LOCALBIN) $(DEPS_ENV)
$(call go-install-tool,$(ENVTEST),sigs.k8s.io/controller-runtime/tools/setup-envtest,$(ENVTEST_VERSION))
## Download kustomize locally if necessary.
.PHONY: kustomize
kustomize: $(KUSTOMIZE)
$(KUSTOMIZE): $(LOCALBIN) $(DEPS_ENV)
@[ -f "$(KUSTOMIZE)-$(KUSTOMIZE_VERSION)" ] || { \
BIN_DIR=$(LOCALBIN) hack/setup/cli/install-kustomize.sh && \
mv $(LOCALBIN)/kustomize $(KUSTOMIZE)-$(KUSTOMIZE_VERSION) ; \
} ; \
ln -sf "$$(basename $(KUSTOMIZE)-$(KUSTOMIZE_VERSION))" "$(KUSTOMIZE)"
## Download yq locally if necessary.
.PHONY: yq
yq: $(YQ)
$(YQ): $(LOCALBIN) $(DEPS_ENV)
@[ -f "$(YQ)-$(YQ_VERSION)" ] || { \
BIN_DIR=$(LOCALBIN) hack/setup/cli/install-yq.sh && \
mv $(LOCALBIN)/yq $(YQ)-$(YQ_VERSION) ; \
} ; \
ln -sf "$$(basename $(YQ)-$(YQ_VERSION))" "$(YQ)"
## Download helm-docs locally if necessary.
.PHONY: helm-docs
helm-docs: $(HELM_DOCS)
$(HELM_DOCS): $(LOCALBIN) $(DEPS_ENV)
$(call go-install-tool,$(HELM_DOCS),github.com/norwoodj/helm-docs/cmd/helm-docs,$(HELM_DOCS_VERSION))
## Download pinact locally if necessary.
.PHONY: pinact
pinact: $(PINACT)
$(PINACT): $(LOCALBIN)
$(call go-install-tool,$(PINACT),github.com/suzuki-shunsuke/pinact/v3/cmd/pinact,$(PINACT_VERSION))
$(PYTHON_VENV): | $(LOCALBIN)
python3 -m venv $(PYTHON_VENV)
$(PYTHON_BIN)/pip install --upgrade pip
$(UV): $(PYTHON_VENV) $(DEPS_ENV)
$(PYTHON_BIN)/pip install uv==$(UV_VERSION)
$(RUFF): $(PYTHON_VENV) $(DEPS_ENV)
$(PYTHON_BIN)/pip install ruff==$(RUFF_VERSION)
# 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
# $2 - package url which can be installed
# $3 - specific version of package
define go-install-tool
@[ -f "$(1)-$(3)" ] || { \
set -e; \
package=$(2)@$(3) ;\
echo "Downloading $${package}" ;\
rm -f $(1) || true ;\
GOBIN=$(LOCALBIN) go install $${package} ;\
go mod tidy ;\
mv $(1) $(1)-$(3) ;\
} ;\
ln -sf $(1)-$(3) $(1)
endef