FROM curlimages/curl:latest as dl_base

RUN mkdir -p minetest_game && curl -s -L https://github.com/minetest/minetest_game/archive/refs/heads/master.tar.gz | tar zxvf - -C minetest_game --strip-components=1 && \
    mkdir -p areas && curl -s -L https://github.com/minetest-mods/areas/archive/refs/heads/master.tar.gz | tar zxvf - -C areas --strip-components=1 && \
    mkdir -p worldedit && curl -s -L https://github.com/Uberi/Minetest-WorldEdit/archive/refs/tags/1.3.tar.gz | tar zxvf - -C worldedit --strip-components=1 && \
    mkdir -p test_harness && curl -s -L https://forge.apps.education.fr/iri/minetest/docker-test-harness/-/archive/main/docker-test-harness-main.tar.gz | tar zxvf - -C test_harness --strip-components=1

FROM ghcr.io/minetest/minetest:latest as builder

ENV STOP_SERVER=true
ENV FAILFAST=false
ENV MINETEST_GAME_PATH=/usr/local/share/minetest/games
ENV SHOW_DEBUG=false


USER root

RUN mkdir -p /usr/local/share/minetest/games && \
    apk add --no-cache bash

# WORKDIR /config/.minetest/games/devtest/mods

COPY --from=dl_base /home/curl_user/minetest_game /usr/local/share/minetest/games/minetest
COPY --from=dl_base /home/curl_user/areas /usr/local/share/minetest/games/minetest/mods/areas
COPY --from=dl_base /home/curl_user/worldedit /usr/local/share/minetest/games/minetest/mods/worldedit
COPY --from=dl_base /home/curl_user/test_harness /usr/local/share/minetest/games/minetest/mods/test_harness


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_stop_server=${STOP_SERVER}
    test_harness_failfast=${FAILFAST}
EOT
echo "SHOW_DEBUG: $SHOW_DEBUG - STOP_SERVER: $STOP_SERVER - FAILFAST: $FAILFAST"

/usr/local/bin/minetestserver --config /etc/minetest/minetest.conf --gameid minetest "$@" &
mtpid=$!

trap clean_up SIGHUP SIGINT SIGTERM
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

COPY <<-EOF /etc/minetest/minetest.conf.base
    test_harness_run_tests=true
    test_harness_mods=worldedit_bigschems
    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
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 []
