Compare commits

...

47 Commits

Author SHA1 Message Date
Geoff Bourne
aeae29046c Auto-merging via docker-versions-create 2022-01-23 22:24:39 -06:00
itzg
cbbc817279 docs: Auto update markdown TOC 2022-01-24 04:19:38 +00:00
Geoff Bourne
18d8aba20f feat: support WORLD files in compressed tar format (#1297) 2022-01-23 22:19:25 -06:00
itzg
09834c289a docs: Auto update markdown TOC 2022-01-24 00:34:13 +00:00
Jawa_Juice
880dca1ae5 Update Airplane download URL, clarify version support (#1296) 2022-01-23 18:34:00 -06:00
Geoff Bourne
726c77537c Auto-merging via docker-versions-create 2022-01-23 11:01:32 -06:00
itzg
b1e33d4049 docs: Auto update markdown TOC 2022-01-23 16:57:49 +00:00
Geoff Bourne
284c260886 Added java17-openj9 to merge system 2022-01-23 10:57:31 -06:00
Nailima
05bbb45046 fix: changed packwiz url to reflect new repo address (#1293) 2022-01-22 10:36:52 -06:00
Geoff Bourne
d11fe229df ci: Reference branch and html URL from completed workflow in discord workflow (#1292) 2022-01-20 20:52:48 -06:00
Geoff Bourne
854ac86bed Auto-merging via docker-versions-create 2022-01-20 23:10:46 +00:00
Geoff Bourne
79345d69c2 Auto-merging via docker-versions-create 2022-01-17 20:17:28 -06:00
Geoff Bourne
7516b53e84 Auto-merging via docker-versions-create 2022-01-10 06:58:54 -06:00
Geoff Bourne
eafdf26d94 Auto-merging via docker-versions-create 2022-01-08 15:23:11 -06:00
Geoff Bourne
984c969da2 Auto-merging via docker-versions-create 2022-01-06 22:17:05 -06:00
Geoff Bourne
aff65b74ff Auto-merging via docker-versions-create 2021-12-23 16:10:08 -06:00
Geoff Bourne
2ed5de68f9 Auto-merging via docker-versions-create 2021-12-13 21:30:01 -06:00
Geoff Bourne
a4b6ee6d3b Auto-merging via docker-versions-create 2021-12-12 19:53:03 -06:00
Geoff Bourne
6729ba462e Merge branch 'master' of github.com:itzg/docker-minecraft-server 2021-12-12 15:35:14 -06:00
Geoff Bourne
4b28d5e472 fix: qualify Fabric server jar by installer version
Fixes #1191
2021-12-12 15:28:30 -06:00
Geoff Bourne
3a31ce757d Merging latest from master 2021-12-12 09:19:48 -06:00
Geoff Bourne
be2ef20fc1 Auto-merging via docker-versions-create 2021-12-11 16:25:35 -06:00
Geoff Bourne
3f2022da40 Merge branch 'master' of github.com:itzg/docker-minecraft-server 2021-12-11 16:23:25 -06:00
Geoff Bourne
0f7464403c build: added github release creation step to docker-versions-create.sh 2021-12-11 16:09:15 -06:00
Geoff Bourne
6020400d3b Auto-merging via docker-versions-create 2021-12-10 21:05:35 -06:00
Geoff Bourne
ae96adaeec Auto-merging via docker-versions-create 2021-12-10 10:43:14 -06:00
Geoff Bourne
d34be9f20e Auto-merging via docker-versions-create 2021-12-10 07:58:31 -06:00
Geoff Bourne
64a02d28bc Auto-merging via docker-versions-create 2021-12-06 22:06:58 -06:00
Geoff Bourne
c446cb11da Auto-merging via docker-versions-create 2021-12-04 10:00:59 -06:00
Geoff Bourne
7aea5b593e Auto-merging via docker-versions-create 2021-12-02 19:47:40 -06:00
Geoff Bourne
91adfaa1d9 Auto-merging via docker-versions-create 2021-11-24 15:58:26 -06:00
Geoff Bourne
e7b223f1c6 Auto-merging via docker-versions-create 2021-11-24 14:35:16 -06:00
Geoff Bourne
45eff98011 Track latest from master 2021-11-16 19:02:53 -06:00
Geoff Bourne
b4111f0428 Auto-merging via docker-versions-create 2021-11-16 18:52:49 -06:00
Geoff Bourne
288bdf3804 Auto-merging via docker-versions-create 2021-11-15 20:49:35 -06:00
Geoff Bourne
5bc1ac672e Auto-merging via docker-versions-create 2021-11-13 19:18:44 -06:00
Geoff Bourne
a503ad2ec2 Auto-merging via docker-versions-create 2021-11-13 18:53:18 -06:00
Geoff Bourne
3042aa4909 Auto-merging via docker-versions-create 2021-11-12 21:25:05 -06:00
Geoff Bourne
8882ae5f89 Auto-merging via docker-versions-create 2021-11-06 21:41:15 -05:00
Geoff Bourne
4149db7f11 Auto-merging via docker-versions-create 2021-11-04 21:08:06 -05:00
Geoff Bourne
666f538ad5 Auto-merging via docker-versions-create 2021-10-31 09:49:21 -05:00
Geoff Bourne
145403ea54 Merge branch 'master' into java17 2021-10-27 21:28:49 -05:00
Geoff Bourne
5392801ecd Auto-merging via docker-versions-create 2021-10-25 19:26:48 -05:00
Geoff Bourne
3dfd70d068 Auto-merging via docker-versions-create 2021-10-24 20:31:59 -05:00
Geoff Bourne
e5bc9b939f Auto-merging via docker-versions-create 2021-10-23 09:47:31 -05:00
Geoff Bourne
1b620d2d6d Auto-merging via docker-versions-create 2021-10-22 15:57:41 -05:00
Geoff Bourne
28d77853cb Added java17 variant
#1054
2021-10-19 21:34:02 -05:00
21 changed files with 139 additions and 86 deletions

View File

@@ -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 }} 💣💥"

View File

@@ -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 - \

View File

@@ -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

View File

@@ -7,8 +7,8 @@ branches_list=(
'java8-openj9'
'java11'
'java11-openj9'
'java16-openj9'
'java17'
'java17-openj9'
)
function TrapExit {

View File

@@ -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=$?)"

View File

@@ -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

View File

@@ -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

View File

@@ -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
View File

@@ -0,0 +1 @@
data/

View File

@@ -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

View File

@@ -0,0 +1 @@
mc-image-helper assert fileExists one.txt mods/two.txt

View File

@@ -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

View 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

View File

@@ -0,0 +1 @@
mc-image-helper assert fileExists world/level.dat

View 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

View File

@@ -0,0 +1 @@
mc-image-helper assert fileExists world/level.dat

View File

@@ -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