refactor: modular init, add bedrock loader, dynamic java/healthcheck
Build dev image / build (push) Failing after 18m12s

- Split monolithic init into modular lib files under scripts/lib/
  (common.sh, java.sh, server.sh, loaders/{vanilla,paper,fabric,forge,neoforge}.sh)
- Add bedrock loader: downloads from Minecraft Services API,
  runs native binary with LD_LIBRARY_PATH, skips Java setup
- Add auto-detection for JAVA_VERSION from Mojang version manifest
  (MC 1.20.5+ -> temurin@21, 1.17-1.20.4 -> temurin@17,
   1.17 -> temurin@16, pre-1.17 -> temurin@8)
- Fix NEW_FORGE unbound variable when non-Forge loaders run
- Fix Fabric loader jq filter (-s slurp removed, null string check fixed)
- Fix Forge test detection (recursive find for forge-*-server.jar)
- Dynamic healthcheck: nc -z TCP 25565 for Java, nc -zu UDP 19132 for bedrock
- Add .gitea/workflows/build-dev.yml for dev branch CI builds
- Base image: debian:bookworm-slim (from ubuntu:noble)
- Add unzip, netcat-openbsd to Docker image
- Switch to shebangs, set -euo pipefail throughout
This commit is contained in:
2026-06-17 18:41:26 -04:00
parent 2d46f91c60
commit 6e13a0aa15
15 changed files with 726 additions and 328 deletions
+12 -9
View File
@@ -1,4 +1,4 @@
FROM ubuntu:noble
FROM debian:bookworm-slim
ARG UID=1000
ARG GID=1000
@@ -7,7 +7,6 @@ ENV DEBIAN_FRONTEND=noninteractive
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
# install prerequisites
RUN apt-get update && \
apt-get install -y --no-install-recommends \
curl \
@@ -15,23 +14,27 @@ RUN apt-get update && \
jq \
libxml2-utils \
sudo \
tini && \
tini \
unzip \
netcat-openbsd && \
apt-get autoremove && apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Remove default ubuntu user
RUN userdel -r ubuntu && \
useradd --create-home -u 1000 minecraft && \
RUN groupadd -g ${GID} minecraft && \
useradd --create-home -u ${UID} -g ${GID} minecraft && \
echo 'minecraft ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers && \
mkdir -p /data && \
chown -R ${UID}:${GID} /data
RUN su -c "curl -sL https://github.com/Jabba-Team/jabba/raw/main/install.sh | bash && . ~/.jabba/jabba.sh" minecraft
COPY ./scripts/init /
RUN chmod +x /init
COPY ./scripts/ /scripts/
RUN chmod +x /scripts/init
USER minecraft
ENTRYPOINT ["tini", "--", "/init"]
HEALTHCHECK --start-period=2m --interval=30s --timeout=10s --retries=3 \
CMD bash -c 'if [ "${MC_LOADER}" = "bedrock" ]; then nc -zu 127.0.0.1 19132; else nc -z 127.0.0.1 25565; fi'
ENTRYPOINT ["tini", "--", "/scripts/init"]