mirror of
https://github.com/itzg/docker-minecraft-server.git
synced 2026-02-17 15:13:55 +00:00
Compare commits
101 Commits
java16-ope
...
java11-ope
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3bb8378530 | ||
|
|
cbbc817279 | ||
|
|
18d8aba20f | ||
|
|
09834c289a | ||
|
|
880dca1ae5 | ||
|
|
65f5b26913 | ||
|
|
b1e33d4049 | ||
|
|
284c260886 | ||
|
|
05bbb45046 | ||
|
|
d11fe229df | ||
|
|
e516a7e512 | ||
|
|
68ace07c4a | ||
|
|
0eef6d5d41 | ||
|
|
b8a1b4f634 | ||
|
|
03472579b5 | ||
|
|
5dd008fed8 | ||
|
|
e50bbcd10f | ||
|
|
c6a7d11f60 | ||
|
|
28ce5118f3 | ||
|
|
f36a987f22 | ||
|
|
6729ba462e | ||
|
|
4b28d5e472 | ||
|
|
771951b38e | ||
|
|
9e8a924ac7 | ||
|
|
3f2022da40 | ||
|
|
0f7464403c | ||
|
|
b51813f026 | ||
|
|
ee738da7d7 | ||
|
|
0314d0eb09 | ||
|
|
0855f76512 | ||
|
|
e4733d1dca | ||
|
|
c5950bf7d2 | ||
|
|
ac1b8092e0 | ||
|
|
aa0dd571b4 | ||
|
|
6381b0aded | ||
|
|
b9a1434398 | ||
|
|
cf032f7d7e | ||
|
|
c5d032eeb7 | ||
|
|
2372cb93d3 | ||
|
|
375fb73586 | ||
|
|
e14311318c | ||
|
|
f3dd4f0123 | ||
|
|
102a3b54ba | ||
|
|
58de72c458 | ||
|
|
738bfd51d5 | ||
|
|
68662fd2ca | ||
|
|
6d80a9d123 | ||
|
|
765ac6072d | ||
|
|
d9962dff26 | ||
|
|
9f19edf137 | ||
|
|
b452514c36 | ||
|
|
4304c75595 | ||
|
|
fd01947aaa | ||
|
|
b890882e54 | ||
|
|
1764d0c0a4 | ||
|
|
5c79befd28 | ||
|
|
2b865723bf | ||
|
|
15840cef6c | ||
|
|
ea80b658dc | ||
|
|
75759ded24 | ||
|
|
0cbb0aa0b5 | ||
|
|
0122b74815 | ||
|
|
1b4f26d2e8 | ||
|
|
5bf6013d6b | ||
|
|
428a7c1875 | ||
|
|
3ba8889194 | ||
|
|
c144da4485 | ||
|
|
2a1f5b7500 | ||
|
|
1725a6ed14 | ||
|
|
8ab55e1ef3 | ||
|
|
32a5ab5138 | ||
|
|
fb97af317e | ||
|
|
fe758aab61 | ||
|
|
4c2868f6c9 | ||
|
|
919aff0080 | ||
|
|
8504cf7caf | ||
|
|
101a7486f2 | ||
|
|
80e576db2d | ||
|
|
3a73e47b83 | ||
|
|
62824051c8 | ||
|
|
c4a2403943 | ||
|
|
2aad0a9407 | ||
|
|
6ead8c3cf0 | ||
|
|
3a18a19583 | ||
|
|
f620b09134 | ||
|
|
2838251c67 | ||
|
|
f7cff34527 | ||
|
|
acdf8c35fa | ||
|
|
c5f2bf1059 | ||
|
|
1f25fae04f | ||
|
|
caffa2fd8d | ||
|
|
8de8eb3104 | ||
|
|
2d3fa3c09e | ||
|
|
f7b3c77f78 | ||
|
|
d968048ef5 | ||
|
|
6d26ca04be | ||
|
|
577eef3631 | ||
|
|
21d7fb476b | ||
|
|
4c3a329e31 | ||
|
|
6c94e49732 | ||
|
|
af77b29509 |
2
.github/workflows/build-multiarch.yml
vendored
2
.github/workflows/build-multiarch.yml
vendored
@@ -80,7 +80,7 @@ jobs:
|
|||||||
uses: docker/build-push-action@v2.7.0
|
uses: docker/build-push-action@v2.7.0
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
platforms: linux/amd64
|
||||||
push: true
|
push: true
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
# ensure latest base image is used
|
# ensure latest base image is used
|
||||||
|
|||||||
7
.github/workflows/discord.yml
vendored
7
.github/workflows/discord.yml
vendored
@@ -2,13 +2,12 @@ name: discord
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_run:
|
workflow_run:
|
||||||
workflows: ["ContinuousIntegration", "PullRequest", "Build and Publish", "Build and publish multiarch" ]
|
workflows: ["ContinuousIntegration", "Build and Publish", "Build and publish multiarch" ]
|
||||||
types:
|
types:
|
||||||
- completed
|
- completed
|
||||||
|
|
||||||
env:
|
env:
|
||||||
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
||||||
GITHUB_WORKFLOW_URL: https://github.com/${{ github.repository }}/actions/runs/${{ github.event.workflow_run.id }}
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
discord:
|
discord:
|
||||||
@@ -19,9 +18,9 @@ jobs:
|
|||||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||||
uses: Ilshidur/action-discord@master
|
uses: Ilshidur/action-discord@master
|
||||||
with:
|
with:
|
||||||
args: "Github repo: ${{ github.repository }}\n- Branch: ${{ github.ref }}\n- [Link: to Actions](<${{ env.GITHUB_WORKFLOW_URL }}>)\n- Status: 🎉 ${{ github.event.workflow_run.conclusion }} 🍏"
|
args: "Github repo: ${{ github.repository }}\n- Branch: ${{ github.event.workflow_run.head_branch }}\n- [Link: to Actions](<${{ github.event.workflow_run.html_url }}>)\n- Status: 🎉 ${{ github.event.workflow_run.conclusion }} 🍏"
|
||||||
- name: on-failure
|
- name: on-failure
|
||||||
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
|
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
|
||||||
uses: Ilshidur/action-discord@master
|
uses: Ilshidur/action-discord@master
|
||||||
with:
|
with:
|
||||||
args: "Github repo: ${{ github.repository }}\n- Branch: ${{ github.ref }}\n- [Link: to Actions](<${{ env.GITHUB_WORKFLOW_URL }}>)\n- Status: 🤔 ${{ github.event.workflow_run.conclusion }} 💣💥"
|
args: "Github repo: ${{ github.repository }}\n- Branch: ${{ github.event.workflow_run.head_branch }}\n- [Link: to Actions](<${{ github.event.workflow_run.html_url }}>)\n- Status: 🤔 ${{ github.event.workflow_run.conclusion }} 💣💥"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM eclipse-temurin:17-jdk
|
FROM adoptopenjdk:11-jdk-openj9
|
||||||
|
|
||||||
LABEL org.opencontainers.image.authors="Geoff Bourne <itzgeoff@gmail.com>"
|
LABEL org.opencontainers.image.authors="Geoff Bourne <itzgeoff@gmail.com>"
|
||||||
|
|
||||||
@@ -6,6 +6,7 @@ RUN apt-get update \
|
|||||||
&& DEBIAN_FRONTEND=noninteractive \
|
&& DEBIAN_FRONTEND=noninteractive \
|
||||||
apt-get install -y \
|
apt-get install -y \
|
||||||
imagemagick \
|
imagemagick \
|
||||||
|
file \
|
||||||
gosu \
|
gosu \
|
||||||
sudo \
|
sudo \
|
||||||
net-tools \
|
net-tools \
|
||||||
@@ -60,7 +61,7 @@ RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
|||||||
--var version=0.1.1 --var app=maven-metadata-release --file {{.app}} \
|
--var version=0.1.1 --var app=maven-metadata-release --file {{.app}} \
|
||||||
--from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
--from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||||
|
|
||||||
ARG MC_HELPER_VERSION=1.11.0
|
ARG MC_HELPER_VERSION=1.16.0
|
||||||
ARG MC_HELPER_BASE_URL=https://github.com/itzg/mc-image-helper/releases/download/v${MC_HELPER_VERSION}
|
ARG MC_HELPER_BASE_URL=https://github.com/itzg/mc-image-helper/releases/download/v${MC_HELPER_VERSION}
|
||||||
RUN curl -fsSL ${MC_HELPER_BASE_URL}/mc-image-helper-${MC_HELPER_VERSION}.tgz \
|
RUN curl -fsSL ${MC_HELPER_BASE_URL}/mc-image-helper-${MC_HELPER_VERSION}.tgz \
|
||||||
| tar -C /usr/share -zxf - \
|
| tar -C /usr/share -zxf - \
|
||||||
|
|||||||
20
README.md
20
README.md
@@ -141,7 +141,7 @@ By default, the container will download the latest version of the "vanilla" [Min
|
|||||||
* [Running on RaspberryPi](#running-on-raspberrypi)
|
* [Running on RaspberryPi](#running-on-raspberrypi)
|
||||||
* [Contributing](#contributing)
|
* [Contributing](#contributing)
|
||||||
|
|
||||||
<!-- Added by: runner, at: Thu Jan 20 23:09:53 UTC 2022 -->
|
<!-- Added by: runner, at: Mon Jan 24 04:19:37 UTC 2022 -->
|
||||||
|
|
||||||
<!--te-->
|
<!--te-->
|
||||||
|
|
||||||
@@ -292,7 +292,6 @@ When using the image `itzg:/minecraft-server` without a tag, the `latest` image
|
|||||||
| java8-openj9 | 8 | Debian | OpenJ9 | amd64 |
|
| java8-openj9 | 8 | Debian | OpenJ9 | amd64 |
|
||||||
| java11 | 11 | Debian | Hotspot | amd64,arm64,armv7 |
|
| java11 | 11 | Debian | Hotspot | amd64,arm64,armv7 |
|
||||||
| java11-openj9 | 11 | Debian | OpenJ9 | amd64 |
|
| java11-openj9 | 11 | Debian | OpenJ9 | amd64 |
|
||||||
| java16-openj9 | 16 | Debian | OpenJ9 | amd64 |
|
|
||||||
| java17 | 17 | Ubuntu | Hotspot | amd64,arm64,armv7 |
|
| java17 | 17 | Ubuntu | Hotspot | amd64,arm64,armv7 |
|
||||||
| java17-openj9 | 17 | Debian | OpenJ9 | amd64 |
|
| java17-openj9 | 17 | Debian | OpenJ9 | amd64 |
|
||||||
|
|
||||||
@@ -312,7 +311,7 @@ The following image tags have been deprecated and are no longer receiving update
|
|||||||
- adopt15
|
- adopt15
|
||||||
- openj9-nightly
|
- openj9-nightly
|
||||||
- multiarch-latest
|
- multiarch-latest
|
||||||
- java16
|
- java16/java16-openj9
|
||||||
|
|
||||||
## Healthcheck
|
## Healthcheck
|
||||||
|
|
||||||
@@ -482,10 +481,9 @@ An [Airplane](https://airplane.gg) server, which is "a stable, optimized, well s
|
|||||||
|
|
||||||
-e TYPE=AIRPLANE
|
-e TYPE=AIRPLANE
|
||||||
|
|
||||||
> NOTE: The `VERSION` variable is used to select an Airplane branch to download from. The available options are "LATEST" "1.17" and "PURPUR"
|
> NOTE: The `VERSION` variable is used to select an Airplane type to download. The available options are "LATEST" and "PURPUR", both 1.17.1. Airplane does not support 1.18 -- use Paper/Pufferfish/Purpur.
|
||||||
|
|
||||||
Extra variables:
|
Extra variables:
|
||||||
- `AIRPLANE_BUILD=lastSuccessfulBuild` : set a specific Airplane build to use
|
|
||||||
- `FORCE_REDOWNLOAD=false` : set to true to force the located server jar to be re-downloaded
|
- `FORCE_REDOWNLOAD=false` : set to true to force the located server jar to be re-downloaded
|
||||||
- `USE_FLARE_FLAGS=false` : set to true to add appropriate flags for the built-in [Flare](https://blog.airplane.gg/flare) profiler
|
- `USE_FLARE_FLAGS=false` : set to true to add appropriate flags for the built-in [Flare](https://blog.airplane.gg/flare) profiler
|
||||||
|
|
||||||
@@ -831,23 +829,19 @@ before unpacking new content from the MODPACK or MODS.
|
|||||||
|
|
||||||
### Downloadable world
|
### Downloadable world
|
||||||
|
|
||||||
Instead of mounting the `/data` volume, you can instead specify the URL of a ZIP file containing an archived world. It will be searched for a file `level.dat` and the containing subdirectory moved to the directory named by `$LEVEL`. This means that most of the archived Minecraft worlds downloadable from the Internet will already be in the correct format.
|
Instead of mounting the `/data` volume, you can instead specify the URL of a ZIP or compressed TAR file containing an archived world. It will be searched for a file `level.dat` and the containing subdirectory moved to the directory named by `$LEVEL`. This means that most of the archived Minecraft worlds downloadable from the Internet will already be in the correct format.
|
||||||
|
|
||||||
docker run -d -e WORLD=http://www.example.com/worlds/MySave.zip ...
|
docker run -d -e WORLD=http://www.example.com/worlds/MySave.zip ...
|
||||||
|
|
||||||
**NOTE:** This URL must be accessible from inside the container. Therefore,
|
**NOTE:** This URL must be accessible from inside the container. Therefore, you should use an IP address or a globally resolvable FQDN, or else the name of a linked container.
|
||||||
you should use an IP address or a globally resolvable FQDN, or else the
|
|
||||||
name of a linked container.
|
|
||||||
|
|
||||||
**NOTE:** If the archive contains more than one `level.dat`, then the one to select can be picked with `WORLD_INDEX`, which defaults to 1.
|
**NOTE:** If the archive contains more than one `level.dat`, then the one to select can be picked with `WORLD_INDEX`, which defaults to 1.
|
||||||
|
|
||||||
### Cloning world from a container path
|
### Cloning world from a container path
|
||||||
|
|
||||||
The `WORLD` option can also be used to reference a directory or zip file that will be used as a source to clone or unzip the world directory.
|
The `WORLD` option can also be used to reference a directory, zip file, or compressed tar file that will be used as a source to clone or extract the world directory.
|
||||||
|
|
||||||
For example, the following would initially clone the world's content
|
For example, the following would initially clone the world's content from `/worlds/basic`. Also notice in the example that you should use a read-only volume attachment to ensure the clone source remains pristine.
|
||||||
from `/worlds/basic`. Also notice in the example that you can use a
|
|
||||||
read-only volume attachment to ensure the clone source remains pristine.
|
|
||||||
|
|
||||||
```
|
```
|
||||||
docker run ... -v $HOME/worlds:/worlds:ro -e WORLD=/worlds/basic
|
docker run ... -v $HOME/worlds:/worlds:ro -e WORLD=/worlds/basic
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ branches_list=(
|
|||||||
'java8-openj9'
|
'java8-openj9'
|
||||||
'java11'
|
'java11'
|
||||||
'java11-openj9'
|
'java11-openj9'
|
||||||
'java16-openj9'
|
|
||||||
'java17'
|
'java17'
|
||||||
|
'java17-openj9'
|
||||||
)
|
)
|
||||||
|
|
||||||
function TrapExit {
|
function TrapExit {
|
||||||
|
|||||||
@@ -6,35 +6,33 @@ isDebugging && set -x
|
|||||||
|
|
||||||
IFS=$'\n\t'
|
IFS=$'\n\t'
|
||||||
|
|
||||||
if [ "${VERSION}" != "LATEST" ] && [ "${VERSION}" != "1.17" ] && [ "${VERSION}" != "PURPUR" ] ; then
|
if [ "${VERSION}" != "LATEST" ] && [ "${VERSION}" != "PURPUR" ] ; then
|
||||||
log "ERROR: Airplane server type only supports VERSION=LATEST, VERSION=1.17, VERSION=PURPUR. Note that these are branches, not #.#.# versions."
|
log "ERROR: Airplane server type only supports VERSION=LATEST, VERSION=PURPUR."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
: ${AIRPLANE_BUILD:=lastSuccessfulBuild}
|
|
||||||
: ${AIRPLANE_TYPE:=airplane}
|
: ${AIRPLANE_TYPE:=airplane}
|
||||||
|
|
||||||
if [ "${VERSION}" = "LATEST" ] || [ "${VERSION}" = "1.17" ]; then
|
if [ "${VERSION}" = "LATEST" ] ; then
|
||||||
AIRPLANE_BRANCH="1.17"
|
AIRPLANE_TYPE="airplane"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${VERSION}" = "PURPUR" ]; then
|
if [ "${VERSION}" = "PURPUR" ]; then
|
||||||
AIRPLANE_BRANCH="Purpur-1.17"
|
|
||||||
AIRPLANE_TYPE="airplanepurpur"
|
AIRPLANE_TYPE="airplanepurpur"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log "Using Airplane-${AIRPLANE_BRANCH} branch"
|
log "Using ${AIRPLANE_TYPE} 1.17.1 (1.18 unsupported - use Paper/Pufferfish/Purpur for newer versions)"
|
||||||
|
|
||||||
export SERVER=airplane-${AIRPLANE_BRANCH}-${AIRPLANE_BUILD}.jar
|
export SERVER=${AIRPLANE_TYPE}-1.17.1.jar
|
||||||
|
|
||||||
log "Removing old Airplane versions ..."
|
log "Removing old Airplane versions ..."
|
||||||
shopt -s nullglob
|
shopt -s nullglob
|
||||||
for f in airplane-*.jar; do
|
for f in airplane*.jar; do
|
||||||
[[ $f != $SERVER ]] && rm $f
|
[[ $f != $SERVER ]] && rm $f
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ ! -f "$SERVER" ] || isTrue "${FORCE_REDOWNLOAD:-false}"; then
|
if [ ! -f "$SERVER" ] || isTrue "${FORCE_REDOWNLOAD:-false}"; then
|
||||||
downloadUrl="https://ci.tivy.ca/job/Airplane-${AIRPLANE_BRANCH}/${AIRPLANE_BUILD}/artifact/launcher-${AIRPLANE_TYPE}.jar"
|
downloadUrl="https://airplane.gg/dl/launcher-${AIRPLANE_TYPE}1.17.1.jar"
|
||||||
log "Downloading Airplane from $downloadUrl ..."
|
log "Downloading Airplane from $downloadUrl ..."
|
||||||
if ! get -o "$SERVER" "$downloadUrl"; then
|
if ! get -o "$SERVER" "$downloadUrl"; then
|
||||||
log "ERROR: failed to download from $downloadUrl (status=$?)"
|
log "ERROR: failed to download from $downloadUrl (status=$?)"
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ fi
|
|||||||
# If packwiz url passed, bootstrap packwiz and update mods before other modpack processing
|
# If packwiz url passed, bootstrap packwiz and update mods before other modpack processing
|
||||||
if [[ "${PACKWIZ_URL}" ]]; then
|
if [[ "${PACKWIZ_URL}" ]]; then
|
||||||
# Ensure we have the latest packwiz bootstrap installer
|
# Ensure we have the latest packwiz bootstrap installer
|
||||||
latestPackwiz=$(curl -fsSL https://api.github.com/repos/comp500/packwiz-installer-bootstrap/releases/latest)
|
latestPackwiz=$(curl -fsSL https://api.github.com/repos/packwiz/packwiz-installer-bootstrap/releases/latest)
|
||||||
if [[ -z "${latestPackwiz}" ]]; then
|
if [[ -z "${latestPackwiz}" ]]; then
|
||||||
log "WARNING: Could not retrieve Packwiz bootstrap installer release information"
|
log "WARNING: Could not retrieve Packwiz bootstrap installer release information"
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
set -e
|
set -e
|
||||||
isDebugging && set -x
|
isDebugging && set -x
|
||||||
|
|
||||||
if [ $TYPE = "CURSEFORGE" ]; then
|
if [ "$TYPE" = "CURSEFORGE" ]; then
|
||||||
worldDest=$FTB_DIR/${LEVEL:-world}
|
worldDest=$FTB_DIR/${LEVEL:-world}
|
||||||
else
|
else
|
||||||
worldDest=/data/${LEVEL:-world}
|
worldDest=/data/${LEVEL:-world}
|
||||||
@@ -19,19 +19,23 @@ if [[ "$WORLD" ]] && ( isTrue "${FORCE_WORLD_COPY}" || [ ! -d "$worldDest" ] );
|
|||||||
"${worldDest}_the_end"
|
"${worldDest}_the_end"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if isURL $WORLD; then
|
if isURL "$WORLD"; then
|
||||||
curl -fsSL "$WORLD" -o /tmp/world.zip
|
log "Downloading world from $WORLD"
|
||||||
zipSrc=/tmp/world.zip
|
if ! get -o /tmp/world.bin "$WORLD"; then
|
||||||
elif [[ "$WORLD" =~ .*\.zip ]]; then
|
log "ERROR: failed to download world from $WORLD"
|
||||||
zipSrc="$WORLD"
|
exit 1
|
||||||
|
fi
|
||||||
|
WORLD=/tmp/world.bin
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$zipSrc" ]]; then
|
if [ -f "$WORLD" ]; then
|
||||||
log "Unzipping world"
|
log "Extracting world"
|
||||||
|
|
||||||
# Stage contents so that the correct subdirectory can be picked off
|
# Stage contents so that the correct subdirectory can be picked off
|
||||||
mkdir -p /tmp/world-data
|
mkdir -p /tmp/world-data
|
||||||
(cd /tmp/world-data && unzip -o -q "$zipSrc")
|
if ! extract "$WORLD" /tmp/world-data; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$FAMILY" = "SPIGOT" ]; then
|
if [ "$FAMILY" = "SPIGOT" ]; then
|
||||||
baseDirs=$(find /tmp/world-data -name "level.dat" -not -path "*_nether*" -not -path "*_the_end*" -exec dirname "{}" \;)
|
baseDirs=$(find /tmp/world-data -name "level.dat" -not -path "*_nether*" -not -path "*_the_end*" -exec dirname "{}" \;)
|
||||||
@@ -39,6 +43,11 @@ if [[ "$WORLD" ]] && ( isTrue "${FORCE_WORLD_COPY}" || [ ! -d "$worldDest" ] );
|
|||||||
baseDirs=$(find /tmp/world-data -name "level.dat" -exec dirname "{}" \;)
|
baseDirs=$(find /tmp/world-data -name "level.dat" -exec dirname "{}" \;)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ! [[ $baseDirs ]]; then
|
||||||
|
log "ERROR world content is not valid since level.dat could not be found"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
count=$(echo "$baseDirs" | wc -l)
|
count=$(echo "$baseDirs" | wc -l)
|
||||||
if [[ $count -gt 1 ]]; then
|
if [[ $count -gt 1 ]]; then
|
||||||
baseDir="$(echo "$baseDirs" | sed -n ${WORLD_INDEX:-1}p)"
|
baseDir="$(echo "$baseDirs" | sed -n ${WORLD_INDEX:-1}p)"
|
||||||
@@ -56,9 +65,12 @@ if [[ "$WORLD" ]] && ( isTrue "${FORCE_WORLD_COPY}" || [ ! -d "$worldDest" ] );
|
|||||||
[ -d "${baseDir}_nether" ] && rsync --remove-source-files --recursive --delete "${baseDir}_nether/" "${worldDest}_nether"
|
[ -d "${baseDir}_nether" ] && rsync --remove-source-files --recursive --delete "${baseDir}_nether/" "${worldDest}_nether"
|
||||||
[ -d "${baseDir}_the_end" ] && rsync --remove-source-files --recursive --delete "${baseDir}_the_end/" "${worldDest}_the_end"
|
[ -d "${baseDir}_the_end" ] && rsync --remove-source-files --recursive --delete "${baseDir}_the_end/" "${worldDest}_the_end"
|
||||||
fi
|
fi
|
||||||
else
|
elif [ -d "$WORLD" ]; then
|
||||||
log "Cloning world directory from $WORLD ..."
|
log "Cloning world directory from $WORLD ..."
|
||||||
rsync --recursive --delete "${WORLD%/}"/ "$worldDest"
|
rsync --recursive --delete "${WORLD%/}"/ "$worldDest"
|
||||||
|
else
|
||||||
|
log "ERROR: world file/directory $WORLD is missing"
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$FAMILY" = "SPIGOT" ]; then
|
if [ "$FAMILY" = "SPIGOT" ]; then
|
||||||
|
|||||||
@@ -188,4 +188,19 @@ function isType() {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
return 1
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function extract() {
|
||||||
|
src=${1?}
|
||||||
|
destDir=${2?}
|
||||||
|
|
||||||
|
type=$(file -b --mime-type "${src}")
|
||||||
|
if [[ $type == application/zip ]]; then
|
||||||
|
unzip -q -d "${destDir}" "${src}"
|
||||||
|
elif [[ $type == application/x-tar ]]; then
|
||||||
|
tar -C "${destDir}" -xf "${src}"
|
||||||
|
else
|
||||||
|
log "ERROR: unsupported archive type: $type"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
1
tests/.gitignore
vendored
Normal file
1
tests/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
data/
|
||||||
@@ -9,6 +9,4 @@ services:
|
|||||||
GENERIC_PACKS: https://github.com/itzg/mc-image-helper/releases/download/v1.9.5/mc-image-helper-1.9.5.zip,/packs/testing.zip
|
GENERIC_PACKS: https://github.com/itzg/mc-image-helper/releases/download/v1.9.5/mc-image-helper-1.9.5.zip,/packs/testing.zip
|
||||||
volumes:
|
volumes:
|
||||||
- ./packs:/packs
|
- ./packs:/packs
|
||||||
- data:/data
|
- ./data:/data
|
||||||
volumes:
|
|
||||||
data: {}
|
|
||||||
|
|||||||
1
tests/setuponlytests/generic-packs/verify.sh
Normal file
1
tests/setuponlytests/generic-packs/verify.sh
Normal file
@@ -0,0 +1 @@
|
|||||||
|
mc-image-helper assert fileExists one.txt mods/two.txt
|
||||||
@@ -1,43 +1,50 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
# go to script root directory
|
# go to script root directory
|
||||||
cd "$(dirname "$0")" || exit 1
|
cd "$(dirname "$0")" || exit 1
|
||||||
|
|
||||||
# compose down function for reuse
|
# tests that only run the setup files for things like downloads and configuration.
|
||||||
down() {
|
|
||||||
docker-compose down -v --remove-orphans
|
|
||||||
}
|
|
||||||
|
|
||||||
checkandExitOnFailure(){
|
|
||||||
failed=$1
|
|
||||||
# docker-compose logs outputs messages from the specified container
|
|
||||||
if $failed; then
|
|
||||||
docker-compose logs mc
|
|
||||||
down
|
|
||||||
cd ..
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# tests that only run the setup files for things like downloads and configuration.
|
|
||||||
setupOnlyMinecraftTest(){
|
setupOnlyMinecraftTest(){
|
||||||
folder=$1
|
folder=$1
|
||||||
cd "$folder"
|
cd "$folder"
|
||||||
failed=false
|
result=0
|
||||||
# run the monitor to validate the Minecraft image is healthy
|
|
||||||
docker-compose --log-level ERROR up --quiet-pull --exit-code-from mc 2>/dev/null || failed=true
|
if ! logs=$(docker compose run --quiet-pull mc 2>&1); then
|
||||||
echo "${folder} Result: failed=$failed"
|
echo "${folder} setup FAILED"
|
||||||
checkandExitOnFailure $failed
|
echo ":::::::::::: LOGS ::::::::::::::::
|
||||||
down
|
$logs
|
||||||
|
::::::::::::::::::::::::::::::::::
|
||||||
|
"
|
||||||
|
result=1
|
||||||
|
elif [ -f verify.sh ]; then
|
||||||
|
if ! docker run --rm --entrypoint bash -v "${PWD}/data":/data -v "${PWD}/verify.sh":/verify "${IMAGE_TO_TEST:-itzg/minecraft-server}" /verify; then
|
||||||
|
echo "${folder} verify FAILED"
|
||||||
|
result=1
|
||||||
|
else
|
||||||
|
echo "${folder} verify PASS"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "${folder} PASS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
docker compose down -v --remove-orphans
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
|
return $result
|
||||||
}
|
}
|
||||||
|
|
||||||
# go through each folder in setuponly and test setups
|
# go through each folder in setuponly and test setups
|
||||||
FOLDERS=$(ls)
|
if (( $# > 0 )); then
|
||||||
for folder in $FOLDERS; do
|
for folder in "$@"; do
|
||||||
# If folder is a directory
|
echo "Starting Tests in ${folder}"
|
||||||
if [ -d "$folder" ]; then
|
setupOnlyMinecraftTest "$folder"
|
||||||
echo "Starting Tests on ${folder}"
|
done
|
||||||
setupOnlyMinecraftTest $folder
|
else
|
||||||
fi
|
readarray -t folders < <(find . -maxdepth 2 -mindepth 2 -name docker-compose.yml -printf '%h\n')
|
||||||
done
|
for folder in "${folders[@]}"; do
|
||||||
|
echo "Starting Tests in ${folder}"
|
||||||
|
setupOnlyMinecraftTest "$folder"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|||||||
14
tests/setuponlytests/world_from_tgz/docker-compose.yml
Normal file
14
tests/setuponlytests/world_from_tgz/docker-compose.yml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
version: "3"
|
||||||
|
|
||||||
|
services:
|
||||||
|
mc:
|
||||||
|
restart: "no"
|
||||||
|
image: ${IMAGE_TO_TEST:-itzg/minecraft-server}
|
||||||
|
environment:
|
||||||
|
EULA: "TRUE"
|
||||||
|
SETUP_ONLY: "TRUE"
|
||||||
|
VERSION: ${MINECRAFT_VERSION:-LATEST}
|
||||||
|
WORLD: /worlds/world-for-testing.tgz
|
||||||
|
volumes:
|
||||||
|
- ./worlds:/worlds:ro
|
||||||
|
- ./data:/data
|
||||||
1
tests/setuponlytests/world_from_tgz/verify.sh
Normal file
1
tests/setuponlytests/world_from_tgz/verify.sh
Normal file
@@ -0,0 +1 @@
|
|||||||
|
mc-image-helper assert fileExists world/level.dat
|
||||||
BIN
tests/setuponlytests/world_from_tgz/worlds/world-for-testing.tgz
Normal file
BIN
tests/setuponlytests/world_from_tgz/worlds/world-for-testing.tgz
Normal file
Binary file not shown.
14
tests/setuponlytests/world_from_zip/docker-compose.yml
Normal file
14
tests/setuponlytests/world_from_zip/docker-compose.yml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
version: "3"
|
||||||
|
|
||||||
|
services:
|
||||||
|
mc:
|
||||||
|
restart: "no"
|
||||||
|
image: ${IMAGE_TO_TEST:-itzg/minecraft-server}
|
||||||
|
environment:
|
||||||
|
EULA: "TRUE"
|
||||||
|
SETUP_ONLY: "TRUE"
|
||||||
|
VERSION: ${MINECRAFT_VERSION:-LATEST}
|
||||||
|
WORLD: /worlds/world-for-testing.zip
|
||||||
|
volumes:
|
||||||
|
- ./worlds:/worlds:ro
|
||||||
|
- ./data:/data
|
||||||
1
tests/setuponlytests/world_from_zip/verify.sh
Normal file
1
tests/setuponlytests/world_from_zip/verify.sh
Normal file
@@ -0,0 +1 @@
|
|||||||
|
mc-image-helper assert fileExists world/level.dat
|
||||||
BIN
tests/setuponlytests/world_from_zip/worlds/world-for-testing.zip
Normal file
BIN
tests/setuponlytests/world_from_zip/worlds/world-for-testing.zip
Normal file
Binary file not shown.
@@ -1,18 +1,15 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
# go to script root directory
|
# go to script root directory
|
||||||
cd "$(dirname "$0")" || exit 1
|
cd "$(dirname "$0")" || exit 1
|
||||||
|
|
||||||
# go through top level folders and trigger the tests in the subfolders
|
# go through top level folders and trigger the tests in the subfolders
|
||||||
FOLDERS=$(ls)
|
readarray -t folders < <(find . -maxdepth 2 -mindepth 2 -name test.sh -printf '%h\n')
|
||||||
for folder in $FOLDERS; do
|
for folder in "${folders[@]}"; do
|
||||||
# If folder is a directory
|
cd "$folder"
|
||||||
if [ -d "$folder" ]; then
|
echo "Starting ${folder} Tests"
|
||||||
cd "$folder"
|
bash ./test.sh
|
||||||
if [ -f "./test.sh" ]; then
|
cd ..
|
||||||
echo "Starting ${folder} Tests"
|
|
||||||
sh ./test.sh
|
|
||||||
fi
|
|
||||||
cd ..
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|||||||
Reference in New Issue
Block a user