Makefile 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. #
  2. # Licensed to the Apache Software Foundation (ASF) under one or more
  3. # contributor license agreements. See the NOTICE file distributed with
  4. # this work for additional information regarding copyright ownership.
  5. # The ASF licenses this file to You under the Apache License, Version 2.0
  6. # (the "License"); you may not use this file except in compliance with
  7. # the License. You may obtain a copy of the License at
  8. #
  9. # http://www.apache.org/licenses/LICENSE-2.0
  10. #
  11. # Unless required by applicable law or agreed to in writing, software
  12. # distributed under the License is distributed on an "AS IS" BASIS,
  13. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. # See the License for the specific language governing permissions and
  15. # limitations under the License.
  16. #
  17. # Makefile basic env setting
  18. .DEFAULT_GOAL := help
  19. # APISIX ARGS
  20. APISIX_VERSION ?= 3.0.0
  21. IMAGE_NAME = apache/apisix
  22. IMAGE_TAR_NAME = apache_apisix
  23. APISIX_DASHBOARD_VERSION ?= 2.13
  24. APISIX_DASHBOARD_IMAGE_NAME = apache/apisix-dashboard
  25. APISIX_DASHBOARD_IMAGE_TAR_NAME = apache_apisix_dashboard
  26. # Makefile ENV
  27. ENV_OS_NAME ?= $(shell uname -s | tr '[:upper:]' '[:lower:]')
  28. ENV_APISIX_TAR_NAME ?= $(IMAGE_TAR_NAME)_$(APISIX_VERSION)
  29. ENV_APISIX_IMAGE_TAG_NAME ?= $(IMAGE_NAME):$(APISIX_VERSION)
  30. ENV_DOCKER ?= docker
  31. # Makefile basic extension function
  32. _color_red =\E[1;31m
  33. _color_green =\E[1;32m
  34. _color_yellow =\E[1;33m
  35. _color_blue =\E[1;34m
  36. _color_wipe =\E[0m
  37. define func_echo_status
  38. printf "[$(_color_blue) info $(_color_wipe)] %s\n" $(1)
  39. endef
  40. define func_echo_warn_status
  41. printf "[$(_color_yellow) info $(_color_wipe)] %s\n" $(1)
  42. endef
  43. define func_echo_success_status
  44. printf "[$(_color_green) info $(_color_wipe)] %s\n" $(1)
  45. endef
  46. # Makefile target
  47. ### build-on-centos : Build apache/apisix:xx-centos image
  48. .PHONY: build-on-centos
  49. build-on-centos:
  50. @$(call func_echo_status, "$@ -> [ Start ]")
  51. $(ENV_DOCKER) build -t $(ENV_APISIX_IMAGE_TAG_NAME)-centos -f ./centos/Dockerfile centos
  52. @$(call func_echo_success_status, "$@ -> [ Done ]")
  53. ### build-on-alpine : Build apache/apisix:xx-alpine image
  54. .PHONY: build-on-alpine
  55. build-on-alpine:
  56. @$(call func_echo_status, "$@ -> [ Start ]")
  57. $(ENV_DOCKER) build -t $(ENV_APISIX_IMAGE_TAG_NAME)-alpine -f ./alpine/Dockerfile .
  58. @$(call func_echo_success_status, "$@ -> [ Done ]")
  59. ### build-on-debian-dev : Build apache/apisix:xx-debian-dev image
  60. .PHONY: build-on-debian-dev
  61. build-on-debian-dev:
  62. @$(call func_echo_status, "$@ -> [ Start ]")
  63. $(ENV_DOCKER) build -t $(ENV_APISIX_IMAGE_TAG_NAME)-debian-dev -f ./debian-dev/Dockerfile debian-dev
  64. @$(call func_echo_success_status, "$@ -> [ Done ]")
  65. ### build-on-debian : Build apache/apisix:xx-debian image
  66. .PHONY: build-on-debian
  67. build-on-debian:
  68. @$(call func_echo_status, "$@ -> [ Start ]")
  69. $(ENV_DOCKER) build -t $(ENV_APISIX_IMAGE_TAG_NAME)-debian -f ./debian/Dockerfile debian
  70. @$(call func_echo_success_status, "$@ -> [ Done ]")
  71. ### push-on-alpine : Push apache/apisix:xx-alpine image
  72. .PHONY: push-multiarch-on-alpine
  73. push-multiarch-on-alpine:
  74. @$(call func_echo_status, "$@ -> [ Start ]")
  75. $(ENV_DOCKER) buildx build --push \
  76. -t $(ENV_APISIX_IMAGE_TAG_NAME)-alpine \
  77. --platform linux/amd64,linux/arm64 \
  78. -f ./alpine/Dockerfile .
  79. @$(call func_echo_success_status, "$@ -> [ Done ]")
  80. ### push-on-alpine : Push apache/apisix:dev image
  81. .PHONY: push-multiarch-dev-on-debian
  82. push-multiarch-dev-on-debian:
  83. @$(call func_echo_status, "$@ -> [ Start ]")
  84. $(ENV_DOCKER) buildx build --network=host --push \
  85. -t $(IMAGE_NAME):dev \
  86. --platform linux/amd64,linux/arm64 \
  87. -f ./debian-dev/Dockerfile debian-dev
  88. @$(call func_echo_success_status, "$@ -> [ Done ]")
  89. ### push-multiarch-on-debian : Push apache/apisix:xx-debian image
  90. .PHONY: push-multiarch-on-debian
  91. push-multiarch-on-debian:
  92. @$(call func_echo_status, "$@ -> [ Start ]")
  93. $(ENV_DOCKER) buildx build --network=host --push \
  94. -t $(ENV_APISIX_IMAGE_TAG_NAME)-debian \
  95. --platform linux/amd64,linux/arm64 \
  96. -f ./debian/Dockerfile debian
  97. @$(call func_echo_success_status, "$@ -> [ Done ]")
  98. ### push-multiarch-on-centos : Push apache/apisix:xx-centos image
  99. .PHONY: push-multiarch-on-centos
  100. push-multiarch-on-centos:
  101. @$(call func_echo_status, "$@ -> [ Start ]")
  102. $(ENV_DOCKER) buildx build --network=host --push \
  103. -t $(ENV_APISIX_IMAGE_TAG_NAME)-centos \
  104. --platform linux/amd64,linux/arm64 \
  105. -f ./centos/Dockerfile centos
  106. @$(call func_echo_success_status, "$@ -> [ Done ]")
  107. ### push-multiarch-on-latest : Push apache/apisix:latest image
  108. .PHONY: push-multiarch-on-latest
  109. push-multiarch-on-latest:
  110. @$(call func_echo_status, "$@ -> [ Start ]")
  111. $(ENV_DOCKER) buildx build --network=host --push \
  112. -t $(IMAGE_NAME):latest \
  113. --platform linux/amd64,linux/arm64 \
  114. -f ./debian/Dockerfile debian
  115. @$(call func_echo_success_status, "$@ -> [ Done ]")
  116. ### build-on-alpine-cn : Build apache/apisix:xx-alpine image (for chinese)
  117. .PHONY: build-on-alpine-cn
  118. build-on-alpine-cn:
  119. @$(call func_echo_status, "$@ -> [ Start ]")
  120. $(ENV_DOCKER) build -t $(ENV_APISIX_IMAGE_TAG_NAME)-alpine --build-arg APISIX_VERSION=$(APISIX_VERSION) --build-arg ENABLE_PROXY=true -f alpine/Dockerfile alpine
  121. @$(call func_echo_success_status, "$@ -> [ Done ]")
  122. ### build-all-in-one : Build All in one Docker container for Apache APISIX
  123. .PHONY: build-all-in-one
  124. build-all-in-one:
  125. @$(call func_echo_status, "$@ -> [ Start ]")
  126. $(ENV_DOCKER) build -t $(IMAGE_NAME):whole -f ./all-in-one/apisix/Dockerfile .
  127. @$(call func_echo_success_status, "$@ -> [ Done ]")
  128. ### build-dashboard-all-in-one : Build All in one Docker container for Apache APISIX-dashboard
  129. .PHONY: build-dashboard-all-in-one
  130. build-dashboard-all-in-one:
  131. @$(call func_echo_status, "$@ -> [ Start ]")
  132. $(ENV_DOCKER) build -t $(APISIX_DASHBOARD_IMAGE_NAME):whole -f ./all-in-one/apisix-dashboard/Dockerfile .
  133. @$(call func_echo_success_status, "$@ -> [ Done ]")
  134. ### save-centos-tar : tar apache/apisix:xx-centos image
  135. .PHONY: save-centos-tar
  136. save-centos-tar:
  137. @$(call func_echo_status, "$@ -> [ Start ]")
  138. mkdir -p package
  139. $(ENV_DOCKER) save -o ./package/$(ENV_APISIX_TAR_NAME)-centos.tar $(ENV_APISIX_IMAGE_TAG_NAME)-centos
  140. @$(call func_echo_success_status, "$@ -> [ Done ]")
  141. ### save-alpine-tar : tar apache/apisix:xx-alpine image
  142. .PHONY: save-alpine-tar
  143. save-alpine-tar:
  144. @$(call func_echo_status, "$@ -> [ Start ]")
  145. mkdir -p package
  146. $(ENV_DOCKER) save -o ./package/$(ENV_APISIX_TAR_NAME)-alpine.tar $(ENV_APISIX_IMAGE_TAG_NAME)-alpine
  147. @$(call func_echo_success_status, "$@ -> [ Done ]")
  148. ### save-debian-tar : tar apache/apisix:xx-debian image
  149. .PHONY: save-debian-tar
  150. save-debian-tar:
  151. @$(call func_echo_status, "$@ -> [ Start ]")
  152. mkdir -p package
  153. $(ENV_DOCKER) save -o ./package/$(ENV_APISIX_TAR_NAME)-debian.tar $(ENV_APISIX_IMAGE_TAG_NAME)-debian
  154. @$(call func_echo_success_status, "$@ -> [ Done ]")
  155. ### build-dashboard-centos : Build apache/dashboard:tag image on centos
  156. .PHONY: build-dashboard-centos
  157. build-dashboard-centos:
  158. @$(call func_echo_status, "$@ -> [ Start ]")
  159. $(ENV_DOCKER) build -t $(APISIX_DASHBOARD_IMAGE_NAME):$(APISIX_DASHBOARD_VERSION) -f ./dashboard/Dockerfile.centos .
  160. @$(call func_echo_success_status, "$@ -> [ Done ]")
  161. ### build-dashboard-alpine : Build apache/dashboard:tag image on alpine
  162. .PHONY: build-dashboard-alpine
  163. build-dashboard-alpine:
  164. @$(call func_echo_status, "$@ -> [ Start ]")
  165. $(ENV_DOCKER) build -t $(APISIX_DASHBOARD_IMAGE_NAME):$(APISIX_DASHBOARD_VERSION) -f ./dashboard/Dockerfile.alpine .
  166. @$(call func_echo_success_status, "$@ -> [ Done ]")
  167. ### push-multiarch-dashboard : Build and push multiarch apache/dashboard:tag image
  168. .PHONY: push-multiarch-dashboard
  169. push-multiarch-dashboard:
  170. @$(call func_echo_status, "$@ -> [ Start ]")
  171. $(ENV_DOCKER) buildx build --push \
  172. -t $(APISIX_DASHBOARD_IMAGE_NAME):$(APISIX_DASHBOARD_VERSION)-alpine \
  173. --build-arg APISIX_DASHBOARD_VERSION=release/$(APISIX_DASHBOARD_VERSION) \
  174. --platform linux/amd64,linux/arm64 \
  175. -f ./dashboard/Dockerfile.alpine .
  176. $(ENV_DOCKER) buildx build --push \
  177. -t $(APISIX_DASHBOARD_IMAGE_NAME):$(APISIX_DASHBOARD_VERSION)-centos \
  178. --build-arg APISIX_DASHBOARD_VERSION=release/$(APISIX_DASHBOARD_VERSION) \
  179. --platform linux/amd64,linux/arm64 \
  180. -f ./dashboard/Dockerfile.centos .
  181. $(ENV_DOCKER) buildx build --push \
  182. -t $(APISIX_DASHBOARD_IMAGE_NAME):latest \
  183. --build-arg APISIX_DASHBOARD_VERSION=release/$(APISIX_DASHBOARD_VERSION) \
  184. --platform linux/amd64,linux/arm64 \
  185. -f ./dashboard/Dockerfile.centos .
  186. @$(call func_echo_success_status, "$@ -> [ Done ]")
  187. ### save-dashboard-centos-tar : tar apache/apisix-dashboard:tag image
  188. .PHONY: save-dashboard-centos-tar
  189. save-dashboard-centos-tar:
  190. @$(call func_echo_status, "$@ -> [ Start ]")
  191. mkdir -p package
  192. $(ENV_DOCKER) save -o ./package/$(APISIX_DASHBOARD_IMAGE_TAR_NAME)_$(APISIX_DASHBOARD_VERSION)-centos.tar $(APISIX_DASHBOARD_IMAGE_NAME):$(APISIX_DASHBOARD_VERSION)
  193. @$(call func_echo_success_status, "$@ -> [ Done ]")
  194. ### save-dashboard-alpine-tar : tar apache/apisix-dashboard:tag image
  195. .PHONY: save-dashboard-alpine-tar
  196. save-dashboard-alpine-tar:
  197. @$(call func_echo_status, "$@ -> [ Start ]")
  198. mkdir -p package
  199. $(ENV_DOCKER) save -o ./package/$(APISIX_DASHBOARD_IMAGE_TAR_NAME)_$(APISIX_DASHBOARD_VERSION)-alpine.tar $(APISIX_DASHBOARD_IMAGE_NAME):$(APISIX_DASHBOARD_VERSION)
  200. @$(call func_echo_success_status, "$@ -> [ Done ]")
  201. ### help : Show Makefile rules
  202. .PHONY: help
  203. help:
  204. @$(call func_echo_success_status, "Makefile rules:")
  205. @echo
  206. @if [ '$(ENV_OS_NAME)' = 'darwin' ]; then \
  207. awk '{ if(match($$0, /^#{3}([^:]+):(.*)$$/)){ split($$0, res, ":"); gsub(/^#{3}[ ]*/, "", res[1]); _desc=$$0; gsub(/^#{3}([^:]+):[ \t]*/, "", _desc); printf(" make %-25s : %-10s\n", res[1], _desc) } }' Makefile; \
  208. else \
  209. awk '{ if(match($$0, /^\s*#{3}\s*([^:]+)\s*:\s*(.*)$$/, res)){ printf(" make %-25s : %-10s\n", res[1], res[2]) } }' Makefile; \
  210. fi
  211. @echo