Skip to content

Commit 271d886

Browse files
authored
Merge pull request #1813 from estroz/chore/improve-tool-downloads
⚠️ (go/v3-alpha) Makefile: install kustomize and controller-gen locally
2 parents c158f4f + f4d30ae commit 271d886

File tree

7 files changed

+93
-129
lines changed

7 files changed

+93
-129
lines changed

Makefile

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
# Makefile with some common workflow for dev, build and test
1919
#
2020
export GOPROXY?=https://proxy.golang.org/
21-
CONTROLLER_GEN_BIN_PATH := $(shell which controller-gen)
2221

2322
# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
2423
ifeq (,$(shell go env GOBIN))
@@ -46,7 +45,7 @@ build: ## Build the project locally
4645
.PHONY: install
4746
install: ## Build and install the binary with the current source code. Use it to test your changes locally.
4847
make build
49-
cp ./bin/kubebuilder $(shell go env GOPATH)/bin/kubebuilder
48+
cp ./bin/kubebuilder $(GOBIN)/kubebuilder
5049

5150
##@ Development
5251

@@ -60,22 +59,19 @@ generate-testdata: ## Update/generate the testdata in $GOPATH/src/sigs.k8s.io/ku
6059
./generate_testdata.sh
6160

6261
.PHONY: lint
63-
lint: golangci-lint ## Run golangci lint checks
64-
@$(GOLANGCI_LINT) run
62+
lint: golangci-lint ## Run golangci-lint linter
63+
$(GOLANGCI_LINT) run
6564

66-
lint-fix: golangci-lint ## Run golangci lint to automatically perform fixes
67-
@$(GOLANGCI_LINT) run --fix
65+
.PHONY: lint-fix
66+
lint-fix: golangci-lint ## Run golangci-lint linter and perform fixes
67+
$(GOLANGCI_LINT) run --fix
6868

