-
Notifications
You must be signed in to change notification settings - Fork 37
/
Copy pathMakefile
121 lines (95 loc) · 3.06 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# Copyright 2017 The Openstack-Helm Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#---------------#
# Configuration #
#---------------#
IMAGES := \
ceph-daemon:latest \
helm:latest \
helm:ubuntu-v2.1.3 \
helm:v2.1.3 \
jenkins:lts \
kolla-builder:latest \
kube-controller-manager:latest \
kube-controller-manager:v1.6.8 \
kvm-manager:latest \
openvswitch-vswitchd:latest \
rabbitmq:3.7.0-pre-15 \
simple-shaker:latest \
swissknife:latest
DEFAULT_NAMESPACE ?= quay.io/attcomdev
DEFAULT_IMAGE ?= $(call get_dir, $1)
DEFAULT_TAG ?= $(call get_tag, $1)
#-------#
# Setup #
#-------#
escape_colons = $(subst :,\:, $1)
dir_from_image = $(firstword $(subst :, , $1))
DIRS := $(sort $(foreach i, $(IMAGES), $(call dir_from_image, $(i))))
BUILD_TASK_DIRS := $(addprefix build:, $(DIRS))
PUSH_TASK_DIRS := $(addprefix push:, $(DIRS))
BUILD_TASK_IMAGES := $(addprefix build:, $(IMAGES))
PUSH_TASK_IMAGES := $(addprefix push:, $(IMAGES))
.PHONY : all build push $(DIRS) $(call escape_colons, \
$(BUILD_TASK_DIRS) $(PUSH_TASK_DIRS) $(BUILD_TASK_IMAGES) ($PUSH_TASK_IMAGES))
.SECONDEXPANSION:
# Helpers for run_submake
get_task = $(word 1, $(subst :, , $1))
get_dir = $(word 2, $(subst :, , $1))
get_tag = $(word 3, $(subst :, , $1))
run_submake = \
@if [ -f $(call get_dir, $@)/Makefile ]; then \
$(MAKE) -C $(call get_dir, $@) $(call get_task, $1) \
DEFAULT_NAMESPACE=$(DEFAULT_NAMESPACE) \
DEFAULT_IMAGE=$(DEFAULT_IMAGE) \
DEFAULT_TAG=$(DEFAULT_TAG) \
EXTRA_BUILD_ARGS="$(EXTRA_BUILD_ARGS)" \
; \
else \
$(MAKE) -f ../Makefile.default -C $(call get_dir, $1) $(call get_task, $1) \
NAMESPACE=$(DEFAULT_NAMESPACE) \
IMAGE=$(DEFAULT_IMAGE) \
TAG=$(DEFAULT_TAG) \
EXTRA_BUILD_ARGS="$(EXTRA_BUILD_ARGS)" \
; \
fi
#-------#
# Rules #
#-------#
all: usage
define usage_text=
Usage:
To build all images:
make build
To build a specific image:
make build:<image>[:<tag>]
make <image>[:<tag>]
To push all images:
make push
To push a specific image:
make push:<image>[:<tag>]
endef
export usage_text
help usage:
@echo "$$usage_text"
build: $(call escape_colons, $(BUILD_TASK_DIRS))
push: $(call escape_colons, $(PUSH_TASK_DIRS))
$(DIRS) : $$(addprefix build\:, $$@)
$(call escape_colons, $(IMAGES)): $$(addprefix build\:, $$@)
$(call escape_colons, $(BUILD_TASK_DIRS)): $$(filter $$@\:%, $$(BUILD_TASK_IMAGES))
$(call escape_colons, $(PUSH_TASK_DIRS)): $$(filter $$@\:%, $$(PUSH_TASK_IMAGES))
$(call escape_colons, $(PUSH_TASK_IMAGES)): $$(patsubst push%,build%, $$@)
$(call run_submake, $@)
$(call escape_colons, $(BUILD_TASK_IMAGES)):
$(call run_submake, $@)