1
- BASEIMAGE ?= "alpine:3.14"
1
+ ON_PLUGINS ?= flase
2
+ BASE_IMAGE ?= "alpine:3.14"
2
3
REGISTRY ?= "ghcr.io/clusterpedia-io/clusterpedia"
3
4
4
5
GOOS ?= $(shell go env GOOS)
5
6
GOARCH ?= $(shell go env GOARCH)
6
7
RELEASE_ARCHS ?= amd64 arm64
7
8
8
- # Git information, used to set clusterpedia version
9
- GIT_VERSION ?= $(shell git describe --tags --dirty)
10
- GIT_COMMIT_HASH ?= $(shell git rev-parse HEAD)
11
- GIT_TREESTATE = "clean"
12
- GIT_DIFF = $(shell git diff --quiet >/dev/null 2>&1; if [ $$? -eq 1 ]; then echo "1"; fi)
13
- ifeq ($(GIT_DIFF ) , 1)
14
- GIT_TREESTATE = "dirty"
15
- endif
16
- BUILD_DATE = $(shell date -u +'% Y-% m-% dT% H:% M:% SZ')
17
-
18
- KUBE_DEPENDENCE_VERSION = $(shell go list -m k8s.io/kubernetes | cut -d' ' -f2)
19
-
20
- LDFLAGS += -X github.com/clusterpedia-io/clusterpedia/pkg/version.gitVersion=$(GIT_VERSION )
21
- LDFLAGS += -X github.com/clusterpedia-io/clusterpedia/pkg/version.gitCommit=$(GIT_COMMIT_HASH )
22
- LDFLAGS += -X github.com/clusterpedia-io/clusterpedia/pkg/version.gitTreeState=$(GIT_TREESTATE )
23
- LDFLAGS += -X github.com/clusterpedia-io/clusterpedia/pkg/version.buildDate=$(BUILD_DATE )
24
-
25
- # The `client-go/pkg/version` effects the **User-Agent** when using client-go to request.
26
- # User-Agent="<bin name>/$(GIT_VERSION) ($(GOOS)/$(GOARCH)) kubernetes/$(GIT_COMMIT_HASH)[/<component name>]"
27
- # eg. "clustersynchro-manager/0.4.0 (linux/amd64) kubernetes/fbf0f4f/clustersynchro-manager"
28
- LDFLAGS += -X k8s.io/client-go/pkg/version.gitVersion=$(GIT_VERSION )
29
- LDFLAGS += -X k8s.io/client-go/pkg/version.gitMajor=$(shell echo '$(subst v,,$(GIT_VERSION ) ) ' | cut -d. -f1)
30
- LDFLAGS += -X k8s.io/client-go/pkg/version.gitMinor=$(shell echo '$(subst v,,$(GIT_VERSION ) ) ' | cut -d. -f2)
31
- LDFLAGS += -X k8s.io/client-go/pkg/version.gitCommit=$(GIT_COMMIT_HASH )
32
- LDFLAGS += -X k8s.io/client-go/pkg/version.gitTreeState=$(GIT_TREESTATE )
33
- LDFLAGS += -X k8s.io/client-go/pkg/version.buildDate=$(BUILD_DATE )
34
-
35
- # The `component-base/version` effects the version obtained using Kubernetes OpenAPI.
36
- # OpenAPI Path: /apis/clusterpedia.io/v1beta1/resources/version
37
- # $ kubectl version
38
- LDFLAGS += -X k8s.io/component-base/version.gitVersion=$(KUBE_DEPENDENCE_VERSION )
39
- LDFLAGS += -X k8s.io/component-base/version.gitMajor=$(shell echo '$(subst v,,$(KUBE_DEPENDENCE_VERSION ) ) ' | cut -d. -f1)
40
- LDFLAGS += -X k8s.io/component-base/version.gitMinor=$(shell echo '$(subst v,,$(KUBE_DEPENDENCE_VERSION ) ) ' | cut -d. -f2)
41
- LDFLAGS += -X k8s.io/component-base/version.gitCommit=$(GIT_COMMIT_HASH )
42
- LDFLAGS += -X k8s.io/component-base/version.gitTreeState=$(GIT_TREESTATE )
43
- LDFLAGS += -X k8s.io/component-base/version.buildDate=$(BUILD_DATE )
44
-
45
9
VERSION ?= "latest"
46
10
LATEST_TAG =$(shell git describe --tags)
47
11
ifeq ($(LATEST_TAG ) ,$(shell git describe --abbrev=0 --tags) )
48
12
VERSION=$(LATEST_TAG)
49
13
endif
50
14
15
+ BUILDER_IMAGE_TAG = $(shell git rev-parse HEAD)
16
+ GIT_DIFF = $(shell git diff --quiet >/dev/null 2>&1; if [ $$? -eq 1 ]; then echo "1"; fi)
17
+ ifeq ($(GIT_DIFF ) , 1)
18
+ BUILDER_IMAGE_TAG := $(BUILDER_IMAGE_TAG)-dirty
19
+ endif
20
+
21
+ HOSTARCH = $(shell go env GOHOSTARCH)
22
+
51
23
all : apiserver binding-apiserver clustersynchro-manager controller-manager
52
24
53
25
gen-clusterconfigs :
@@ -86,76 +58,114 @@ clean: clean-images
86
58
87
59
.PHONY : apiserver
88
60
apiserver :
89
- CGO_ENABLED=0 GOOS=$(GOOS ) GOARCH=$(GOARCH ) go build \
90
- -ldflags " $( LDFLAGS) " \
91
- -o bin/apiserver \
92
- cmd/apiserver/main.go
61
+ ifeq ($(ON_PLUGINS ) , true)
62
+ hack/builder.sh $@
63
+ else
64
+ hack/builder-nocgo.sh $@
65
+ endif
93
66
94
67
.PHONY : binding-apiserver
95
68
binding-apiserver :
96
- CGO_ENABLED=0 GOOS=$(GOOS ) GOARCH=$(GOARCH ) go build \
97
- -ldflags " $( LDFLAGS) " \
98
- -o bin/binding-apiserver \
99
- cmd/binding-apiserver/main.go
69
+ ifeq ($(ON_PLUGINS ) , true)
70
+ hack/builder.sh $@
71
+ else
72
+ hack/builder-nocgo.sh $@
73
+ endif
100
74
101
75
.PHONY : clustersynchro-manager
102
76
clustersynchro-manager :
103
- CGO_ENABLED=0 GOOS=$(GOOS ) GOARCH=$(GOARCH ) go build \
104
- -ldflags " $( LDFLAGS) " \
105
- -o bin/clustersynchro-manager \
106
- cmd/clustersynchro-manager/main.go
77
+ ifeq ($(ON_PLUGINS ) , true)
78
+ hack/builder.sh $@
79
+ else
80
+ hack/builder-nocgo.sh $@
81
+ endif
107
82
108
83
.PHONY : controller-manager
109
84
controller-manager :
110
- CGO_ENABLED=0 GOOS=$(GOOS ) GOARCH=$(GOARCH ) go build \
111
- -ldflags " $( LDFLAGS) " \
112
- -o bin/controller-manager \
113
- cmd/controller-manager/main.go
85
+ hack/builder-nocgo.sh $@
114
86
115
87
.PHONY : images
116
- images : image-apiserver image-binding-apiserver image-clustersynchro-manager image-controller-manager
88
+ images : image-builder image-apiserver image-binding-apiserver image-clustersynchro-manager image-controller-manager
89
+
90
+ image-builder :
91
+ docker buildx build \
92
+ -t $(REGISTRY ) /builder-$(GOARCH ) :$(BUILDER_IMAGE_TAG ) \
93
+ --platform=linux/$(GOARCH ) \
94
+ --load \
95
+ -f builder.dockerfile . ; \
96
+
97
+ build-image-% :
98
+ GOARCH=$(HOSTARCH ) $(MAKE ) image-builder
99
+ $(MAKE ) $(subst build-,,$@ )
100
+
117
101
118
102
image-apiserver :
119
- GOOS=" linux" $(MAKE ) apiserver
120
103
docker buildx build \
121
- -t ${ REGISTRY} /apiserver-$(GOARCH ) :$(VERSION ) \
104
+ -t $( REGISTRY ) /apiserver-$(GOARCH ) :$(VERSION ) \
122
105
--platform=linux/$(GOARCH ) \
123
106
--load \
124
- --build-arg BASEIMAGE=$(BASEIMAGE ) \
125
- --build-arg BINNAME=apiserver .
107
+ --build-arg BASE_IMAGE=$(BASE_IMAGE ) \
108
+ --build-arg BIN_NAME=apiserver \
109
+ --build-arg BUILDER_IMAGE=$(REGISTRY ) /builder-$(HOSTARCH ) :$(BUILDER_IMAGE_TAG ) \
110
+ --build-arg ON_PLUGINS=$(ON_PLUGINS ) .
126
111
127
112
image-binding-apiserver :
128
- GOOS=" linux" $(MAKE ) binding-apiserver
129
113
docker buildx build \
130
- -t ${ REGISTRY} /binding-apiserver-$(GOARCH ) :$(VERSION ) \
114
+ -t $( REGISTRY ) /binding-apiserver-$(GOARCH ) :$(VERSION ) \
131
115
--platform=linux/$(GOARCH ) \
132
116
--load \
133
- --build-arg BASEIMAGE=$(BASEIMAGE ) \
134
- --build-arg BINNAME=binding-apiserver .
117
+ --build-arg BASE_IMAGE=$(BASE_IMAGE ) \
118
+ --build-arg BIN_NAME=binding-apiserver \
119
+ --build-arg BUILDER_IMAGE=$(REGISTRY ) /builder-$(HOSTARCH ) :$(BUILDER_IMAGE_TAG ) \
120
+ --build-arg ON_PLUGINS=$(ON_PLUGINS ) .
135
121
136
- image-clustersynchro-manager :
137
- GOOS=" linux" $(MAKE ) clustersynchro-manager
122
+ image-clustersynchro-manager :
138
123
docker buildx build \
139
124
-t $(REGISTRY ) /clustersynchro-manager-$(GOARCH ) :$(VERSION ) \
140
125
--platform=linux/$(GOARCH ) \
141
126
--load \
142
- --build-arg BASEIMAGE=$(BASEIMAGE ) \
143
- --build-arg BINNAME=clustersynchro-manager .
127
+ --build-arg BASE_IMAGE=$(BASE_IMAGE ) \
128
+ --build-arg BIN_NAME=clustersynchro-manager \
129
+ --build-arg BUILDER_IMAGE=$(REGISTRY ) /builder-$(HOSTARCH ) :$(BUILDER_IMAGE_TAG ) \
130
+ --build-arg ON_PLUGINS=$(ON_PLUGINS ) .
144
131
145
132
image-controller-manager :
146
- GOOS=" linux" $(MAKE ) controller-manager
147
133
docker buildx build \
148
134
-t $(REGISTRY ) /controller-manager-$(GOARCH ) :$(VERSION ) \
149
135
--platform=linux/$(GOARCH ) \
150
136
--load \
151
- --build-arg BASEIMAGE=$(BASEIMAGE ) \
152
- --build-arg BINNAME=controller-manager .
137
+ --build-arg BASE_IMAGE=$(BASE_IMAGE ) \
138
+ --build-arg BIN_NAME=controller-manager \
139
+ --build-arg BUILDER_IMAGE=$(REGISTRY ) /builder-$(HOSTARCH ) :$(BUILDER_IMAGE_TAG ) \
140
+ --build-arg ON_PLUGINS=false .
153
141
154
142
.PHONY : push-images
155
143
push-images : push-apiserver-image push-binding-apiserver-image push-clustersynchro-manager-image push-controller-manager-image
156
144
157
145
# clean manifest https://github.com/docker/cli/issues/954#issuecomment-586722447
158
- push-apiserver-image : clean-apiserver-manifest
146
+ push-builder-image : clean-builder-manifest
147
+ set -e; \
148
+ images=" " ; \
149
+ for arch in $( RELEASE_ARCHS) ; do \
150
+ GOARCH=$$ arch $(MAKE ) image-builder; \
151
+ image=$(REGISTRY ) /builder-$$ arch:$(BUILDER_IMAGE_TAG ) ; \
152
+ docker push $$ image; \
153
+ images=" $$ images $$ image" ; \
154
+ if [ $( VERSION) != latest ]; then \
155
+ tag_image=$(REGISTRY ) /builder-$$ arch:$(VERSION ) ; \
156
+ docker tag $$ image $$ tag_image; \
157
+ docker push $$ tag_image; \
158
+ fi ; \
159
+ done ; \
160
+ docker manifest create $(REGISTRY ) /builder:$(BUILDER_IMAGE_TAG ) $$ images; \
161
+ docker manifest push $(REGISTRY ) /builder:$(BUILDER_IMAGE_TAG ) ; \
162
+ if [ $( VERSION) != latest ]; then \
163
+ docker manifest create $(REGISTRY ) /builder:$(VERSION ) $$ images; \
164
+ docker manifest push $(REGISTRY ) /builder:$(VERSION ) ; \
165
+ fi ;
166
+
167
+ # clean manifest https://github.com/docker/cli/issues/954#issuecomment-586722447
168
+ push-apiserver-image : clean-apiserver-manifest push-builder-image
159
169
set -e; \
160
170
images=" " ; \
161
171
for arch in $( RELEASE_ARCHS) ; do \
@@ -177,7 +187,7 @@ push-apiserver-image: clean-apiserver-manifest
177
187
fi ;
178
188
179
189
# clean manifest https://github.com/docker/cli/issues/954#issuecomment-586722447
180
- push-binding-apiserver-image : clean-binding-apiserver-manifest
190
+ push-binding-apiserver-image : clean-binding-apiserver-manifest push-builder-image
181
191
set -e; \
182
192
images=" " ; \
183
193
for arch in $( RELEASE_ARCHS) ; do \
@@ -199,7 +209,7 @@ push-binding-apiserver-image: clean-binding-apiserver-manifest
199
209
fi ;
200
210
201
211
# clean manifest https://github.com/docker/cli/issues/954#issuecomment-586722447
202
- push-clustersynchro-manager-image : clean-clustersynchro-manager-manifest
212
+ push-clustersynchro-manager-image : clean-clustersynchro-manager-manifest push-builder-image
203
213
set -e; \
204
214
images=" " ; \
205
215
for arch in $( RELEASE_ARCHS) ; do \
@@ -221,7 +231,7 @@ push-clustersynchro-manager-image: clean-clustersynchro-manager-manifest
221
231
fi ;
222
232
223
233
# clean manifest https://github.com/docker/cli/issues/954#issuecomment-586722447
224
- push-controller-manager-image : clean-controller-manager-manifest
234
+ push-controller-manager-image : clean-controller-manager-manifest push-builder-image
225
235
set -e; \
226
236
images=" " ; \
227
237
for arch in $( RELEASE_ARCHS) ; do \
@@ -246,6 +256,10 @@ clean-images: clean-apiserver-manifest clean-clustersynchro-manager-manifest
246
256
docker images| grep $(REGISTRY ) /apiserver| awk ' {print $$3}' | xargs docker rmi --force
247
257
docker images| grep $(REGISTRY ) /clustersynchro-manager| awk ' {print $$3}' | xargs docker rmi --force
248
258
259
+ clean-builder-manifest :
260
+ docker manifest rm $(REGISTRY ) /builder:$(BUILDER_IMAGE_TAG ) 2> /dev/null; \
261
+ docker manifest rm $(REGISTRY ) /builder:$(VERSION ) 2> /dev/null; exit 0
262
+
249
263
clean-apiserver-manifest :
250
264
docker manifest rm $(REGISTRY ) /apiserver:$(VERSION ) 2> /dev/null; \
251
265
docker manifest rm $(REGISTRY ) /apiserver:latest 2> /dev/null; exit 0
0 commit comments