69+
GOLANGCI_LINT = $(shell pwd)/bin/golangci-lint
6970
golangci-lint:
70-
ifeq (, $(shell which golangci-lint))
71-
@{ \
71+
@[ -f $(GOLANGCI_LINT) ] || { \
7272
set -e ;\
73-
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(shell go env GOPATH)/bin v1.29.0 ;\
73+
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(shell dirname $(GOLANGCI_LINT)) v1.29.0 ;\
7474
}
75-
GOLANGCI_LINT=$(shell go env GOPATH)/bin/golangci-lint
76-
else
77-
GOLANGCI_LINT=$(shell which golangci-lint)
78-
endif
7975

8076
##@ Tests
8177

generate_testdata.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ scaffold_test_project() {
3939
local plugin_flag="${plugin:+--plugins $plugin}"
4040

4141
# Remove tool binaries so the correct versions are used for each plugin version.
42-
rm -f "$(which controller-gen)"
43-
rm -f "$(which kustomize)"
42+
rm -f "$(command -v controller-gen)"
43+
rm -f "$(command -v kustomize)"
4444

4545
if [ $version == "2" ] || [ $version == "3-alpha" ]; then
4646
if [ $version == "2" ] && [ -n "$plugin_flag" ]; then

pkg/plugin/v3/scaffolds/internal/templates/makefile.go

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -127,35 +127,27 @@ docker-build: test
127127
docker-push:
128128
docker push ${IMG}
129129
130-
# find or download controller-gen
131-
# download controller-gen if necessary
130+
# Download controller-gen locally if necessary
131+
CONTROLLER_GEN = $(shell pwd)/bin/controller-gen
132132
controller-gen:
133-
ifeq (, $(shell which controller-gen))
134-
@{ \
135-
set -e ;\
136-
CONTROLLER_GEN_TMP_DIR=$$(mktemp -d) ;\
137-
cd $$CONTROLLER_GEN_TMP_DIR ;\
138-
go mod init tmp ;\
139-
go get sigs.k8s.io/controller-tools/cmd/controller-gen@{{ .ControllerToolsVersion }} ;\
140-
rm -rf $$CONTROLLER_GEN_TMP_DIR ;\
141-
}
142-
CONTROLLER_GEN=$(GOBIN)/controller-gen
143-
else
144-
CONTROLLER_GEN=$(shell which controller-gen)
145-
endif
133+
$(call go-get-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/controller-gen@{{ .ControllerToolsVersion }})
146134
135+
# Download kustomize locally if necessary
136+
KUSTOMIZE = $(shell pwd)/bin/kustomize
147137
kustomize:
148-
ifeq (, $(shell which kustomize))
149-
@{ \
150-
set -e ;\
151-
KUSTOMIZE_GEN_TMP_DIR=$$(mktemp -d) ;\
152-
cd $$KUSTOMIZE_GEN_TMP_DIR ;\
153-
go mod init tmp ;\
154-
go get sigs.k8s.io/kustomize/kustomize/v3@{{ .KustomizeVersion }} ;\
155-
rm -rf $$KUSTOMIZE_GEN_TMP_DIR ;\
156-
}
157-
KUSTOMIZE=$(GOBIN)/kustomize
158-
else
159-
KUSTOMIZE=$(shell which kustomize)
160-
endif
138+
$(call go-get-tool,$(KUSTOMIZE),sigs.k8s.io/kustomize/kustomize/v3@{{ .KustomizeVersion }})
139+
140+
# go-get-tool will 'go get' any package $2 and install it to $1.
141+
PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST))))
142+
define go-get-tool
143+
@[ -f $(1) ] || { \
144+
set -e ;\
145+
TMP_DIR=$$(mktemp -d) ;\
146+
cd $$TMP_DIR ;\
147+
go mod init tmp ;\
148+
echo "Downloading $(2)" ;\
149+
GOBIN=$(PROJECT_DIR)/bin go get $(2) ;\
150+
rm -rf $$TMP_DIR ;\
151+
}
152+
endef
161153
`

test.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ EOF
9292
function test_project {
9393
local project_dir=$1
9494
local version=$2
95-
rm -f "$(which controller-gen)"
96-
rm -f "$(which kustomize)"
95+
rm -f "$(command -v controller-gen)"
96+
rm -f "$(command -v kustomize)"
9797
header_text "performing tests in dir $project_dir for project version v$version"
9898
cd testdata/$project_dir
9999
make all test

testdata/project-v3-addon/Makefile

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -69,34 +69,26 @@ docker-build: test
6969
docker-push:
7070
docker push ${IMG}
7171

72-
# find or download controller-gen
73-
# download controller-gen if necessary
72+
# Download controller-gen locally if necessary
73+
CONTROLLER_GEN = $(shell pwd)/bin/controller-gen
7474
controller-gen:
75-
ifeq (, $(shell which controller-gen))
76-
@{ \
77-
set -e ;\
78-
CONTROLLER_GEN_TMP_DIR=$$(mktemp -d) ;\
79-
cd $$CONTROLLER_GEN_TMP_DIR ;\
80-
go mod init tmp ;\
81-
go get sigs.k8s.io/controller-tools/cmd/[email protected] ;\
82-
rm -rf $$CONTROLLER_GEN_TMP_DIR ;\
83-
}
84-
CONTROLLER_GEN=$(GOBIN)/controller-gen
85-
else
86-
CONTROLLER_GEN=$(shell which controller-gen)
87-
endif
75+
$(call go-get-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/[email protected])
8876

77+
# Download kustomize locally if necessary
78+
KUSTOMIZE = $(shell pwd)/bin/kustomize
8979
kustomize:
90-
ifeq (, $(shell which kustomize))
91-
@{ \
92-
set -e ;\
93-
KUSTOMIZE_GEN_TMP_DIR=$$(mktemp -d) ;\
94-
cd $$KUSTOMIZE_GEN_TMP_DIR ;\
95-
go mod init tmp ;\
96-
go get sigs.k8s.io/kustomize/kustomize/[email protected] ;\
97-
rm -rf $$KUSTOMIZE_GEN_TMP_DIR ;\
98-
}
99-
KUSTOMIZE=$(GOBIN)/kustomize
100-
else
101-
KUSTOMIZE=$(shell which kustomize)
102-
endif
80+
$(call go-get-tool,$(KUSTOMIZE),sigs.k8s.io/kustomize/kustomize/[email protected])
81+
82+
# go-get-tool will 'go get' any package $2 and install it to $1.
83+
PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST))))
84+
define go-get-tool
85+
@[ -f $(1) ] || { \
86+
set -e ;\
87+
TMP_DIR=$$(mktemp -d) ;\
88+
cd $$TMP_DIR ;\
89+
go mod init tmp ;\
90+
echo "Downloading $(2)" ;\
91+
GOBIN=$(PROJECT_DIR)/bin go get $(2) ;\
92+
rm -rf $$TMP_DIR ;\
93+
}
94+
endef

testdata/project-v3-multigroup/Makefile

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -69,34 +69,26 @@ docker-build: test
6969
docker-push:
7070
docker push ${IMG}
7171

72-
# find or download controller-gen
73-
# download controller-gen if necessary
72+
# Download controller-gen locally if necessary
73+
CONTROLLER_GEN = $(shell pwd)/bin/controller-gen
7474
controller-gen:
75-
ifeq (, $(shell which controller-gen))
76-
@{ \
77-
set -e ;\
78-
CONTROLLER_GEN_TMP_DIR=$$(mktemp -d) ;\
79-
cd $$CONTROLLER_GEN_TMP_DIR ;\
80-
go mod init tmp ;\
81-
go get sigs.k8s.io/controller-tools/cmd/[email protected] ;\
82-
rm -rf $$CONTROLLER_GEN_TMP_DIR ;\
83-
}
84-
CONTROLLER_GEN=$(GOBIN)/controller-gen
85-
else
86-
CONTROLLER_GEN=$(shell which controller-gen)
87-
endif
75+
$(call go-get-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/[email protected])
8876

77+
# Download kustomize locally if necessary
78+
KUSTOMIZE = $(shell pwd)/bin/kustomize
8979
kustomize:
90-
ifeq (, $(shell which kustomize))
91-
@{ \
92-
set -e ;\
93-
KUSTOMIZE_GEN_TMP_DIR=$$(mktemp -d) ;\
94-
cd $$KUSTOMIZE_GEN_TMP_DIR ;\
95-
go mod init tmp ;\
96-
go get sigs.k8s.io/kustomize/kustomize/[email protected] ;\
97-
rm -rf $$KUSTOMIZE_GEN_TMP_DIR ;\
98-
}
99-
KUSTOMIZE=$(GOBIN)/kustomize
100-
else
101-
KUSTOMIZE=$(shell which kustomize)
102-
endif
80+
$(call go-get-tool,$(KUSTOMIZE),sigs.k8s.io/kustomize/kustomize/[email protected])
81+
82+
# go-get-tool will 'go get' any package $2 and install it to $1.
83+
PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST))))
84+
define go-get-tool
85+
@[ -f $(1) ] || { \
86+
set -e ;\
87+
TMP_DIR=$$(mktemp -d) ;\
88+
cd $$TMP_DIR ;\
89+
go mod init tmp ;\
90+
echo "Downloading $(2)" ;\
91+
GOBIN=$(PROJECT_DIR)/bin go get $(2) ;\
92+
rm -rf $$TMP_DIR ;\
93+
}
94+
endef

testdata/project-v3/Makefile

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -69,34 +69,26 @@ docker-build: test
6969
docker-push:
7070
docker push ${IMG}
7171

72-
# find or download controller-gen
73-
# download controller-gen if necessary
72+
# Download controller-gen locally if necessary
73+
CONTROLLER_GEN = $(shell pwd)/bin/controller-gen
7474
controller-gen:
75-
ifeq (, $(shell which controller-gen))
76-
@{ \
77-
set -e ;\
78-
CONTROLLER_GEN_TMP_DIR=$$(mktemp -d) ;\
79-
cd $$CONTROLLER_GEN_TMP_DIR ;\
80-
go mod init tmp ;\
81-
go get sigs.k8s.io/controller-tools/cmd/[email protected] ;\
82-
rm -rf $$CONTROLLER_GEN_TMP_DIR ;\
83-
}
84-
CONTROLLER_GEN=$(GOBIN)/controller-gen
85-
else
86-
CONTROLLER_GEN=$(shell which controller-gen)
87-
endif
75+
$(call go-get-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/[email protected])
8876

77+
# Download kustomize locally if necessary
78+
KUSTOMIZE = $(shell pwd)/bin/kustomize
8979
kustomize:
90-
ifeq (, $(shell which kustomize))
91-
@{ \
92-
set -e ;\
93-
KUSTOMIZE_GEN_TMP_DIR=$$(mktemp -d) ;\
94-
cd $$KUSTOMIZE_GEN_TMP_DIR ;\
95-
go mod init tmp ;\
96-
go get sigs.k8s.io/kustomize/kustomize/[email protected] ;\
97-
rm -rf $$KUSTOMIZE_GEN_TMP_DIR ;\
98-
}
99-
KUSTOMIZE=$(GOBIN)/kustomize
100-
else
101-
KUSTOMIZE=$(shell which kustomize)
102-
endif
80+
$(call go-get-tool,$(KUSTOMIZE),sigs.k8s.io/kustomize/kustomize/[email protected])
81+
82+
# go-get-tool will 'go get' any package $2 and install it to $1.
83+
PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST))))
84+
define go-get-tool
85+
@[ -f $(1) ] || { \
86+
set -e ;\
87+
TMP_DIR=$$(mktemp -d) ;\
88+
cd $$TMP_DIR ;\
89+
go mod init tmp ;\
90+
echo "Downloading $(2)" ;\
91+
GOBIN=$(PROJECT_DIR)/bin go get $(2) ;\
92+
rm -rf $$TMP_DIR ;\
93+
}
94+
endef

0 commit comments

Comments
 (0)