DOCKER_BUILDKIT ?= 1 BUILDKIT_PROGRESS ?= auto BUILD ?= basic DOCKER_COMPOSE_OPTS = BUILDX_GIT_LABELS=full \ DOCKER_BUILDKIT=$(DOCKER_BUILDKIT) \ BUILDKIT_PROGRESS=$(BUILDKIT_PROGRESS) DOCKER_COMPOSE_BUILD = $(DOCKER_COMPOSE_OPTS) docker compose -f docker-compose.build.yml build DOCKER_COMPOSE_UP = docker compose up -d PRUNE_IMAGES = \ localhost/minecraft:latest \ localhost/minecraft:latest-paper \ localhost/minecraft:latest-spigot \ localhost/minecraft:latest-craftbukkit \ localhost/minecraft-jre:latest \ localhost/minecraft-jdk:latest \ localhost/velocity:latest .PHONY: all clean configure craftbukkit default install jdk jre spigot vanilla default: vanilla all: vanilla paper spigot craftbukkit velocity jre: $(DOCKER_COMPOSE_BUILD) minecraft-jre jdk: $(DOCKER_COMPOSE_BUILD) minecraft-jdk vanilla: jre $(DOCKER_COMPOSE_BUILD) minecraft-vanilla paper: jre $(DOCKER_COMPOSE_BUILD) minecraft-paper spigot: jre jdk $(DOCKER_COMPOSE_BUILD) minecraft-spigot craftbukkit: jre jdk $(DOCKER_COMPOSE_BUILD) minecraft-craftbukkit velocity: jre $(DOCKER_COMPOSE_BUILD) minecraft-velocity install: $(DOCKER_COMPOSE_UP) # Macro to copy files if they don't already exist or are the same define copy_build_files set -eu; \ BUILD=$(1) && \ FILE=$(2) && \ DIRECTORY=$(if $(3),$(3),builds) && \ SRC_FILE="./$${DIRECTORY}/$${BUILD}/$${FILE}" && \ DEST_FILE="./$${FILE}" && \ TEMP_DEST_FILE="$$(mktemp)" && \ if [ -f "$${SRC_FILE}" ]; then \ if [ -f "$${DEST_FILE}" ]; then \ cp "$${DEST_FILE}" "$${TEMP_DEST_FILE}"; \ if [ "$${FILE}" = ".env" ] && grep -q 'EULA=false' "$${SRC_FILE}"; then \ sed -i 's/EULA=true/EULA=false/' "$${TEMP_DEST_FILE}"; \ fi; \ if cmp -s "$${SRC_FILE}" "$${TEMP_DEST_FILE}"; then \ echo "INFO: \"$${DEST_FILE}\" is up to date."; \ rm "$${TEMP_DEST_FILE}"; \ else \ echo "ERROR: \"$${DEST_FILE}\" is different from \"$${SRC_FILE}\""; \ diff -u "$${DEST_FILE}" "$${SRC_FILE}"; \ rm "$${TEMP_DEST_FILE}"; \ exit 1; \ fi; \ else \ cp "$${SRC_FILE}" "$${DEST_FILE}"; \ echo "INFO: \"$${SRC_FILE}\" copied to \"$${DEST_FILE}\""; \ fi; \ else \ echo "WARN: Source file \"$${SRC_FILE}\" does not exist."; \ fi endef configure: @if [ -d "./builds/$(BUILD)" ]; then \ echo "INFO: Configuring build $(BUILD) (./builds/$(BUILD))" && \ $(call copy_build_files,$(BUILD),.env); \ $(call copy_build_files,$(BUILD),plugins.json); \ elif [ -d "./scratch/$(BUILD)" ]; then \ echo "INFO: Configuring build $(BUILD) (./scratch/$(BUILD))" && \ $(call copy_build_files,$(BUILD),.env,scratch); \ $(call copy_build_files,$(BUILD),plugins.json,scratch); \ else \ echo "ERROR: Build directory for \"$(BUILD)\" not found"; \ exit 1; \ fi clean: docker image rm $(PRUNE_IMAGES) || true docker builder prune -f