blob: fcf835dd996b2da067eabab57cac956842232bb5 [file] [log] [blame]
#
# 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 ?= 3.2.0
MAX_APISIX_VERSION ?= 3.2.0
IMAGE_NAME = apache/apisix
IMAGE_TAR_NAME = apache_apisix
APISIX_DASHBOARD_VERSION ?= $(shell echo ${APISIX_DASHBOARD_VERSION:=2.15.1})
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-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: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-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-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) \
--build-arg APISIX_DASHBOARD_TAG=v$(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) \
--build-arg APISIX_DASHBOARD_TAG=v$(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_TAG=v$(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_TAG=v$(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_TAG=v$(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