Yves-Marie Haussonne 67113e897a feat(docker): add support for additional files in Dockerfile
Explanatory body:
This commit extends the Dockerfile and related scripts to support the inclusion of additional files during image build. The Dockerfile now accepts an `ADDITIONAL_FILES` argument, which can be passed during the build process. These additional files are copied into the container at specified paths. The changes also include updates to the `docker-compose.yaml` file and related scripts to handle the new `ADDITIONAL_FILES` argument appropriately during composition and execution.
2024-10-10 18:45:58 +02:00

120 lines
3.5 KiB
Docker

#
FROM ghcr.io/minetest/minetest:latest as builder
ARG DEPENDENCIES
ARG ADDITIONAL_FILES=""
ARG MINETEST_ADD_CONF=""
ENV STOP_SERVER=true
ENV FAILFAST=false
ENV MINETEST_GAME_PATH=/usr/local/share/minetest/games
ENV SHOW_DEBUG=false
ENV CURRENT_MOD="test_harness"
ENV ADDITIONAL_MODS=""
USER root
RUN mkdir -p /usr/local/share/minetest/games && \
apk add --no-cache bash curl jq
# WORKDIR /config/.minetest/games/devtest/mods
RUN <<EOF
echo "DEPENDENCIES: $DEPENDENCIES"
while read dep; do
url=$(echo "$dep" | jq -r ".url")
dep_path=$(echo "$dep" | jq -r ".path")
strip=$(echo "$dep" | jq -r ".strip // 1")
echo "Download $url to $dep_path with strip=$strip"
mkdir -p "$dep_path" && curl -s -L "$url" | tar zxf - -C "$dep_path" --strip-components="$strip"
done < <(echo "$DEPENDENCIES" | jq -c '.[]')
EOF
RUN <<EOF
echo "ADDITIONAL_FILES"
while read file_def; do
content_type=$(echo "$file_def" | jq -r ".content|type")
if [ "$content_type" = "object" ]; then
content=$(echo "$file_def" | jq -r ".content")
else
content=$(echo "$file_def" | jq -c ".content")
fi
dep_path=$(echo "$file_def" | jq -r ".path")
if ! [ -z "$dep_path" ]; then
echo "Creating file $dep_path"
mkdir -p $(dirname "$dep_path")
echo "$content" > "$dep_path"
fi
done < <(echo "$ADDITIONAL_FILES" | jq -c '.[]')
EOF
COPY <<"EOF" /usr/local/sbin/run_minetest
#!/usr/bin/env bash
function clean_up {
# Perform program exit housekeeping
kill -9 $mtpid
if [ "$SHOW_DEBUG" == "true" ]; then
echo "---------------------------- DEBUG.TXT -------------------------"
test -f /var/lib/minetest/.minetest/debug.txt && cat /var/lib/minetest/.minetest/debug.txt
echo "---------------------------- DEBUG.TXT -------------------------"
fi
test -f /var/lib/minetest/.minetest/world/tests_ok || exit 1
exit 0
}
rm -f /etc/minetest/minetest.conf
cat /etc/minetest/minetest.conf.base - <<-EOT > /etc/minetest/minetest.conf
test_harness_mods=${CURRENT_MOD}${ADDITIONAL_MODS}
test_harness_stop_server=${STOP_SERVER}
test_harness_failfast=${FAILFAST}
EOT
/usr/local/bin/minetestserver --config /etc/minetest/minetest.conf --gameid minetest "$@" &
mtpid=$!
trap clean_up SIGHUP SIGINT SIGTERM
echo "SHOW_DEBUG: $SHOW_DEBUG"
wait $mtpid
if [ "$SHOW_DEBUG" == "true" ]; then
echo "---------------------------- DEBUG.TXT -------------------------"
test -f /var/lib/minetest/.minetest/debug.txt && cat /var/lib/minetest/.minetest/debug.txt
echo "---------------------------- DEBUG.TXT -------------------------"
fi
test -f /var/lib/minetest/.minetest/world/tests_ok || exit 1
exit 0
EOF
COPY <<-EOF /var/lib/minetest/.minetest/world/map_meta.txt
mg_name=singlenode
[end_of_params]
EOF
# Customize the test_harness_mods value to list the mods to test. Empty value means all, including the test harness itself
COPY <<-EOF /etc/minetest/minetest.conf.base
test_harness_run_tests=true
max_forceloaded_blocks=9999
name=admin
creative_mode=true
debug_log_level=verbose
show_debug=true
enable_console=true
static_spawnpoint=(0,0,0)
mg_name=flat
water_level=-2
mgflat_ground_level=-1
mg_flags=nocaves,nodungeons,nolight,nodecorations,nobiomes,noores
${MINETEST_ADD_CONF}
EOF
RUN chown -R minetest:minetest /var/lib/minetest/.minetest /usr/local/sbin/run_minetest && \
chmod 755 /usr/local/sbin/run_minetest && \
chown -R minetest:minetest /etc/minetest
USER minetest
ENTRYPOINT /usr/local/sbin/run_minetest
CMD []