Compare commits

...

6 Commits

Author SHA1 Message Date
Geoff Bourne
9b4fd48244 Just exit container when PATH is mismatched 2022-01-28 22:21:07 -06:00
Geoff Bourne
90e7e3e2be Added matrix mcVersion 2022-01-28 22:13:53 -06:00
Geoff Bourne
17bfeb2093 Fixed base image of tests 2022-01-28 22:08:50 -06:00
Geoff Bourne
a2ab5d13cf Corrected java8-openj9 base image 2022-01-28 22:05:37 -06:00
Geoff Bourne
c114d97858 Collapse latest into java17 2022-01-28 21:50:54 -06:00
Geoff Bourne
0b71383146 build: Use build matrix instead of branches for variants 2022-01-28 21:49:29 -06:00
19 changed files with 132 additions and 88 deletions

View File

@@ -3,29 +3,60 @@ on:
push: push:
branches: branches:
- master - master
- java8-multiarch
- java8-openj9
- java11*
- java16*
- java17*
- test/** - test/**
tags: tags:
- "[0-9]+.[0-9]+.[0-9]+" - "[0-9]+.[0-9]+.[0-9]+"
- "[0-9]+.[0-9]+.[0-9]+-java8-multiarch" - "[0-9]+.[0-9]+.[0-9]+-*"
- "[0-9]+.[0-9]+.[0-9]+-java8-openj9"
- "[0-9]+.[0-9]+.[0-9]+-java11*"
- "[0-9]+.[0-9]+.[0-9]+-java16*"
paths-ignore: paths-ignore:
- "*.md" - "*.md"
- "docs/**" - "docs/**"
- "examples/**" - "examples/**"
env:
IMAGE_TO_TEST: itzg/minecraft-server:test-${{ github.repository_owner }}-${{ github.run_id }}
jobs: jobs:
build: build:
if: github.repository == 'itzg/docker-minecraft-server' if: github.repository == 'itzg/docker-minecraft-server'
strategy:
matrix:
variant:
- java17
- java17-openj9
- java8-multiarch
- java8-openj9
- java11
- java11-openj9
include:
- variant: java17
baseImage: eclipse-temurin:17
tagPrefix: java17-
platforms: linux/amd64,linux/arm/v7,linux/arm64
mcVersion: LATEST
- variant: java17-openj9
baseImage: ibm-semeru-runtimes:open-17-jdk
tagPrefix: java17-openj9-
platforms: linux/amd64
mcVersion: LATEST
- variant: java8-multiarch
baseImage: eclipse-temurin:8-jdk
tagPrefix: java8-
platforms: linux/amd64,linux/arm/v7,linux/arm64
mcVersion: 1.12.2
- variant: java8-openj9
baseImage: adoptopenjdk:8-jdk-openj9
tagPrefix: java8-openj9-
platforms: linux/amd64
mcVersion: 1.12.2
- variant: java11
baseImage: adoptopenjdk:11-jdk-hotspot
tagPrefix: java11-
platforms: linux/amd64,linux/arm/v7,linux/arm64
mcVersion: 1.16.5
- variant: java11-openj9
baseImage: adoptopenjdk:11-jdk-openj9
tagPrefix: java11-openj9-
platforms: linux/amd64
mcVersion: 1.16.5
env:
IMAGE_TO_TEST: itzg/minecraft-server:test-${{ matrix.variant }}-${{ github.run_id }}
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
steps: steps:
- name: Checkout - name: Checkout
@@ -38,10 +69,11 @@ jobs:
images: | images: |
itzg/minecraft-server itzg/minecraft-server
tags: | tags: |
type=ref,event=branch type=ref,event=tag,enable=${{ matrix.variant == 'java17' }}
type=ref,event=tag type=ref,event=tag,prefix=${{ matrix.variant }}-
type=raw,value=${{ matrix.variant }}
flavor: | flavor: |
latest=${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} latest=${{ matrix.variant == 'java17' }}
- name: Setup Docker Buildx - name: Setup Docker Buildx
uses: docker/setup-buildx-action@v1 uses: docker/setup-buildx-action@v1
@@ -57,21 +89,22 @@ jobs:
- name: Build for test - name: Build for test
uses: docker/build-push-action@v2.8.0 uses: docker/build-push-action@v2.8.0
if: github.ref_name == 'master' || startsWith(github.ref_name, 'test/')
with: with:
context: .
platforms: linux/amd64 platforms: linux/amd64
tags: ${{ env.IMAGE_TO_TEST }} tags: ${{ env.IMAGE_TO_TEST }}
# ensure latest base image is used # ensure latest base image is used
pull: true pull: true
# load into daemon for test usage in next step
load: true load: true
push: false push: false
cache-from: type=gha build-args: |
BASE_IMAGE=${{ matrix.baseImage }}
cache-from: type=gha,scope=${{ matrix.variant }}
# no cache-to to avoid cross-cache update from next build step # no cache-to to avoid cross-cache update from next build step
- name: Run tests - name: Run tests
# It is assumed that image variants are merged from master and tested there env:
if: github.ref_name == 'master' || startsWith(github.ref_name, 'test/') MINECRAFT_VERSION: ${{ matrix.mcVersion }}
run: | run: |
tests/test.sh tests/test.sh
@@ -79,15 +112,13 @@ jobs:
id: docker_build id: docker_build
uses: docker/build-push-action@v2.8.0 uses: docker/build-push-action@v2.8.0
with: with:
context: . platforms: ${{ matrix.platforms }}
platforms: linux/amd64,linux/arm/v7,linux/arm64 push: false
push: true
tags: ${{ steps.meta.outputs.tags }} tags: ${{ steps.meta.outputs.tags }}
# ensure latest base image is used # ensure latest base image is used
pull: true pull: true
cache-from: type=gha
cache-to: type=gha,mode=max
labels: ${{ steps.meta.outputs.labels }} labels: ${{ steps.meta.outputs.labels }}
build-args: |
- name: Image digest BASE_IMAGE=${{ matrix.baseImage }}
run: echo ${{ steps.docker_build.outputs.digest }} cache-from: type=gha,scope=${{ matrix.variant }}
cache-to: type=gha,mode=max,scope=${{ matrix.variant }}

View File

@@ -1,4 +1,5 @@
FROM eclipse-temurin:17-jdk ARG BASE_IMAGE=eclipse-temurin:17-jdk
FROM ${BASE_IMAGE}
LABEL org.opencontainers.image.authors="Geoff Bourne <itzgeoff@gmail.com>" LABEL org.opencontainers.image.authors="Geoff Bourne <itzgeoff@gmail.com>"

View File

@@ -66,9 +66,12 @@ if [[ $RCON_PASSWORD_FILE ]]; then
log "" log ""
fi fi
# Some Docker management UIs grab all the image declared variables and present them for configuration.
# When upgrading images across Java versions, that creates a mismatch in PATH's expected by base image.
if ! which java > /dev/null; then if ! which java > /dev/null; then
log "Fixing PATH to include java" log "ERROR: PATH should not be explicitly passed into the container"
PATH="${PATH}:/opt/java/openjdk/bin" log " Remove configuration of that variable."
exit 1
fi fi
export VERSIONS_JSON=https://launchermeta.mojang.com/mc/game/version_manifest.json export VERSIONS_JSON=https://launchermeta.mojang.com/mc/game/version_manifest.json
@@ -116,39 +119,30 @@ fi
log "Resolving type given ${TYPE}" log "Resolving type given ${TYPE}"
case "${TYPE^^}" in case "${TYPE^^}" in
*BUKKIT|SPIGOT) *BUKKIT|SPIGOT)
exec ${SCRIPTS:-/}start-deployBukkitSpigot "$@" exec "${SCRIPTS:-/}start-deployBukkitSpigot" "$@"
;; ;;
PAPER) PAPER)
exec ${SCRIPTS:-/}start-deployPaper "$@" exec "${SCRIPTS:-/}start-deployPaper" "$@"
;; ;;
FORGE) FORGE)
if versionLessThan 1.17; then evaluateJavaCompatibilityForForge
log "**********************************************************************" exec "${SCRIPTS:-/}start-deployForge" "$@"
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 "$@"
;; ;;
FABRIC) FABRIC)
exec ${SCRIPTS:-/}start-deployFabric "$@" exec "${SCRIPTS:-/}start-deployFabric" "$@"
;; ;;
FTBA) FTBA)
exec ${SCRIPTS:-/}start-deployFTBA "$@" evaluateJavaCompatibilityForForge
exec "${SCRIPTS:-/}start-deployFTBA" "$@"
;; ;;
FTB|CURSEFORGE) FTB|CURSEFORGE)
log "**********************************************************************" evaluateJavaCompatibilityForForge
log "NOTE: Some mods and modpacks may require Java 8." exec "${SCRIPTS:-/}start-deployCF" "$@"
log " If so, use itzg/minecraft-server:java8"
log "**********************************************************************"
exec ${SCRIPTS:-/}start-deployCF "$@"
;; ;;
VANILLA) VANILLA)
@@ -156,22 +150,26 @@ case "${TYPE^^}" in
;; ;;
SPONGEVANILLA) SPONGEVANILLA)
exec ${SCRIPTS:-/}start-deploySpongeVanilla "$@" exec "${SCRIPTS:-/}start-deploySpongeVanilla" "$@"
;; ;;
CUSTOM) CUSTOM)
exec ${SCRIPTS:-/}start-deployCustom "$@" evaluateJavaCompatibilityForForge
exec "${SCRIPTS:-/}start-deployCustom" "$@"
;; ;;
MAGMA) MAGMA)
exec ${SCRIPTS:-/}start-deployMagma "$@" evaluateJavaCompatibilityForForge
exec "${SCRIPTS:-/}start-deployMagma" "$@"
;; ;;
MOHIST) MOHIST)
evaluateJavaCompatibilityForForge
exec ${SCRIPTS:-/}start-deployMohist "$@" exec ${SCRIPTS:-/}start-deployMohist "$@"
;; ;;
CATSERVER) CATSERVER)
evaluateJavaCompatibilityForForge
exec ${SCRIPTS:-/}start-deployCatserver "$@" exec ${SCRIPTS:-/}start-deployCatserver "$@"
;; ;;

View File

@@ -42,6 +42,5 @@ fi
# Normalize on Spigot for later operations # Normalize on Spigot for later operations
export FAMILY=SPIGOT export FAMILY=SPIGOT
export SKIP_LOG4J_CONFIG=true
exec "${SCRIPTS:-/}start-spiget" "$@" exec "${SCRIPTS:-/}start-spiget" "$@"

View File

@@ -127,6 +127,5 @@ fi
# Normalize on Spigot for operations below # Normalize on Spigot for operations below
export FAMILY=SPIGOT export FAMILY=SPIGOT
export SKIP_LOG4J_CONFIG=true
exec ${SCRIPTS:-/}start-spiget "$@" exec ${SCRIPTS:-/}start-spiget "$@"

View File

@@ -44,6 +44,5 @@ fi
# Normalize on Spigot for later operations # Normalize on Spigot for later operations
export FAMILY=SPIGOT export FAMILY=SPIGOT
export SKIP_LOG4J_CONFIG=true
exec ${SCRIPTS:-/}start-spiget "$@" exec ${SCRIPTS:-/}start-spiget "$@"

View File

@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
. ${SCRIPTS:-/}start-utils # shellcheck source=start-utils
. "${SCRIPTS:-/}start-utils"
set -o pipefail set -o pipefail
set -e set -e
@@ -26,8 +27,6 @@ if [ ! -f ${SERVER} ]; then
curl -H "Accept:application/octet-stream" -o "$SERVER" -fsSL https://api.github.com/repos/Luohuayu/CatServer/releases/assets/${latestJarId} curl -H "Accept:application/octet-stream" -o "$SERVER" -fsSL https://api.github.com/repos/Luohuayu/CatServer/releases/assets/${latestJarId}
fi fi
export SKIP_LOG4J_CONFIG=true
export FAMILY=HYBRID export FAMILY=HYBRID
# Continue to Final Setup
exec ${SCRIPTS:-/}start-setupWorld "$@" exec "${SCRIPTS:-/}start-setupWorld" "$@"

View File

@@ -55,7 +55,6 @@ if [ ! -d "$librariesDir" ]; then
fi fi
export SERVER export SERVER
export SKIP_LOG4J_CONFIG=true
export FAMILY=HYBRID export FAMILY=HYBRID
exec "${SCRIPTS:-$(dirname "$0")}/start-setupWorld" "$@" exec "${SCRIPTS:-$(dirname "$0")}/start-setupWorld" "$@"

View File

@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
. ${SCRIPTS:-/}start-utils # shellcheck source=start-utils
. "${SCRIPTS:-/}start-utils"
isDebugging && set -x isDebugging && set -x
if isURL ${CUSTOM_SERVER}; then if isURL ${CUSTOM_SERVER}; then
@@ -30,6 +31,6 @@ else
fi fi
export SKIP_LOG4J_CONFIG=true
export FAMILY=HYBRID export FAMILY=HYBRID
exec ${SCRIPTS:-/}start-setupWorld $@ exec ${SCRIPTS:-/}start-setupWorld $@

View File

@@ -2,7 +2,8 @@
ftbInstallMarker=".ftb-installed" ftbInstallMarker=".ftb-installed"
. ${SCRIPTS:-/}start-utils # shellcheck source=start-utils
. "${SCRIPTS:-/}start-utils"
isDebugging && set -x isDebugging && set -x
set -e set -e
@@ -80,4 +81,5 @@ if ! [ -v SERVER ]; then
fi fi
export FAMILY=FORGE export FAMILY=FORGE
exec ${SCRIPTS:-/}start-setupWorld $@ exec ${SCRIPTS:-/}start-setupWorld $@

View File

@@ -38,18 +38,23 @@ install() {
get_installer "$normForgeVersion" "$shortForgeVersion" get_installer "$normForgeVersion" "$shortForgeVersion"
fi fi
log "Installing Forge $shortForgeVersion using $FORGE_INSTALLER" log "Installing Forge $shortForgeVersion. This might take a minute or two..."
mkdir -p mods mkdir -p mods
tries=3 tries=3
while ((--tries >= 0)); do while true; do
if java -jar "$FORGE_INSTALLER" --installServer; then if ! java -jar "$FORGE_INSTALLER" --installServer &> forge-installer.log; then
break if ((--tries <= 0)); then
cat forge-installer.log
log "
ERROR Forge failed to install after several tries.
"
exit 1
fi
log "Install failed. Trying again..."
else
break # out of this loop
fi fi
done done
if ((tries < 0)); then
log "Forge failed to install after several tries." >&2
exit 10
fi
# NOTE $shortForgeVersion will be empty if installer location was given to us # NOTE $shortForgeVersion will be empty if installer location was given to us
log "Finding installed server jar..." log "Finding installed server jar..."
unset -v latest unset -v latest
@@ -148,4 +153,5 @@ else
fi fi
export FAMILY=FORGE export FAMILY=FORGE
exec "${SCRIPTS:-/}start-setupWorld" "$@" exec "${SCRIPTS:-/}start-setupWorld" "$@"

View File

@@ -58,7 +58,5 @@ if [[ ${LEVEL} != *\;* ]]; then
fi fi
export LEVEL export LEVEL
export SKIP_LOG4J_CONFIG=true
export FAMILY=LIMBO export FAMILY=LIMBO
exec ${SCRIPTS:-/}start-setupWorld $@ exec ${SCRIPTS:-/}start-setupWorld $@

View File

@@ -1,13 +1,12 @@
#!/bin/bash #!/bin/bash
. ${SCRIPTS:-/}start-utils # shellcheck source=start-utils
export SKIP_LOG4J_CONFIG=true . "${SCRIPTS:-/}start-utils"
isDebugging && set -x isDebugging && set -x
: ${VANILLA_VERSION?} : "${VANILLA_VERSION?}"
# stable, dev # stable, dev
: ${MAGMA_CHANNEL:=stable} : "${MAGMA_CHANNEL:=stable}"
magmaDownloadServer() { magmaDownloadServer() {
@@ -90,4 +89,5 @@ else
fi fi
export FAMILY=HYBRID export FAMILY=HYBRID
exec ${SCRIPTS:-/}start-setupWorld "$@"
exec "${SCRIPTS:-/}start-setupWorld" "$@"

View File

@@ -38,7 +38,6 @@ if [ ! -f "${SERVER}" ]; then
get -o "${SERVER}" "${mohistJob}${MOHIST_BUILD}/artifact/${buildRelPath}" get -o "${SERVER}" "${mohistJob}${MOHIST_BUILD}/artifact/${buildRelPath}"
fi fi
export SKIP_LOG4J_CONFIG=true
export FAMILY=HYBRID export FAMILY=HYBRID
exec "${SCRIPTS:-$(dirname "$0")}/start-setupWorld" "$@" exec "${SCRIPTS:-$(dirname "$0")}/start-setupWorld" "$@"

View File

@@ -74,6 +74,5 @@ fi
# Normalize on Spigot for downstream operations # Normalize on Spigot for downstream operations
export FAMILY=SPIGOT export FAMILY=SPIGOT
export SKIP_LOG4J_CONFIG=true
exec ${SCRIPTS:-/}start-spiget "$@" exec ${SCRIPTS:-/}start-spiget "$@"

View File

@@ -40,6 +40,5 @@ fi
# Normalize on Spigot for later operations # Normalize on Spigot for later operations
export FAMILY=SPIGOT export FAMILY=SPIGOT
export SKIP_LOG4J_CONFIG=true
exec ${SCRIPTS:-/}start-spiget "$@" exec ${SCRIPTS:-/}start-spiget "$@"

View File

@@ -6,9 +6,9 @@ IFS=$'\n\t'
. "${SCRIPTS:-/}start-utils" . "${SCRIPTS:-/}start-utils"
isDebugging && set -x isDebugging && set -x
: ${VANILLA_VERSION:?} : "${VANILLA_VERSION:?}"
: ${PURPUR_BUILD:=LATEST} : "${PURPUR_BUILD:=LATEST}"
: ${FORCE_REDOWNLOAD:=false} : "${FORCE_REDOWNLOAD:=false}"
if [[ ${PURPUR_BUILD} == LATEST ]]; then if [[ ${PURPUR_BUILD} == LATEST ]]; then
if ! PURPUR_BUILD=$(get --json-path=".builds.latest" "https://api.purpurmc.org/v2/purpur/${VANILLA_VERSION}"); then if ! PURPUR_BUILD=$(get --json-path=".builds.latest" "https://api.purpurmc.org/v2/purpur/${VANILLA_VERSION}"); then
@@ -31,6 +31,5 @@ fi
# Normalize on Spigot for later operations # Normalize on Spigot for later operations
export FAMILY=SPIGOT export FAMILY=SPIGOT
export SKIP_LOG4J_CONFIG=true
exec "${SCRIPTS:-/}start-spiget" "$@" exec "${SCRIPTS:-/}start-spiget" "$@"

View File

@@ -243,6 +243,10 @@ EOF
elif [[ $SERVER =~ run.sh ]]; then elif [[ $SERVER =~ run.sh ]]; then
log "Using Forge supplied run.sh script..." log "Using Forge supplied run.sh script..."
echo $JVM_XX_OPTS $JVM_OPTS $expandedDOpts > user_jvm_args.txt echo $JVM_XX_OPTS $JVM_OPTS $expandedDOpts > user_jvm_args.txt
if isTrue ${SETUP_ONLY:=false}; then
echo "SETUP_ONLY: bash ${SERVER}"
exit
fi
exec mc-server-runner "${mcServerRunnerArgs[@]}" --shell bash "${SERVER}" exec mc-server-runner "${mcServerRunnerArgs[@]}" --shell bash "${SERVER}"
else else
# If we have a bootstrap.txt file... feed that in to the server stdin # If we have a bootstrap.txt file... feed that in to the server stdin

View File

@@ -183,6 +183,7 @@ function isFamily() {
} }
function isType() { function isType() {
for t in "${@}"; do for t in "${@}"; do
# shellcheck disable=SC2153
if [[ $TYPE == "$t" ]]; then if [[ $TYPE == "$t" ]]; then
return 0 return 0
fi fi
@@ -190,6 +191,17 @@ function isType() {
return 1 return 1
} }
function evaluateJavaCompatibilityForForge() {
javaRelease=$(mc-image-helper java-release)
if versionLessThan 1.18 && (( javaRelease > 8 )); then
log "**********************************************************************"
log "WARNING: Some mods and modpacks may require Java 8."
log " Please use itzg/minecraft-server:java8"
log "**********************************************************************"
sleep 5
fi
}
function extract() { function extract() {
src=${1?} src=${1?}
destDir=${2?} destDir=${2?}