# # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You 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. # # Makefile basic env setting .DEFAULT_GOAL := help SHELL := bash # APISIX ARGS APISIX_VERSION ?= 2.15.1 MAX_APISIX_VERSION ?= 3.0.0 IMAGE_NAME = apache/apisix IMAGE_TAR_NAME = apache_apisix APISIX_DASHBOARD_VERSION ?= 2.13 APISIX_DASHBOARD_IMAGE_NAME = apache/apisix-dashboard APISIX_DASHBOARD_IMAGE_TAR_NAME = apache_apisix_dashboard # Makefile ENV ENV_OS_NAME ?= $(shell uname -s | tr '[:upper:]' '[:lower:]') ENV_APISIX_TAR_NAME ?= $(IMAGE_TAR_NAME)_$(APISIX_VERSION) ENV_APISIX_IMAGE_TAG_NAME ?= $(IMAGE_NAME):$(APISIX_VERSION) ENV_DOCKER ?= docker # Makefile basic extension function _color_red =\E[1;31m _color_green =\E[1;32m _color_yellow =\E[1;33m _color_blue =\E[1;34m _color_wipe =\E[0m define func_echo_status printf "[$(_color_blue) info $(_color_wipe)] %s\n" $(1) endef define func_echo_warn_status printf "[$(_color_yellow) info $(_color_wipe)] %s\n" $(1) endef define func_echo_success_status printf "[$(_color_green) info $(_color_wipe)] %s\n" $(1) endef # Makefile target ### build-on-centos : Build apache/apisix:xx-centos image .PHONY: build-on-centos build-on-centos: @$(call func_echo_status, "$@ -> [ Start ]") $(ENV_DOCKER) build -t $(ENV_APISIX_IMAGE_TAG_NAME)-centos -f ./centos/Dockerfile centos @$(call func_echo_success_status, "$@ -> [ Done ]") ### build-on-alpine : Build apache/apisix:xx-alpine image .PHONY: build-on-alpine build-on-alpine: @$(call func_echo_status, "$@ -> [ Start ]") $(ENV_DOCKER) build -t $(ENV_APISIX_IMAGE_TAG_NAME)-alpine -f ./alpine/Dockerfile . @$(call func_echo_success_status, "$@ -> [ Done ]") ### build-on-debian-dev : Build apache/apisix:xx-debian-dev image .PHONY: build-on-debian-dev build-on-debian-dev: @$(call func_echo_status, "$@ -> [ Start ]") $(ENV_DOCKER) build -t $(ENV_APISIX_IMAGE_TAG_NAME)-debian-dev -f ./debian-dev/Dockerfile debian-dev @$(call func_echo_success_status, "$@ -> [ Done ]") ### build-on-debian : Build apache/apisix:xx-debian image .PHONY: build-on-debian build-on-debian: @$(call func_echo_status, "$@ -> [ Start ]") $(ENV_DOCKER) build -t $(ENV_APISIX_IMAGE_TAG_NAME)-debian -f ./debian/Dockerfile debian @$(call func_echo_success_status, "$@ -> [ Done ]") ### push-on-alpine : Push apache/apisix:xx-alpine image .PHONY: push-multiarch-on-alpine push-multiarch-on-alpine: @$(call func_echo_status, "$@ -> [ Start ]") $(ENV_DOCKER) buildx build --push \ -t $(ENV_APISIX_IMAGE_TAG_NAME)-alpine \ --platform linux/amd64,linux/arm64 \ -f ./alpine/Dockerfile . @$(call func_echo_success_status, "$@ -> [ Done ]") ### push-on-alpine : Push apache/apisix:dev image .PHONY: push-multiarch-dev-on-debian push-multiarch-dev-on-debian: @$(call func_echo_status, "$@ -> [ Start ]") $(ENV_DOCKER) buildx build --network=host --push \ -t $(IMAGE_NAME):dev \ --platform linux/amd64,linux/arm64 \ -f ./debian-dev/Dockerfile debian-dev @$(call func_echo_success_status, "$@ -> [ Done ]") ### push-multiarch-on-debian : Push apache/apisix:xx-debian image .PHONY: push-multiarch-on-debian push-multiarch-on-debian: @$(call func_echo_status, "$@ -> [ Start ]") $(ENV_DOCKER) buildx build --network=host --push \ -t $(ENV_APISIX_IMAGE_TAG_NAME)-debian \ --platform linux/amd64,linux/arm64 \ -f ./debian/Dockerfile debian @$(call func_echo_success_status, "$@ -> [ Done ]") ### push-multiarch-on-centos : Push apache/apisix:xx-centos image .PHONY: push-multiarch-on-centos push-multiarch-on-centos: @$(call func_echo_status, "$@ -> [ Start ]") $(ENV_DOCKER) buildx build --network=host --push \ -t $(ENV_APISIX_IMAGE_TAG_NAME)-centos \ --platform linux/amd64,linux/arm64 \ -f ./centos/Dockerfile centos @$(call func_echo_success_status, "$@ -> [ Done ]") ### push-multiarch-on-latest : Push apache/apisix:latest image .PHONY: push-multiarch-on-latest # Here we choose to check the max APISIX version instead of the patch version, so that # we can release a patch version for a non-LTS version. For example, release a version # to solve security issue. push-multiarch-on-latest: @$(call func_echo_status, "$@ -> [ Start ]") @if [ "$(shell echo "$(APISIX_VERSION) $(MAX_APISIX_VERSION)" | tr " " "\n" | sort -rV | head -n 1)" == "$(APISIX_VERSION)" ]; then \ $(ENV_DOCKER) buildx build --network=host --push \ -t $(IMAGE_NAME):latest \ --platform linux/amd64,linux/arm64 \ -f ./debian/Dockerfile debian; \ fi @$(call func_echo_success_status, "$@ -> [ Done ]") ### build-on-alpine-cn : Build apache/apisix:xx-alpine image (for chinese) .PHONY: build-on-alpine-cn build-on-alpine-cn: @$(call func_echo_status, "$@ -> [ Start ]") $(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 @$(call func_echo_success_status, "$@ -> [ Done ]") ### build-all-in-one : Build All in one Docker container for Apache APISIX .PHONY: build-all-in-one build-all-in-one: @$(call func_echo_status, "$@ -> [ Start ]") $(ENV_DOCKER) build -t $(IMAGE_NAME):whole -f ./all-in-one/apisix/Dockerfile . @$(call func_echo_success_status, "$@ -> [ Done ]") ### build-dashboard-all-in-one : Build All in one Docker container for Apache APISIX-dashboard .PHONY: build-dashboard-all-in-one build-dashboard-all-in-one: @$(call func_echo_status, "$@ -> [ Start ]") $(ENV_DOCKER) build -t $(APISIX_DASHBOARD_IMAGE_NAME):whole -f ./all-in-one/apisix-dashboard/Dockerfile . @$(call func_echo_success_status, "$@ -> [ Done ]") ### save-centos-tar : tar apache/apisix:xx-centos image .PHONY: save-centos-tar save-centos-tar: @$(call func_echo_status, "$@ -> [ Start ]") mkdir -p package $(ENV_DOCKER) save -o ./package/$(ENV_APISIX_TAR_NAME)-centos.tar $(ENV_APISIX_IMAGE_TAG_NAME)-centos @$(call func_echo_success_status, "$@ -> [ Done ]") ### save-alpine-tar : tar apache/apisix:xx-alpine image .PHONY: save-alpine-tar save-alpine-tar: @$(call func_echo_status, "$@ -> [ Start ]") mkdir -p package $(ENV_DOCKER) save -o ./package/$(ENV_APISIX_TAR_NAME)-alpine.tar $(ENV_APISIX_IMAGE_TAG_NAME)-alpine @$(call func_echo_success_status, "$@ -> [ Done ]") ### save-debian-tar : tar apache/apisix:xx-debian image .PHONY: save-debian-tar save-debian-tar: @$(call func_echo_status, "$@ -> [ Start ]") mkdir -p package $(ENV_DOCKER) save -o ./package/$(ENV_APISIX_TAR_NAME)-debian.tar $(ENV_APISIX_IMAGE_TAG_NAME)-debian @$(call func_echo_success_status, "$@ -> [ Done ]") ### build-dashboard-centos : Build apache/dashboard:tag image on centos .PHONY: build-dashboard-centos build-dashboard-centos: @$(call func_echo_status, "$@ -> [ Start ]") $(ENV_DOCKER) build -t $(APISIX_DASHBOARD_IMAGE_NAME):$(APISIX_DASHBOARD_VERSION) -f ./dashboard/Dockerfile.centos . @$(call func_echo_success_status, "$@ -> [ Done ]") ### build-dashboard-alpine : Build apache/dashboard:tag image on alpine .PHONY: build-dashboard-alpine build-dashboard-alpine: @$(call func_echo_status, "$@ -> [ Start ]") $(ENV_DOCKER) build -t $(APISIX_DASHBOARD_IMAGE_NAME):$(APISIX_DASHBOARD_VERSION) -f ./dashboard/Dockerfile.alpine . @$(call func_echo_success_status, "$@ -> [ Done ]") ### push-multiarch-dashboard : Build and push multiarch apache/dashboard:tag image .PHONY: push-multiarch-dashboard push-multiarch-dashboard: @$(call func_echo_status, "$@ -> [ Start ]") $(ENV_DOCKER) buildx build --push \ -t $(APISIX_DASHBOARD_IMAGE_NAME):$(APISIX_DASHBOARD_VERSION)-alpine \ --build-arg APISIX_DASHBOARD_VERSION=release/$(APISIX_DASHBOARD_VERSION) \ --platform linux/amd64,linux/arm64 \ -f ./dashboard/Dockerfile.alpine . $(ENV_DOCKER) buildx build --push \ -t $(APISIX_DASHBOARD_IMAGE_NAME):$(APISIX_DASHBOARD_VERSION)-centos \ --build-arg APISIX_DASHBOARD_VERSION=release/$(APISIX_DASHBOARD_VERSION) \ --platform linux/amd64,linux/arm64 \ -f ./dashboard/Dockerfile.centos . $(ENV_DOCKER) buildx build --push \ -t $(APISIX_DASHBOARD_IMAGE_NAME):latest \ --build-arg APISIX_DASHBOARD_VERSION=release/$(APISIX_DASHBOARD_VERSION) \ --platform linux/amd64,linux/arm64 \ -f ./dashboard/Dockerfile.centos . @$(call func_echo_success_status, "$@ -> [ Done ]") ### save-dashboard-centos-tar : tar apache/apisix-dashboard:tag image .PHONY: save-dashboard-centos-tar save-dashboard-centos-tar: @$(call func_echo_status, "$@ -> [ Start ]") mkdir -p package $(ENV_DOCKER) save -o ./package/$(APISIX_DASHBOARD_IMAGE_TAR_NAME)_$(APISIX_DASHBOARD_VERSION)-centos.tar $(APISIX_DASHBOARD_IMAGE_NAME):$(APISIX_DASHBOARD_VERSION) @$(call func_echo_success_status, "$@ -> [ Done ]") ### save-dashboard-alpine-tar : tar apache/apisix-dashboard:tag image .PHONY: save-dashboard-alpine-tar save-dashboard-alpine-tar: @$(call func_echo_status, "$@ -> [ Start ]") mkdir -p package $(ENV_DOCKER) save -o ./package/$(APISIX_DASHBOARD_IMAGE_TAR_NAME)_$(APISIX_DASHBOARD_VERSION)-alpine.tar $(APISIX_DASHBOARD_IMAGE_NAME):$(APISIX_DASHBOARD_VERSION) @$(call func_echo_success_status, "$@ -> [ Done ]") ### help : Show Makefile rules .PHONY: help help: @$(call func_echo_success_status, "Makefile rules:") @echo @if [ '$(ENV_OS_NAME)' = 'darwin' ]; then \ 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; \ else \ awk '{ if(match($$0, /^\s*#{3}\s*([^:]+)\s*:\s*(.*)$$/, res)){ printf(" make %-25s : %-10s\n", res[1], res[2]) } }' Makefile; \ fi @echo