minecraft/Makefile
2024-05-28 03:55:52 -04:00

98 lines
2.8 KiB
Makefile

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