@@ -2,31 +2,14 @@ SELF = $(lastword $(MAKEFILE_LIST))
22ROOT_DIR = $(realpath $(dir $(SELF ) ) )
33
44CONTAINER_CMD ?=
5- ifeq ($(CONTAINER_CMD ) ,)
6- CONTAINER_CMD:=$(shell podman version >/dev/null 2>&1 && echo podman)
7- endif
8- ifeq ($(CONTAINER_CMD ) ,)
9- CONTAINER_CMD:=$(shell docker version >/dev/null 2>&1 && echo docker)
10- endif
11- # handle the case where podman is present but is (defaulting) to remote and is
12- # not not functioning correctly. Example: mac platform but no 'podman machine'
13- # vms are ready
14- ifeq ($(CONTAINER_CMD ) ,)
15- CONTAINER_CMD:=$(shell podman --version >/dev/null 2>&1 && echo podman)
16- ifneq ($(CONTAINER_CMD ) ,)
17- $(warning podman detected but 'podman version' failed. \
18- this may mean your podman is set up for remote use, but is not working)
19- endif
20- endif
21-
22- BUILD_CMD: =$(CONTAINER_CMD ) build $(BUILD_OPTS )
23- PUSH_CMD: =$(CONTAINER_CMD ) push $(PUSH_OPTS )
245
256ALT_BIN =$(CURDIR ) /.bin
267SHELLCHECK =$(shell command -v shellcheck || echo $(ALT_BIN ) /shellcheck)
278GITLINT =$(shell command -v gitlint || echo $(ALT_BIN ) /gitlint)
289YAMLLINT_CMD =$(shell command -v yamllint || echo $(ALT_BIN ) /yamllint)
29- COMMON_DIR: =images/common
10+ BUILD_IMAGE =$(ROOT_DIR ) /hack/build-image --debug --without-repo-bases
11+
12+
3013SERVER_DIR: =images/server
3114AD_SERVER_DIR: =images/ad-server
3215CLIENT_DIR: =images/client
@@ -47,72 +30,17 @@ AD_SERVER_SOURCES=\
4730CLIENT_SRC_FILE =$(CLIENT_DIR ) /Containerfile.$(SRC_OS_NAME )
4831TOOLBOX_SRC_FILE =$(TOOLBOX_DIR ) /Containerfile.$(SRC_OS_NAME )
4932
50-
5133BUILDFILE_PREFIX =.build
52- BUILDFILE_SERVER: =$(BUILDFILE_PREFIX ) .server
53- BUILDFILE_NIGHTLY_SERVER: =$(BUILDFILE_PREFIX ) .nightly-server
54- BUILDFILE_AD_SERVER: =$(BUILDFILE_PREFIX ) .ad-server
55- BUILDFILE_NIGHTLY_AD_SERVER: =$(BUILDFILE_PREFIX ) .nightly-ad-server
56- BUILDFILE_CLIENT: =$(BUILDFILE_PREFIX ) .client
57- BUILDFILE_TOOLBOX: =$(BUILDFILE_PREFIX ) .toolbox
58- OS_PREFIX =$(addsuffix -,$(OS_NAME ) )
59- TAG =$(OS_PREFIX ) latest
60- NIGHTLY_TAG =$(OS_PREFIX ) nightly
61-
62-
63- SERVER_NAME =samba-server:$(TAG )
64- NIGHTLY_SERVER_NAME =samba-server:$(NIGHTLY_TAG )
65- AD_SERVER_NAME = samba-ad-server:$(TAG )
66- NIGHTLY_AD_SERVER_NAME =samba-ad-server:$(NIGHTLY_TAG )
67- CLIENT_NAME =samba-client:$(TAG )
68- NIGHTLY_CLIENT_NAME =samba-client:$(NIGHTLY_TAG )
69- TOOLBOX_NAME =samba-toolbox:$(TAG )
70- NIGHTLY_TOOLBOX_NAME =samba-toolbox:$(NIGHTLY_TAG )
34+ BUILDFILE_SERVER =$(shell $(call _BUILD_KP,server,default,--print-buildfile) )
35+ BUILDFILE_NIGHTLY_SERVER =$(shell $(call _BUILD_KP,server,nightly,--print-buildfile) )
36+ BUILDFILE_AD_SERVER =$(shell $(call _BUILD_KP,ad-server,default,--print-buildfile) )
37+ BUILDFILE_NIGHTLY_AD_SERVER =$(shell $(call _BUILD_KP,ad-server,nightly,--print-buildfile) )
38+ BUILDFILE_CLIENT =$(shell $(call _BUILD_KP,client,default,--print-buildfile) )
39+ BUILDFILE_TOOLBOX =$(shell $(call _BUILD_KP,toolbox,default,--print-buildfile) )
7140
7241REPO_BASE =quay.io/samba.org/
73- SERVER_REPO_NAME =$(REPO_BASE )$(SERVER_NAME )
74- NIGHTLY_SERVER_REPO_NAME =$(REPO_BASE )$(NIGHTLY_SERVER_NAME )
75- AD_SERVER_REPO_NAME =$(REPO_BASE )$(AD_SERVER_NAME )
76- NIGHTLY_AD_SERVER_REPO_NAME =$(REPO_BASE )$(NIGHTLY_AD_SERVER_NAME )
77- CLIENT_REPO_NAME =$(REPO_BASE )$(CLIENT_NAME )
78- NIGHTLY_CLIENT_REPO_NAME =$(REPO_BASE )$(NIGHTLY_CLIENT_NAME )
79- TOOLBOX_REPO_NAME =$(REPO_BASE )$(TOOLBOX_NAME )
80- NIGHTLY_TOOLBOX_REPO_NAME =$(REPO_BASE )$(NIGHTLY_TOOLBOX_NAME )
8142
82- BUILDFILE_PREFIX =.build
83- BUILDFILE_SERVER =$(BUILDFILE_PREFIX ) .$(OS_PREFIX ) server
84- BUILDFILE_NIGHTLY_SERVER =$(BUILDFILE_PREFIX ) .$(OS_PREFIX ) nightly-server
85- BUILDFILE_AD_SERVER =$(BUILDFILE_PREFIX ) .$(OS_PREFIX ) ad-server
86- BUILDFILE_NIGHTLY_AD_SERVER =$(BUILDFILE_PREFIX ) .$(OS_PREFIX ) nightly-ad-server
87- BUILDFILE_CLIENT =$(BUILDFILE_PREFIX ) .$(OS_PREFIX ) client
88- BUILDFILE_NIGHTLY_CLIENT =$(BUILDFILE_PREFIX ) .$(OS_PREFIX ) nightly-client
89- BUILDFILE_TOOLBOX =$(BUILDFILE_PREFIX ) .$(OS_PREFIX ) toolbox
90- BUILDFILE_NIGHTLY_TOOLBOX =$(BUILDFILE_PREFIX ) .$(OS_PREFIX ) nightly-toolbox
91-
92- HOST_ARCH: =$(shell arch)
93- HOST_ARCH: =$(subst x86_64,amd64,$(HOST_ARCH ) )
94- HOST_ARCH: =$(subst aarch64,arm64,$(HOST_ARCH ) )
95-
96- # build_fqin is a function macro for building a "Fully Qualified Image Name".
97- # Usage: $(call build_fqin,<base-name>,<pkg-source>,<os-name>,<arch>,[<extra>])
98- # base-name: the last part of the repo name eg. 'samba-server'
99- # pkg-source: source for samba packages (default or nightly)
100- # os-name: base os name
101- # arch: architecture of image (amd64, arm64, etc.)
102- # extra: (optional) an additional unique suffix for the tag
103- # typically meant for use by devs building custom images
104- build_fqin =$(REPO_BASE )$(1 ) :$(2 ) -$(3 ) -$(4 )$(if $(5 ) ,-$(5 ) )
105-
106- # get_imagename is a function macro for getting only the base image name
107- # without the tag part.
108- # Usage: $(call get_imagename,<image-name>)
109- get_imagename =$(firstword $(subst :, ,$1) )
110-
111- # get_pkgsource is a function macro that, given an images name returns
112- # the name of the package source. Currently only understands the
113- # difference between default (os packages) and nightly (SIT packages).
114- # Usage: $(call, get_pkgsource,<image-name>)
115- get_pkgsource =$(if $(findstring nightly,$1) ,nightly,default)
43+ _BUILD_KP =$(BUILD_IMAGE ) $(if $(CONTAINER_CMD ) ,--container-engine=$(CONTAINER_CMD ) ) $(BI_PREFIX_ARGS ) --kind=$1 --package-source=$2 --distro-base=$(SRC_OS_NAME ) --repo-base=$(REPO_BASE ) $(if $(BUILD_ARCH ) ,--arch=$(BUILD_ARCH ) ) $3
11644
11745
11846arch_flag =$(strip $(if $(filter docker,$(CONTAINER_CMD ) ) ,\
@@ -128,34 +56,18 @@ build: build-server build-nightly-server build-ad-server build-client \
12856.PHONY : debug-vars
12957debug-vars :
13058 @echo OS_NAME: $(OS_NAME )
131- @echo OS_PREFIX: $(OS_PREFIX )
13259 @echo TAG: $(TAG )
13360 @echo NIGHTLY_TAG: $(NIGHTLY_TAG )
13461 @echo SERVER_NAME: $(SERVER_NAME )
135- @echo SERVER_REPO_NAME: $(SERVER_REPO_NAME )
136- @echo NIGHTLY_SERVER_REPO_NAME: $(NIGHTLY_SERVER_REPO_NAME )
13762 @echo NIGHTLY_SERVER_NAME: $(NIGHTLY_SERVER_NAME )
13863 @echo AD_SERVER_NAME: $(AD_SERVER_NAME )
139- @echo AD_SERVER_REPO_NAME: $(AD_SERVER_REPO_NAME )
140- @echo NIGHTLY_AD_SERVER_NAME: $(NIGHTLY_AD_SERVER_NAME )
141- @echo NIGHTLY_AD_SERVER_NAME: $(NIGHTLY_AD_SERVER_NAME )
142- @echo NIGHTLY_AD_SERVER_REPO_NAME: $(NIGHTLY_AD_SERVER_REPO_NAME )
143- @echo CLIENT_NAME: $(CLIENT_NAME )
144- @echo CLIENT_REPO_NAME: $(CLIENT_REPO_NAME )
145- @echo NIGHTLY_CLIENT_NAME: $(NIGHTLY_CLIENT_NAME )
146- @echo NIGHTLY_CLIENT_REPO_NAME: $(NIGHTLY_CLIENT_REPO_NAME )
147- @echo TOOLBOX_NAME: $(TOOLBOX_NAME )
148- @echo TOOLBOX_REPO_NAME: $(TOOLBOX_REPO_NAME )
149- @echo NIGHTLY_TOOLBOX_NAME: $(NIGHTLY_TOOLBOX_NAME )
150- @echo NIGHTLY_TOOLBOX_REPO_NAME: $(NIGHTLY_TOOLBOX_REPO_NAME )
15164
15265 @echo BUILDFILE_SERVER: $(BUILDFILE_SERVER)
15366 @echo BUILDFILE_AD_SERVER: $(BUILDFILE_AD_SERVER)
15467 @echo BUILDFILE_NIGHTLY_AD_SERVER: $(BUILDFILE_iNIGHTLY_AD_SERVER)
15568 @echo BUILDFILE_NIGHTLY_SERVER: $(BUILDFILE_NIGHTLY_SERVER)
15669 @echo BUILDFILE_CLIENT: $(BUILDFILE_CLIENT)
15770 @echo BUILDFILE_TOOLBOX: $(BUILDFILE_TOOLBOX)
158- @echo BUILDFILE_NIGHTLY_TOOLBOX: $(BUILDFILE_NIGHTLY_TOOLBOX)
15971
16072 @echo SERVER_SRC_FILE: $(SERVER_SRC_FILE)
16173 @echo AD_SERVER_SRC_FILE: $(AD_SERVER_SRC_FILE)
@@ -168,97 +80,55 @@ debug-vars:
16880build-server : $(BUILDFILE_SERVER )
16981.PHONY : build-server
17082$(BUILDFILE_SERVER ) : Makefile $(SERVER_SRC_FILE ) $(SERVER_SOURCES )
171- $(MAKE ) _img_build \
172- BUILD_ARGS=" " \
173- EXTRA_BUILD_ARGS=" $( EXTRA_BUILD_ARGS) " \
174- SHORT_NAME=$(SERVER_NAME ) \
175- REPO_NAME=$(SERVER_REPO_NAME ) \
176- SRC_FILE=$(SERVER_SRC_FILE ) \
177- DIR=$(SERVER_DIR ) \
178- BUILDFILE=$(BUILDFILE_SERVER )
83+ $(call _BUILD_KP,server,default) $(EXTRA_BUILD_ARGS )
17984
18085push-server : build-server
181- $(PUSH_CMD ) $( SERVER_REPO_NAME )
86+ $(call _BUILD_KP,server,default,--push )
18287.PHONY : push-server
18388
18489build-nightly-server : $(BUILDFILE_NIGHTLY_SERVER )
18590.PHONY : build-nightly-server
18691$(BUILDFILE_NIGHTLY_SERVER ) : Makefile $(SERVER_SRC_FILE ) $(SERVER_SOURCES )
187- $(MAKE ) _img_build \
188- BUILD_ARGS=" --build-arg=INSTALL_PACKAGES_FROM='samba-nightly'" \
189- EXTRA_BUILD_ARGS=" $( EXTRA_BUILD_ARGS) " \
190- SHORT_NAME=$(NIGHTLY_SERVER_NAME ) \
191- REPO_NAME=$(NIGHTLY_SERVER_REPO_NAME ) \
192- SRC_FILE=$(SERVER_SRC_FILE ) \
193- DIR=$(SERVER_DIR ) \
194- BUILDFILE=$(BUILDFILE_NIGHTLY_SERVER )
92+ $(call _BUILD_KP,server,nightly) $(EXTRA_BUILD_ARGS )
19593
19694push-nightly-server : build-nightly-server
197- $(PUSH_CMD ) $( NIGHTLY_SERVER_REPO_NAME )
95+ $(call _BUILD_KP,server,nightly,--push )
19896.PHONY : push-nightly-server
19997
20098build-ad-server : $(BUILDFILE_AD_SERVER )
20199.PHONY : build-ad-server
202100$(BUILDFILE_AD_SERVER ) : Makefile $(AD_SERVER_SRC_FILE ) $(AD_SERVER_SOURCES )
203- $(MAKE ) _img_build \
204- BUILD_ARGS=" " \
205- EXTRA_BUILD_ARGS=" $( EXTRA_BUILD_ARGS) " \
206- SHORT_NAME=$(AD_SERVER_NAME ) \
207- REPO_NAME=$(AD_SERVER_REPO_NAME ) \
208- SRC_FILE=$(AD_SERVER_SRC_FILE ) \
209- DIR=$(AD_SERVER_DIR ) \
210- BUILDFILE=$(BUILDFILE_AD_SERVER )
101+ $(call _BUILD_KP,ad-server,default) $(EXTRA_BUILD_ARGS )
211102
212103push-ad-server : build-ad-server
213- $(PUSH_CMD ) $( AD_SERVER_REPO_NAME )
104+ $(call _BUILD_KP,ad-server,default,--push )
214105.PHONY : push-ad-server
215106
216107build-nightly-ad-server : $(BUILDFILE_NIGHTLY_AD_SERVER )
217108.PHONY : build-nightly-ad-server
218109$(BUILDFILE_NIGHTLY_AD_SERVER ) : Makefile $(AD_SERVER_SRC_FILE ) $(AD_SERVER_SOURCES )
219- $(MAKE ) _img_build \
220- BUILD_ARGS=" --build-arg=INSTALL_PACKAGES_FROM='samba-nightly'" \
221- EXTRA_BUILD_ARGS=" $( EXTRA_BUILD_ARGS) " \
222- SHORT_NAME=$(NIGHTLY_AD_SERVER_NAME ) \
223- REPO_NAME=$(NIGHTLY_AD_SERVER_REPO_NAME ) \
224- SRC_FILE=$(AD_SERVER_SRC_FILE ) \
225- DIR=$(AD_SERVER_DIR ) \
226- BUILDFILE=$(BUILDFILE_NIGHTLY_AD_SERVER )
110+ $(call _BUILD_KP,ad-server,nightly) $(EXTRA_BUILD_ARGS )
227111
228112push-nightly-ad-server : build-nightly-ad-server
229- $(PUSH_CMD ) $( NIGHTLY_AD_SERVER_REPO_NAME )
113+ $(call _BUILD_KP,ad-server,nightly,--push )
230114.PHONY : push-nightly-ad-server
231115
232116build-client : $(BUILDFILE_CLIENT )
233117.PHONY : build-client
234118$(BUILDFILE_CLIENT ) : Makefile $(CLIENT_SRC_FILE )
235- $(MAKE ) _img_build \
236- BUILD_ARGS=" " \
237- EXTRA_BUILD_ARGS=" $( EXTRA_BUILD_ARGS) " \
238- SHORT_NAME=$(CLIENT_NAME ) \
239- REPO_NAME=$(CLIENT_REPO_NAME ) \
240- SRC_FILE=$(CLIENT_SRC_FILE ) \
241- DIR=$(CLIENT_DIR ) \
242- BUILDFILE=$(BUILDFILE_CLIENT )
119+ $(call _BUILD_KP,client,default) $(EXTRA_BUILD_ARGS )
243120
244121push-client : build-client
245- $(PUSH_CMD ) $( CLIENT_REPO_NAME )
122+ $(call _BUILD_KP,client,default,--push )
246123.PHONY : push-client
247124
248125build-toolbox : $(BUILDFILE_TOOLBOX )
249126.PHONY : build-toolbox
250127$(BUILDFILE_TOOLBOX ) : Makefile $(TOOLBOX_SRC_FILE )
251- $(MAKE ) _img_build \
252- BUILD_ARGS=" " \
253- EXTRA_BUILD_ARGS=" $( EXTRA_BUILD_ARGS) " \
254- SHORT_NAME=$(TOOLBOX_NAME ) \
255- REPO_NAME=$(TOOLBOX_REPO_NAME ) \
256- SRC_FILE=$(TOOLBOX_SRC_FILE ) \
257- DIR=$(TOOLBOX_DIR ) \
258- BUILDFILE=$(BUILDFILE_TOOLBOX )
128+ $(call _BUILD_KP,toolbox,default) $(EXTRA_BUILD_ARGS )
259129
260130push-toolbox : build-toolbox
261- $(PUSH_CMD ) $( TOOLBOX_REPO_NAME )
131+ $(call _BUILD_KP,toolbox,default,--push )
262132.PHONY : push-toolbox
263133
264134
@@ -268,11 +138,15 @@ test: test-server test-nightly-server
268138.PHONY : test
269139
270140test-server : build-server
271- CONTAINER_CMD=$(CONTAINER_CMD ) LOCAL_TAG=$(SERVER_NAME ) tests/test-samba-container.sh
141+ CONTAINER_CMD=$(CONTAINER_CMD ) \
142+ LOCAL_TAG=$(shell cat $(BUILDFILE_SERVER ) |cut -d' ' -f2) \
143+ tests/test-samba-container.sh
272144.PHONY : test-server
273145
274- test-nightly-server : build-nightly-server
275- CONTAINER_CMD=$(CONTAINER_CMD ) LOCAL_TAG=$(NIGHTLY_SERVER_NAME ) tests/test-samba-container.sh
146+ test-nightly-server : $(BUILDFILE_NIGHTLY_SERVER )
147+ CONTAINER_CMD=$(CONTAINER_CMD ) \
148+ LOCAL_TAG=$(shell cat $(BUILDFILE_NIGHTLY_SERVER ) |cut -d' ' -f2) \
149+ tests/test-samba-container.sh
276150.PHONY : test-nightly-server
277151
278152
@@ -295,48 +169,19 @@ check-gitlint: $(filter $(ALT_BIN)%,$(GITLINT))
295169 $(GITLINT ) -C .gitlint --commits origin/master.. lint
296170.PHONY : check-gitlint
297171
298- # _img_build is an "internal" rule to make the building of samba-container
299- # images regular and more "self documenting". A makefile.foo that includes
300- # this Makefile can add build rules using _img_build as a building block.
301- #
302- # The following arguments are expected to be supplied when "calling" this rule:
303- # BUILD_ARGS: the default build arguments
304- # EXTRA_BUILD_ARGS: build args supplied by the user at "runtime"
305- # SHORT_NAME: a local name for the image
306- # REPO_NAME: a global name for the image
307- # SRC_FILE: path to the Containerfile (Dockerfile)
308- # DIR: path to the directory holding image contents
309- # BUILDFILE: path to a temporary file tracking build state
310- _img_build : $(DIR ) /.common
311- $(BUILD_CMD ) \
312- $(BUILD_ARGS ) \
313- $(call arch_flag) \
314- $(EXTRA_BUILD_ARGS ) \
315- --tag $(SHORT_NAME ) \
316- --tag $(REPO_NAME ) \
317- --tag $(call build_fqin,$(call get_imagename,$(SHORT_NAME ) ) ,$(call get_pkgsource,$(SHORT_NAME ) ) ,$(SRC_OS_NAME ) ,$(if $(BUILD_ARCH ) ,$(BUILD_ARCH ) ,$(HOST_ARCH ) ) ,$(EXTRA_TAG ) ) \
318- -f $(SRC_FILE ) \
319- $(DIR )
320- $(CONTAINER_CMD ) inspect -f ' {{.Id}}' $(SHORT_NAME ) > $(BUILDFILE )
321- .PHONY : _img_build
322-
323- $(DIR ) /.common : $(COMMON_DIR )
324- $(RM ) -r $(DIR ) /.common
325- cp -r $(COMMON_DIR ) $(DIR ) /.common
172+
173+ # ## Misc. Rules ###
326174
327175$(ALT_BIN ) /% :
328176 $(CURDIR ) /hack/install-tools.sh --$* $(ALT_BIN )
329177
330-
331-
332- # ## Misc. Rules ###
333-
334178clean : clean-buildfiles clean-altbin
335179.PHONY : clean
180+
336181clean-buildfiles :
337182 $(RM ) $(BUILDFILE_PREFIX ) *
338183.PHONY : clean-buildfiles
184+
339185clean-altbin :
340186 $(RM ) -r $(ALT_BIN )
341187.PHONY : clean-altbin
342-
0 commit comments