# Makefile for panel-web # Docker Registry REGISTRY_URL=registry.kxsw.us # Image names ADMIN_IMAGE_NAME=ppanel/ppanel-admin-web USER_IMAGE_NAME=ppanel/ppanel-user-web # Full image names with registry ADMIN_IMAGE=${REGISTRY_URL}/${ADMIN_IMAGE_NAME} USER_IMAGE=${REGISTRY_URL}/${USER_IMAGE_NAME} # Version from package.json. Requires jq to be installed. VERSION=$(shell jq -r .version package.json) .PHONY: all all: build ## Default target # ============================================================================== # Build Targets # ============================================================================== .PHONY: build build: build-admin build-user ## Build both admin and user docker images .PHONY: build-admin build-admin: ## Build the admin docker image @echo "Building admin image with tags ${ADMIN_IMAGE}:${VERSION} and ${ADMIN_IMAGE}:latest..." docker build -f ./docker/ppanel-admin-web/Dockerfile -t ${ADMIN_IMAGE}:${VERSION} -t ${ADMIN_IMAGE}:latest . @echo "Successfully built admin image." .PHONY: build-user build-user: ## Build the user docker image @echo "Building user image with tags ${USER_IMAGE}:${VERSION} and ${USER_IMAGE}:latest..." docker build -f ./docker/ppanel-user-web/Dockerfile -t ${USER_IMAGE}:${VERSION} -t ${USER_IMAGE}:latest . @echo "Successfully built user image." # ============================================================================== # Publish Targets # ============================================================================== .PHONY: push push: push-admin push-user ## Push both admin and user images to the registry .PHONY: push-admin push-admin: ## Push the admin image to the registry @echo "Pushing admin image ${ADMIN_IMAGE}:${VERSION} and ${ADMIN_IMAGE}:latest..." docker push ${ADMIN_IMAGE}:${VERSION} docker push ${ADMIN_IMAGE}:latest @echo "Successfully pushed admin image." .PHONY: push-user push-user: ## Push the user image to the registry @echo "Pushing user image ${USER_IMAGE}:${VERSION} and ${USER_IMAGE}:latest..." docker push ${USER_IMAGE}:${VERSION} docker push ${USER_IMAGE}:latest @echo "Successfully pushed user image." # ============================================================================== # Run Targets # ============================================================================== .PHONY: ensure-version ensure-version: @if [ -z "${VERSION}" ] || [ "${VERSION}" = "null" ]; then \ echo "ERROR: 未检测到版本号。请安装 jq 并在 panel-web/package.json 中设置有效的 version 字段。"; \ echo "提示:可以运行 'make version' 查看当前版本值。"; \ exit 1; \ fi # ============================================================================== # Other Targets # ============================================================================== .PHONY: login login: ## Login to the Docker registry docker login ${REGISTRY_URL} .PHONY: help help: ## Show this help message @echo "Usage: make [target]" @echo "" @echo "Targets:" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' .PHONY: version version: ## Print project version from package.json @echo "${VERSION}"