mirror of
https://github.com/itzg/docker-minecraft-server.git
synced 2026-02-17 15:13:55 +00:00
Compare commits
127 Commits
java16-ope
...
java8-open
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bf1b27744c | ||
|
|
cbbc817279 | ||
|
|
18d8aba20f | ||
|
|
09834c289a | ||
|
|
880dca1ae5 | ||
|
|
10a6ae1046 | ||
|
|
b1e33d4049 | ||
|
|
284c260886 | ||
|
|
05bbb45046 | ||
|
|
d11fe229df | ||
|
|
f8458b365c | ||
|
|
954d8c6927 | ||
|
|
0563ea5612 | ||
|
|
a78e9a1780 | ||
|
|
df1dac4b3a | ||
|
|
4f149f8f40 | ||
|
|
88e5b7e135 | ||
|
|
86190eafc7 | ||
|
|
6729ba462e | ||
|
|
4b28d5e472 | ||
|
|
7983a4a3a2 | ||
|
|
52ac180c77 | ||
|
|
3f2022da40 | ||
|
|
0f7464403c | ||
|
|
32195e71c5 | ||
|
|
a0a578f452 | ||
|
|
ca0ddc80aa | ||
|
|
1a625f09bb | ||
|
|
9ab345a727 | ||
|
|
4e3031cff8 | ||
|
|
466e1728f6 | ||
|
|
8dddbc4120 | ||
|
|
53e9d36a05 | ||
|
|
275c2d0c54 | ||
|
|
cf9c40f331 | ||
|
|
491ffe49bf | ||
|
|
d4a9b367c7 | ||
|
|
032d94a30f | ||
|
|
3784d2df54 | ||
|
|
8a36823843 | ||
|
|
78c520572a | ||
|
|
5303105265 | ||
|
|
1f120c5fa4 | ||
|
|
70ec3b838d | ||
|
|
b248ed342f | ||
|
|
4c70184804 | ||
|
|
b9ba062add | ||
|
|
cbb1d0ea52 | ||
|
|
bbad3a3e7a | ||
|
|
8965397a5a | ||
|
|
c661fe7318 | ||
|
|
bae1feb750 | ||
|
|
edbcf80a70 | ||
|
|
fb23e12680 | ||
|
|
e30a2e6448 | ||
|
|
03d7babd68 | ||
|
|
332b929a6d | ||
|
|
c138cabc65 | ||
|
|
41631e35e8 | ||
|
|
6f95fa6175 | ||
|
|
6f16da8309 | ||
|
|
8cee8d5618 | ||
|
|
8b76b5776a | ||
|
|
e3af06d2e4 | ||
|
|
0ac583514c | ||
|
|
bf3f15f5fb | ||
|
|
4aec2322b5 | ||
|
|
51b2eb6851 | ||
|
|
846050f41a | ||
|
|
485ec6a141 | ||
|
|
0096e41882 | ||
|
|
d45610723a | ||
|
|
072704b54d | ||
|
|
0f08e88c5b | ||
|
|
89604c8d13 | ||
|
|
58842d444b | ||
|
|
457d09e14d | ||
|
|
7210e81f47 | ||
|
|
ba86534e6e | ||
|
|
44bafbff09 | ||
|
|
75c51bf0c7 | ||
|
|
cf651f2279 | ||
|
|
6d0d7fe19c | ||
|
|
bb58d7a4c9 | ||
|
|
6efaac2861 | ||
|
|
806342d74b | ||
|
|
926e302595 | ||
|
|
10e85140ad | ||
|
|
fc2ed9e612 | ||
|
|
edfe58079a | ||
|
|
d423cc3b8d | ||
|
|
1537e48e29 | ||
|
|
62473771dc | ||
|
|
c4528e8f79 | ||
|
|
0f797487ab | ||
|
|
9511e3cc80 | ||
|
|
3aa4dd6c85 | ||
|
|
27571999b2 | ||
|
|
bbd7d9e39a | ||
|
|
ef6f308229 | ||
|
|
49d89d3e73 | ||
|
|
74203b23f4 | ||
|
|
4fb791b490 | ||
|
|
ced25ad50a | ||
|
|
48efc224ba | ||
|
|
467c1d9954 | ||
|
|
9ced230f55 | ||
|
|
f3a8276362 | ||
|
|
b91d63716e | ||
|
|
46cccfd531 | ||
|
|
9fe1cb4a0d | ||
|
|
076038b470 | ||
|
|
aa416729ea | ||
|
|
812c6365ec | ||
|
|
42a5131b19 | ||
|
|
624f6a210f | ||
|
|
1c63cd18b7 | ||
|
|
6266a7e3cc | ||
|
|
871ecd4d9d | ||
|
|
c572c95161 | ||
|
|
f7b58fbbb1 | ||
|
|
eccfa444a9 | ||
|
|
e831d25706 | ||
|
|
12e931332b | ||
|
|
ceee9eddc9 | ||
|
|
60ba668743 | ||
|
|
fd1b15e01f |
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
|
||||
with:
|
||||
context: .
|
||||
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
||||
platforms: linux/amd64
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
# 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:
|
||||
workflow_run:
|
||||
workflows: ["ContinuousIntegration", "PullRequest", "Build and Publish", "Build and publish multiarch" ]
|
||||
workflows: ["ContinuousIntegration", "Build and Publish", "Build and publish multiarch" ]
|
||||
types:
|
||||
- completed
|
||||
|
||||
env:
|
||||
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
||||
GITHUB_WORKFLOW_URL: https://github.com/${{ github.repository }}/actions/runs/${{ github.event.workflow_run.id }}
|
||||
|
||||
jobs:
|
||||
discord:
|
||||
@@ -19,9 +18,9 @@ jobs:
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||
uses: Ilshidur/action-discord@master
|
||||
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
|
||||
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
|
||||
uses: Ilshidur/action-discord@master
|
||||
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:8-jdk-openj9
|
||||
|
||||
LABEL org.opencontainers.image.authors="Geoff Bourne <itzgeoff@gmail.com>"
|
||||
|
||||
@@ -6,6 +6,7 @@ RUN apt-get update \
|
||||
&& DEBIAN_FRONTEND=noninteractive \
|
||||
apt-get install -y \
|
||||
imagemagick \
|
||||
file \
|
||||
gosu \
|
||||
sudo \
|
||||
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}} \
|
||||
--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}
|
||||
RUN curl -fsSL ${MC_HELPER_BASE_URL}/mc-image-helper-${MC_HELPER_VERSION}.tgz \
|
||||
| tar -C /usr/share -zxf - \
|
||||
|
||||
22
README.md
22
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)
|
||||
* [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-->
|
||||
|
||||
@@ -286,13 +286,12 @@ When using the image `itzg:/minecraft-server` without a tag, the `latest` image
|
||||
|
||||
| Tag name | Java version | Linux | JVM Type | Architecture |
|
||||
| -------------- | -------------|--------|----------|-------------------|
|
||||
| latest | 17 | Debian | Hotspot | amd64,arm64,armv7 |
|
||||
| latest | 16 | Debian | Hotspot | amd64,arm64,armv7 |
|
||||
| java8 | 8 | Alpine | Hotspot | amd64 |
|
||||
| java8-multiarch | 8 | Debian | Hotspot | amd64,arm64,armv7 |
|
||||
| java8-openj9 | 8 | Debian | OpenJ9 | amd64 |
|
||||
| java11 | 11 | Debian | Hotspot | amd64,arm64,armv7 |
|
||||
| java11-openj9 | 11 | Debian | OpenJ9 | amd64 |
|
||||
| java16-openj9 | 16 | Debian | OpenJ9 | amd64 |
|
||||
| java17 | 17 | Ubuntu | Hotspot | amd64,arm64,armv7 |
|
||||
| java17-openj9 | 17 | Debian | OpenJ9 | amd64 |
|
||||
|
||||
@@ -312,7 +311,7 @@ The following image tags have been deprecated and are no longer receiving update
|
||||
- adopt15
|
||||
- openj9-nightly
|
||||
- multiarch-latest
|
||||
- java16
|
||||
- java16/java16-openj9
|
||||
|
||||
## Healthcheck
|
||||
|
||||
@@ -482,10 +481,9 @@ An [Airplane](https://airplane.gg) server, which is "a stable, optimized, well s
|
||||
|
||||
-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:
|
||||
- `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
|
||||
- `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
|
||||
|
||||
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 ...
|
||||
|
||||
**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.
|
||||
**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.
|
||||
|
||||
**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
|
||||
|
||||
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
|
||||
from `/worlds/basic`. Also notice in the example that you can use a
|
||||
read-only volume attachment to ensure the clone source remains pristine.
|
||||
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.
|
||||
|
||||
```
|
||||
docker run ... -v $HOME/worlds:/worlds:ro -e WORLD=/worlds/basic
|
||||
|
||||
@@ -7,8 +7,8 @@ branches_list=(
|
||||
'java8-openj9'
|
||||
'java11'
|
||||
'java11-openj9'
|
||||
'java16-openj9'
|
||||
'java17'
|
||||
'java17-openj9'
|
||||
)
|
||||
|
||||
function TrapExit {
|
||||
|
||||
@@ -124,14 +124,6 @@ case "${TYPE^^}" in
|
||||
;;
|
||||
|
||||
FORGE)
|
||||
if versionLessThan 1.17; then
|
||||
log "**********************************************************************"
|
||||
log "WARNING: The image tag itzg/minecraft-server:java8 is recommended"
|
||||
log " since some mods require Java 8"
|
||||
log " Exception traces reporting ClassCastException: class jdk.internal.loader.ClassLoaders\$AppClassLoader"
|
||||
log " can be fixed with java8"
|
||||
log "**********************************************************************"
|
||||
fi
|
||||
exec ${SCRIPTS:-/}start-deployForge "$@"
|
||||
;;
|
||||
|
||||
@@ -144,10 +136,6 @@ case "${TYPE^^}" in
|
||||
;;
|
||||
|
||||
FTB|CURSEFORGE)
|
||||
log "**********************************************************************"
|
||||
log "NOTE: Some mods and modpacks may require Java 8."
|
||||
log " If so, use itzg/minecraft-server:java8"
|
||||
log "**********************************************************************"
|
||||
exec ${SCRIPTS:-/}start-deployCF "$@"
|
||||
;;
|
||||
|
||||
@@ -196,12 +184,6 @@ case "${TYPE^^}" in
|
||||
;;
|
||||
|
||||
CRUCIBLE)
|
||||
log "**********************************************************************"
|
||||
log "WARNING: The image tag itzg/minecraft-server:java8 is recommended"
|
||||
log " since some mods require Java 8"
|
||||
log " Exception traces reporting ClassCastException: class jdk.internal.loader.ClassLoaders\$AppClassLoader"
|
||||
log " can be fixed with java8"
|
||||
log "**********************************************************************"
|
||||
exec "${SCRIPTS:-/}start-deployCrucible" "$@"
|
||||
;;
|
||||
|
||||
|
||||
@@ -6,35 +6,33 @@ isDebugging && set -x
|
||||
|
||||
IFS=$'\n\t'
|
||||
|
||||
if [ "${VERSION}" != "LATEST" ] && [ "${VERSION}" != "1.17" ] && [ "${VERSION}" != "PURPUR" ] ; then
|
||||
log "ERROR: Airplane server type only supports VERSION=LATEST, VERSION=1.17, VERSION=PURPUR. Note that these are branches, not #.#.# versions."
|
||||
if [ "${VERSION}" != "LATEST" ] && [ "${VERSION}" != "PURPUR" ] ; then
|
||||
log "ERROR: Airplane server type only supports VERSION=LATEST, VERSION=PURPUR."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
: ${AIRPLANE_BUILD:=lastSuccessfulBuild}
|
||||
: ${AIRPLANE_TYPE:=airplane}
|
||||
|
||||
if [ "${VERSION}" = "LATEST" ] || [ "${VERSION}" = "1.17" ]; then
|
||||
AIRPLANE_BRANCH="1.17"
|
||||
if [ "${VERSION}" = "LATEST" ] ; then
|
||||
AIRPLANE_TYPE="airplane"
|
||||
fi
|
||||
|
||||
if [ "${VERSION}" = "PURPUR" ]; then
|
||||
AIRPLANE_BRANCH="Purpur-1.17"
|
||||
AIRPLANE_TYPE="airplanepurpur"
|
||||
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 ..."
|
||||
shopt -s nullglob
|
||||
for f in airplane-*.jar; do
|
||||
for f in airplane*.jar; do
|
||||
[[ $f != $SERVER ]] && rm $f
|
||||
done
|
||||
|
||||
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 ..."
|
||||
if ! get -o "$SERVER" "$downloadUrl"; then
|
||||
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}" ]]; then
|
||||
# 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
|
||||
log "WARNING: Could not retrieve Packwiz bootstrap installer release information"
|
||||
else
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
set -e
|
||||
isDebugging && set -x
|
||||
|
||||
if [ $TYPE = "CURSEFORGE" ]; then
|
||||
if [ "$TYPE" = "CURSEFORGE" ]; then
|
||||
worldDest=$FTB_DIR/${LEVEL:-world}
|
||||
else
|
||||
worldDest=/data/${LEVEL:-world}
|
||||
@@ -19,19 +19,23 @@ if [[ "$WORLD" ]] && ( isTrue "${FORCE_WORLD_COPY}" || [ ! -d "$worldDest" ] );
|
||||
"${worldDest}_the_end"
|
||||
fi
|
||||
|
||||
if isURL $WORLD; then
|
||||
curl -fsSL "$WORLD" -o /tmp/world.zip
|
||||
zipSrc=/tmp/world.zip
|
||||
elif [[ "$WORLD" =~ .*\.zip ]]; then
|
||||
zipSrc="$WORLD"
|
||||
if isURL "$WORLD"; then
|
||||
log "Downloading world from $WORLD"
|
||||
if ! get -o /tmp/world.bin "$WORLD"; then
|
||||
log "ERROR: failed to download world from $WORLD"
|
||||
exit 1
|
||||
fi
|
||||
WORLD=/tmp/world.bin
|
||||
fi
|
||||
|
||||
if [[ "$zipSrc" ]]; then
|
||||
log "Unzipping world"
|
||||
if [ -f "$WORLD" ]; then
|
||||
log "Extracting world"
|
||||
|
||||
# Stage contents so that the correct subdirectory can be picked off
|
||||
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
|
||||
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 "{}" \;)
|
||||
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)
|
||||
if [[ $count -gt 1 ]]; then
|
||||
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}_the_end" ] && rsync --remove-source-files --recursive --delete "${baseDir}_the_end/" "${worldDest}_the_end"
|
||||
fi
|
||||
else
|
||||
elif [ -d "$WORLD" ]; then
|
||||
log "Cloning world directory from $WORLD ..."
|
||||
rsync --recursive --delete "${WORLD%/}"/ "$worldDest"
|
||||
else
|
||||
log "ERROR: world file/directory $WORLD is missing"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$FAMILY" = "SPIGOT" ]; then
|
||||
|
||||
@@ -188,4 +188,19 @@ function isType() {
|
||||
fi
|
||||
done
|
||||
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
|
||||
volumes:
|
||||
- ./packs:/packs
|
||||
- data:/data
|
||||
volumes:
|
||||
data: {}
|
||||
- ./data:/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
|
||||
set -euo pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
# go to script root directory
|
||||
cd "$(dirname "$0")" || exit 1
|
||||
|
||||
# compose down function for reuse
|
||||
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.
|
||||
# tests that only run the setup files for things like downloads and configuration.
|
||||
setupOnlyMinecraftTest(){
|
||||
folder=$1
|
||||
cd "$folder"
|
||||
failed=false
|
||||
# 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
|
||||
echo "${folder} Result: failed=$failed"
|
||||
checkandExitOnFailure $failed
|
||||
down
|
||||
result=0
|
||||
|
||||
if ! logs=$(docker compose run --quiet-pull mc 2>&1); then
|
||||
echo "${folder} setup FAILED"
|
||||
echo ":::::::::::: LOGS ::::::::::::::::
|
||||
$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 ..
|
||||
|
||||
return $result
|
||||
}
|
||||
|
||||
# go through each folder in setuponly and test setups
|
||||
FOLDERS=$(ls)
|
||||
for folder in $FOLDERS; do
|
||||
# If folder is a directory
|
||||
if [ -d "$folder" ]; then
|
||||
echo "Starting Tests on ${folder}"
|
||||
setupOnlyMinecraftTest $folder
|
||||
fi
|
||||
done
|
||||
if (( $# > 0 )); then
|
||||
for folder in "$@"; do
|
||||
echo "Starting Tests in ${folder}"
|
||||
setupOnlyMinecraftTest "$folder"
|
||||
done
|
||||
else
|
||||
readarray -t folders < <(find . -maxdepth 2 -mindepth 2 -name docker-compose.yml -printf '%h\n')
|
||||
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
|
||||
set -euo pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
# go to script root directory
|
||||
cd "$(dirname "$0")" || exit 1
|
||||
|
||||
# go through top level folders and trigger the tests in the subfolders
|
||||
FOLDERS=$(ls)
|
||||
for folder in $FOLDERS; do
|
||||
# If folder is a directory
|
||||
if [ -d "$folder" ]; then
|
||||
cd "$folder"
|
||||
if [ -f "./test.sh" ]; then
|
||||
echo "Starting ${folder} Tests"
|
||||
sh ./test.sh
|
||||
fi
|
||||
cd ..
|
||||
fi
|
||||
readarray -t folders < <(find . -maxdepth 2 -mindepth 2 -name test.sh -printf '%h\n')
|
||||
for folder in "${folders[@]}"; do
|
||||
cd "$folder"
|
||||
echo "Starting ${folder} Tests"
|
||||
bash ./test.sh
|
||||
cd ..
|
||||
done
|
||||
|
||||
Reference in New Issue
Block a user