mirror of
https://github.com/itzg/docker-minecraft-server.git
synced 2026-07-08 09:35:10 +00:00
Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5219c8ca32 | |||
| 702d05e60c | |||
| 32b026d0df | |||
| d9ee3ee68c | |||
| ab505fa43c | |||
| 78ecbb5749 | |||
| e992e71988 | |||
| 3cc2e64163 | |||
| f1dd0f3d71 | |||
| 292b2f757e | |||
| 82043d556e | |||
| d9bf26cc17 | |||
| 8b076e4868 | |||
| 4c534490f2 | |||
| 314beec407 | |||
| 2ecf6776e2 | |||
| dadecdac28 |
@@ -104,7 +104,7 @@ jobs:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6.0.3
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
# for build-files step
|
||||
fetch-depth: 0
|
||||
@@ -141,13 +141,13 @@ jobs:
|
||||
org.opencontainers.image.authors=Geoff Bourne <itzgeoff@gmail.com>
|
||||
|
||||
- name: Setup Docker Buildx
|
||||
uses: docker/setup-buildx-action@v4.1.0
|
||||
uses: docker/setup-buildx-action@v4
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v4.1.0
|
||||
|
||||
- name: Build for test
|
||||
uses: docker/build-push-action@v7.2.0
|
||||
uses: docker/build-push-action@v7
|
||||
with:
|
||||
platforms: linux/amd64
|
||||
tags: ${{ env.IMAGE_TO_TEST }}
|
||||
@@ -187,7 +187,7 @@ jobs:
|
||||
password: ${{ github.token }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v7.2.0
|
||||
uses: docker/build-push-action@v7
|
||||
if: github.actor == github.repository_owner
|
||||
with:
|
||||
platforms: ${{ matrix.platforms }}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
name: Label Sponsor Contributions
|
||||
name: Sponsor Labeler
|
||||
|
||||
on:
|
||||
issues:
|
||||
types:
|
||||
@@ -9,15 +10,7 @@ on:
|
||||
|
||||
jobs:
|
||||
label-sponsor:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
pull-requests: write
|
||||
issues: write
|
||||
|
||||
steps:
|
||||
- name: Check if sponsor
|
||||
uses: JasonEtco/is-sponsor-label-action@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
label: sponsor
|
||||
uses: itzg/github-workflows/.github/workflows/sponsor-labeler.yml@main
|
||||
with:
|
||||
author: ${{ github.event.issue.user.login || github.event.pull_request.user.login }}
|
||||
number: ${{ github.event.issue.number || github.event.pull_request.number }}
|
||||
@@ -13,13 +13,13 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
uses: docker/setup-buildx-action@v4
|
||||
|
||||
- name: Build docs image
|
||||
uses: docker/build-push-action@v6
|
||||
uses: docker/build-push-action@v7
|
||||
with:
|
||||
context: .
|
||||
file: docs/Dockerfile
|
||||
|
||||
@@ -53,16 +53,16 @@ jobs:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6.0.3
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
# for build-files step
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup Docker Buildx
|
||||
uses: docker/setup-buildx-action@v4.1.0
|
||||
uses: docker/setup-buildx-action@v4
|
||||
|
||||
- name: Confirm multi-arch build
|
||||
uses: docker/build-push-action@v7.2.0
|
||||
uses: docker/build-push-action@v7
|
||||
with:
|
||||
platforms: ${{ matrix.platforms }}
|
||||
# ensure latest base image is used
|
||||
@@ -73,7 +73,7 @@ jobs:
|
||||
cache-from: type=gha,scope=${{ matrix.variant }}
|
||||
|
||||
- name: Build for test
|
||||
uses: docker/build-push-action@v7.2.0
|
||||
uses: docker/build-push-action@v7
|
||||
with:
|
||||
# Only build single platform since loading multi-arch image into daemon fails with
|
||||
# "docker exporter does not currently support exporting manifest lists"
|
||||
|
||||
+1
-1
@@ -43,7 +43,7 @@ RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||
|
||||
# renovate: datasource=github-releases packageName=itzg/mc-monitor
|
||||
ARG MC_MONITOR_VERSION=0.16.7
|
||||
ARG MC_MONITOR_VERSION=0.16.10
|
||||
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||
--var version=${MC_MONITOR_VERSION} --var app=mc-monitor --file {{.app}} \
|
||||
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||
|
||||
@@ -26,7 +26,10 @@ docker run -d --pull=always \
|
||||
|
||||
By default, supported server types remove stale server libraries during installation by setting `CLEAN_SERVER_LIBRARIES` to `true`. Set `CLEAN_SERVER_LIBRARIES` to `false` to disable this cleanup if it causes unexpected behavior.
|
||||
|
||||
Currently, library cleanup is supported by `TYPE=PAPER`. Other server jar types are not yet supported.
|
||||
Currently, library cleanup is supported by
|
||||
|
||||
- `TYPE=PAPER`
|
||||
- `TYPE=PURPUR`
|
||||
|
||||
## Running as alternate user/group ID
|
||||
|
||||
@@ -244,4 +247,4 @@ To also include the timestamp with each log, set `LOG_TIMESTAMP` to "true". The
|
||||
|
||||
```
|
||||
[init] 2022-02-05 16:58:33+00:00 Starting the Minecraft server...
|
||||
```
|
||||
```
|
||||
|
||||
@@ -42,6 +42,19 @@ There are optional volume paths that can be attached to supply content to be cop
|
||||
`/mods`
|
||||
: content in this directory is synchronized into `/data/mods` for server types that use mods, [as described above](#mods-vs-plugins). For special cases, the source can be changed by setting `COPY_MODS_SRC` and destination by setting `COPY_MODS_DEST`.
|
||||
|
||||
!!! example "Loading mods from a local directory"
|
||||
|
||||
This is the most basic example, where `./mods` is mounted as `/mods`. If the directory with the server's mods is located somewhere else, `./mods` can be modified accordingly.
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
EULA: "TRUE"
|
||||
TYPE: "NEOFORGE"
|
||||
volumes:
|
||||
- "./data:/data"
|
||||
- "./mods:/mods"
|
||||
```
|
||||
|
||||
`/config`
|
||||
: contents are synchronized into `/data/config` by default, but can be changed with `COPY_CONFIG_DEST`. For example, `-v ./config:/config -e COPY_CONFIG_DEST=/data` will allow you to copy over files like `bukkit.yml` and so on directly into the server directory. The source can be changed by setting `COPY_CONFIG_SRC`. Set `SYNC_SKIP_NEWER_IN_DESTINATION=false` if you want files from `/config` to take precedence over newer files in `/data/config`.
|
||||
|
||||
|
||||
@@ -13,6 +13,8 @@ docker run -d --pull=always \
|
||||
|
||||
packwiz modpack definitions are processed before other mod definitions (`MODPACK`, `MODS`, etc.) to allow for additional processing/overrides you may want to perform (in case of mods not available via Modrinth/CurseForge, or you do not maintain the pack).
|
||||
|
||||
If the pack ships a `.env` file that you reference with `LOAD_ENV_FROM_FILE`, that file is re-loaded immediately after the packwiz installer runs, so the freshly downloaded values are applied to the remaining startup stages. Note that `TYPE` and `VERSION` are resolved earlier (before the deploy is dispatched), so a pack-provided `.env` cannot change those from within packwiz; use `LOAD_ENV_FROM_GENERIC_PACK` or `LOAD_ENV_FROM_ARCHIVE` for those.
|
||||
|
||||
!!! note
|
||||
|
||||
packwiz is pre-configured to only download server mods. If client-side mods are downloaded and cause issues, check your pack.toml configuration, and make sure any client-only mods are not set to `"both"`, but rather `"client"` for the side configuration item.
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
click==8.4.1
|
||||
click==8.4.2
|
||||
colorama==0.4.6
|
||||
deepmerge==2.0
|
||||
deepmerge==2.1.0
|
||||
ghp-import==2.1.0
|
||||
griffe==2.0.2
|
||||
griffe==2.1.0
|
||||
Jinja2==3.1.6
|
||||
Markdown==3.10.2
|
||||
MarkupSafe==3.0.3
|
||||
@@ -11,15 +11,15 @@ mkdocs==1.6.1
|
||||
mkdocs-autorefs==1.4.4
|
||||
mkdocs-get-deps==0.2.2
|
||||
mkdocstrings==1.0.4
|
||||
mkdocstrings-python==2.0.4
|
||||
mkdocstrings-python==2.0.5
|
||||
packaging==26.2
|
||||
pathspec==1.1.1
|
||||
platformdirs==4.10.0
|
||||
Pygments==2.20.0
|
||||
pymdown-extensions==10.21.3
|
||||
pymdown-extensions==11.0.1
|
||||
python-dateutil==2.9.0.post0
|
||||
PyYAML==6.0.3
|
||||
pyyaml_env_tag==1.1
|
||||
six==1.17.0
|
||||
watchdog==6.0.0
|
||||
zensical==0.0.45
|
||||
zensical==0.0.47
|
||||
|
||||
@@ -35,7 +35,7 @@ For optimal performance choose java25 with GTNH 2.8.0 and later.
|
||||
|
||||
## Config backups
|
||||
|
||||
During version upgrade, the server will replace all config files to make sure all new features are setup as intended. The old config files are stored in a backup folder in the data directory, for you to use as reference for manual reapplication of your changed settings. Set the environment variable `GTNH_DELETE_BACKUPS` to true to delete all backup folders at startup.
|
||||
During version upgrade, the server will replace all config files to make sure all new features are setup as intended. The old config files are stored in a backup folder in the data directory, for you to use as reference for manual reapplication of your changed settings. The folder name starts with `gtnh-upgrade-` followed by a timestamp. Set the environment variable `GTNH_DELETE_BACKUPS` to true to delete all backup folders at startup.
|
||||
|
||||
## server.properties defaults
|
||||
|
||||
|
||||
+120
-93
@@ -7,13 +7,14 @@
|
||||
function getGTNHdownloadPath(){
|
||||
gtnh_download_path=""
|
||||
local release_object=""
|
||||
local current_java_version=$(mc-image-helper java-release)
|
||||
local current_java_version=""
|
||||
current_java_version=$(mc-image-helper java-release)
|
||||
|
||||
# Select release JSON object
|
||||
if [ "$GTNH_PACK_VERSION" == "latest-dev" ]; then
|
||||
if ! release_object="$(
|
||||
curl -fsSL "https://downloads.gtnewhorizons.com/versions.json" \
|
||||
| jq -r '.versions|to_entries|sort_by(.value.releaseDate)|map(select(.value.title=="Beta release"))|.[-1]'
|
||||
| jq -r '(.versions // .)|to_entries|sort_by(.value.releaseDate)|map(select(.value.title=="Beta release"))|.[-1]'
|
||||
)"; then logError "Failed to retrieve release from https://downloads.gtnewhorizons.com/versions.json"
|
||||
exit 1
|
||||
fi
|
||||
@@ -22,7 +23,7 @@ function getGTNHdownloadPath(){
|
||||
elif [ "$GTNH_PACK_VERSION" == "latest" ]; then
|
||||
if ! release_object="$(
|
||||
curl -fsSL "https://downloads.gtnewhorizons.com/versions.json" \
|
||||
| jq -r '.versions|to_entries|sort_by(.value.releaseDate)|map(select(.value.title=="Stable release"))|.[-1]'
|
||||
| jq -r '(.versions // .)|to_entries|sort_by(.value.releaseDate)|map(select(.value.title=="Stable release"))|.[-1]'
|
||||
)"; then logError "Failed to retrieve release from https://downloads.gtnewhorizons.com/versions.json"
|
||||
exit 1
|
||||
fi
|
||||
@@ -31,13 +32,18 @@ function getGTNHdownloadPath(){
|
||||
else
|
||||
if ! release_object="$(
|
||||
curl -fsSL "https://downloads.gtnewhorizons.com/versions.json" \
|
||||
| jq -r --arg USRIN $GTNH_PACK_VERSION '.versions|to_entries|sort_by(.value.releaseDate)|map(select(.key==$USRIN))|.[]'
|
||||
| jq -r --arg USRIN "$GTNH_PACK_VERSION" '(.versions // .)|to_entries|sort_by(.value.releaseDate)|map(select(.key==$USRIN))|.[]'
|
||||
)"; then logError "Failed to retrieve release from https://downloads.gtnewhorizons.com/versions.json"
|
||||
exit 1
|
||||
fi
|
||||
log "Selected $(jq -r '.key' <<< "$release_object") as matching version for download."
|
||||
|
||||
fi
|
||||
|
||||
if [[ -z $release_object ]]; then
|
||||
logError "No release found for GTNH_PACK_VERSION=$GTNH_PACK_VERSION. Please check if the version is valid."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Select compatible server files for java version
|
||||
if (( current_java_version == 8 )); then
|
||||
@@ -59,6 +65,10 @@ function getGTNHdownloadPath(){
|
||||
|
||||
fi
|
||||
|
||||
if [[ -z $gtnh_download_path ]]; then
|
||||
logError "Server files not found! Please check if the selected GTNH_PACK_VERSION=$GTNH_PACK_VERSION is valid."
|
||||
exit 1
|
||||
fi
|
||||
debug "Download source URL: $gtnh_download_path"
|
||||
|
||||
}
|
||||
@@ -70,80 +80,125 @@ function deleteGTNHbackup(){
|
||||
fi
|
||||
}
|
||||
|
||||
function downloadGTNH(){
|
||||
local gtnh_download=""
|
||||
base_dir=/data/.tmp/gtnh_base
|
||||
|
||||
debug "Creating temporary /data/.tmp/packs folder for GTNH download"
|
||||
mkdir -p /data/.tmp/packs
|
||||
trap 'rm -rf /data/.tmp' EXIT
|
||||
|
||||
log "Downloading $gtnh_download_path."
|
||||
if ! gtnh_download=$(mc-image-helper get -o /data/.tmp/packs --output-filename --skip-up-to-date "$gtnh_download_path"); then
|
||||
logError "Failed to download $gtnh_download_path"
|
||||
exit 1
|
||||
fi
|
||||
debug "Downloaded GTNH server files to $gtnh_download"
|
||||
|
||||
# Unpacking Server files into temporary directory
|
||||
log "Unpacking Server Files into $base_dir"
|
||||
mkdir -p "${base_dir}"
|
||||
extract "${gtnh_download}" "${base_dir}"
|
||||
|
||||
# Remove any eula file since container manages it
|
||||
debug "Removing eula.txt from $base_dir"
|
||||
rm -f "${base_dir}/eula.txt"
|
||||
|
||||
# recalculate the actual base directory of content
|
||||
if ! base_dir=$(mc-image-helper find \
|
||||
--max-depth=3 --type=directory --name=mods,config \
|
||||
--only-shallowest --fail-no-matches --format '%h' \
|
||||
"$base_dir"); then
|
||||
logError "Unable to find content base of downloaded Server Files"
|
||||
exit 1
|
||||
fi
|
||||
debug "Base directory of unpacked Server Files: $base_dir"
|
||||
}
|
||||
|
||||
function updateGTNHresource(){
|
||||
local resource="$1"
|
||||
local new_resource="$2"
|
||||
log "Trying to update $resource"
|
||||
|
||||
if [[ -z "$resource" ]]; then
|
||||
logWarning "No resource specified for update"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [[ -e "$resource" ]]; then
|
||||
log "Deleting existing resource: $resource"
|
||||
if ! rm -rf "$resource"; then
|
||||
logError "Failed to delete resource: $resource"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -d "$new_resource" ]]; then
|
||||
log "Copying $new_resource to /data"
|
||||
if ! cp -r "$new_resource" "/data/"; then
|
||||
logError "Failed to copy $new_resource to /data"
|
||||
exit 1
|
||||
fi
|
||||
return 0
|
||||
fi
|
||||
if [[ -f "$new_resource" ]]; then
|
||||
log "Copying $new_resource to /data"
|
||||
if ! cp "$new_resource" "/data/"; then
|
||||
logError "Failed to copy $new_resource to /data"
|
||||
exit 1
|
||||
fi
|
||||
return 0
|
||||
fi
|
||||
|
||||
logWarning "Resource update failed: $new_resource does not exist!"
|
||||
return 0
|
||||
}
|
||||
|
||||
function updateGTNH(){
|
||||
# Get the current date and time
|
||||
current_datetime=$(date +%Y-%m-%dT%H:%M)
|
||||
local current_datetime=""
|
||||
current_datetime=$(date +%Y-%m-%dT+%H%M)
|
||||
|
||||
# Define folders and files to update
|
||||
folders_to_update=("libraries" "mods" "resources" "scripts")
|
||||
files_to_update=("lwjgl3ify-forgePatches.jar" "java9args.txt" "startserver-java9.bat" "startserver-java9.sh" "forge-1.7.10-10.13.4.1614-1.7.10-universal.jar" "startserver.bat" "startserver.sh" "server-icon.png")
|
||||
config_folder="config"
|
||||
backup_folder="/data/gtnh-upgrade-$current_datetime"
|
||||
journey_map_folder="JourneyMapServer"
|
||||
|
||||
# Delete specified folders if they exist
|
||||
for folder in "${folders_to_update[@]}"; do
|
||||
folder_path="/data/$folder"
|
||||
if [[ -d "$folder_path" ]]; then
|
||||
log "Deleting folder: $folder_path"
|
||||
rm -rf "$folder_path"
|
||||
fi
|
||||
done
|
||||
|
||||
# Delete specific files if they exist
|
||||
for file in "${files_to_update[@]}"; do
|
||||
file_path="/data/$file"
|
||||
if [[ -f "$file_path" ]]; then
|
||||
log "Deleting file: $file_path"
|
||||
rm -f "$file_path"
|
||||
fi
|
||||
done
|
||||
# base_dir is already defined in handleGTNH function
|
||||
local folders_to_update=("libraries" "mods" "resources" "scripts")
|
||||
local files_to_update=("lwjgl3ify-forgePatches.jar" "java9args.txt" "startserver-java9.bat" "startserver-java9.sh" "forge-1.7.10-10.13.4.1614-1.7.10-universal.jar" "startserver.bat" "startserver.sh" "server-icon.png")
|
||||
local config_folder="config"
|
||||
local backup_folder="/data/gtnh-upgrade-$current_datetime"
|
||||
local journey_map_folder="JourneyMapServer"
|
||||
|
||||
# Backup the config folder
|
||||
if [[ -d "/data/$config_folder" ]]; then
|
||||
log "Creating backup of /data/$config_folder at $backup_folder"
|
||||
cp -r "/data/$config_folder" "$backup_folder"
|
||||
log "Deleting original /data/$config_folder"
|
||||
rm -rf "/data/$config_folder"
|
||||
fi
|
||||
|
||||
# Updating the required folders in data directory
|
||||
for folder in "${folders_to_update[@]}" "$config_folder"; do
|
||||
if [[ -d "$base_dir/$folder" ]]; then
|
||||
log "Copying $folder to /data"
|
||||
cp -r "$base_dir/$folder" "/data/"
|
||||
else
|
||||
logWarning "Folder $folder not found in the unzipped data!"
|
||||
fi
|
||||
done
|
||||
|
||||
# Copy specific files to the /data directory
|
||||
for file in "${files_to_update[@]}"; do
|
||||
if [[ -f "$base_dir/$file" ]]; then
|
||||
log "Copying $file to /data"
|
||||
cp "$base_dir/$file" "/data/"
|
||||
else
|
||||
logWarning "File $file not found in the unzipped data!"
|
||||
fi
|
||||
done
|
||||
# Update resources from unpacked server files to /data
|
||||
for resource in "${folders_to_update[@]}" "$config_folder" "${files_to_update[@]}"; do
|
||||
local resource_path="/data/$resource"
|
||||
local new_resource_path="$base_dir/$resource"
|
||||
|
||||
# Ensure the config folder exists
|
||||
if [[ ! -d "$config_folder" ]]; then
|
||||
log "$config_folder does not exist. Creating it now."
|
||||
mkdir -p "$config_folder"
|
||||
fi
|
||||
debug "Updating resource: $resource_path with new resource: $new_resource_path"
|
||||
updateGTNHresource "$resource_path" "$new_resource_path"
|
||||
done
|
||||
|
||||
# Restore JourneyMapServer folder from backup
|
||||
if [[ -d "$backup_folder/$journey_map_folder" ]]; then
|
||||
log "Restoring $journey_map_folder to $config_folder"
|
||||
cp -r "$backup_folder/$journey_map_folder" "$config_folder/"
|
||||
if [[ ! -d "/data/$config_folder" ]]; then
|
||||
log "/data/$config_folder folder does not exist. Creating it now."
|
||||
mkdir -p "/data/$config_folder"
|
||||
fi
|
||||
log "Restoring $journey_map_folder to /data/$config_folder"
|
||||
cp -r "$backup_folder/$journey_map_folder" "/data/$config_folder/"
|
||||
else
|
||||
logWarning "$journey_map_folder not found in backup!"
|
||||
fi
|
||||
|
||||
# Copy the changelog file to /data
|
||||
local gtnh_changelog_file=""
|
||||
gtnh_changelog_file=$(mc-image-helper find --max-depth=1 --type=file --name=changelog*.md "$base_dir")
|
||||
if [[ -n "$gtnh_changelog_file" ]]; then
|
||||
debug "Found changelog file: $gtnh_changelog_file"
|
||||
log "Copying changelog file to /data"
|
||||
cp -f "$gtnh_changelog_file" /data/
|
||||
fi
|
||||
@@ -160,49 +215,19 @@ function handleGTNH() {
|
||||
deleteGTNHbackup
|
||||
fi
|
||||
|
||||
if [[ -n $GTNH_PACK_VERSION ]] && isFalse "$SKIP_GTNH_UPDATE_CHECK" ; then
|
||||
if [[ -n "$GTNH_PACK_VERSION" ]] && isFalse "$SKIP_GTNH_UPDATE_CHECK" ; then
|
||||
|
||||
getGTNHdownloadPath
|
||||
|
||||
if [[ -z $gtnh_download_path ]]; then
|
||||
logError "Server files not found for GTNH_PACK_VERSION=$GTNH_PACK_VERSION! Download not possible!"
|
||||
exit 1
|
||||
fi
|
||||
log "Server files located! Will proceed update $gtnh_download_path."
|
||||
|
||||
|
||||
# Decide if update or install is needed or not.
|
||||
if [[ ! -f /data/.gtnh-version || "$(basename "$gtnh_download_path")" != "$(cat /data/.gtnh-version)" ]]; then
|
||||
log "Update/Install required: /data/.gtnh-version is missing or does not match the selected version $(basename "$gtnh_download_path")."
|
||||
|
||||
mkdir -p /data/packs
|
||||
log "Downloading $gtnh_download_path."
|
||||
if ! gtnh_download=$(mc-image-helper get -o /data/packs --output-filename --skip-up-to-date "$gtnh_download_path"); then
|
||||
logError "Failed to download $gtnh_download_path"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Unpacking Server files into temporary directory
|
||||
log "Unpacking Server Files..."
|
||||
original_base_dir=/data/.tmp/gtnh_base
|
||||
base_dir=$original_base_dir
|
||||
rm -rf "${base_dir}"
|
||||
mkdir -p "${base_dir}"
|
||||
extract "${gtnh_download}" "${base_dir}"
|
||||
trap 'rm -rf /data/.tmp' EXIT
|
||||
# Removing downloaded zip
|
||||
rm -f "$gtnh_download"
|
||||
|
||||
# Remove any eula file since container manages it
|
||||
rm -f "${base_dir}/eula.txt"
|
||||
|
||||
# recalculate the actual base directory of content
|
||||
if ! base_dir=$(mc-image-helper find \
|
||||
--max-depth=3 --type=directory --name=mods,config \
|
||||
--only-shallowest --fail-no-matches --format '%h' \
|
||||
"$base_dir"); then
|
||||
logError "Unable to find content base of downloaded Server Files"
|
||||
exit 1
|
||||
fi
|
||||
# Download and unpack GTNH server files
|
||||
downloadGTNH
|
||||
log "GTNH server files downloaded and unpacked to $base_dir."
|
||||
|
||||
# Split installation from update path. Check for version file.
|
||||
if [[ -f /data/.gtnh-version ]]; then
|
||||
@@ -212,10 +237,12 @@ function handleGTNH() {
|
||||
log "No .gtnh-version file detected! Assuming no old server exists. Proceed installing new server..."
|
||||
cp -R -f "${base_dir}"/* /data
|
||||
fi
|
||||
|
||||
# Update .gtnh-version
|
||||
basename "$gtnh_download_path" > /data/.gtnh-version
|
||||
# Cleaning up
|
||||
rm -rf "$original_base_dir"
|
||||
|
||||
# Cleaning up temporary files
|
||||
rm -rf /data/.tmp
|
||||
|
||||
else
|
||||
log "No update required: /data/.gtnh-version matches the selected version $(basename "$gtnh_download_path")."
|
||||
|
||||
@@ -24,7 +24,7 @@ elif [[ $PAPER_DOWNLOAD_URL ]]; then
|
||||
--url="$PAPER_DOWNLOAD_URL"
|
||||
)
|
||||
|
||||
if [[ $CLEAN_SERVER_LIBRARIES ]]; then
|
||||
if isTrue $CLEAN_SERVER_LIBRARIES; then
|
||||
args+=(--clean-libraries)
|
||||
fi
|
||||
|
||||
@@ -45,7 +45,7 @@ else
|
||||
args+=(--build="$PAPER_BUILD")
|
||||
fi
|
||||
|
||||
if [[ $CLEAN_SERVER_LIBRARIES ]]; then
|
||||
if isTrue $CLEAN_SERVER_LIBRARIES; then
|
||||
args+=(--clean-libraries)
|
||||
fi
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ IFS=$'\n\t'
|
||||
: "${PURPUR_BUILD:=LATEST}"
|
||||
: "${PURPUR_DOWNLOAD_URL:=}"
|
||||
: "${PURPUR_CONFIG_REPO:=}"
|
||||
: "${CLEAN_SERVER_LIBRARIES:=true}"
|
||||
|
||||
# shellcheck source=start-utils
|
||||
. "$(dirname "$0")/start-utils"
|
||||
@@ -13,10 +14,15 @@ isDebugging && set -x
|
||||
resultsFile=/data/.purpur.env
|
||||
|
||||
if [[ $PURPUR_DOWNLOAD_URL ]]; then
|
||||
if ! mc-image-helper install-purpur \
|
||||
--output-directory=/data \
|
||||
--results-file="$resultsFile" \
|
||||
--url="${PURPUR_DOWNLOAD_URL}"; then
|
||||
args=(
|
||||
--output-directory=/data
|
||||
--results-file="$resultsFile"
|
||||
--url="${PURPUR_DOWNLOAD_URL}"
|
||||
)
|
||||
if isTrue "$CLEAN_SERVER_LIBRARIES"; then
|
||||
args+=(--clean-libraries)
|
||||
fi
|
||||
if ! mc-image-helper install-purpur "${args[@]}"; then
|
||||
logError "Failed to download from custom Purpur URL"
|
||||
exit 1
|
||||
fi
|
||||
@@ -29,6 +35,9 @@ else
|
||||
if [[ $PURPUR_BUILD ]]; then
|
||||
args+=(--build="$PURPUR_BUILD")
|
||||
fi
|
||||
if isTrue "$CLEAN_SERVER_LIBRARIES"; then
|
||||
args+=(--clean-libraries)
|
||||
fi
|
||||
if ! mc-image-helper install-purpur "${args[@]}"; then
|
||||
logError "Failed to download Purpur"
|
||||
exit 1
|
||||
|
||||
@@ -50,6 +50,16 @@ function handlePackwiz() {
|
||||
logError "Failed to run packwiz installer"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# packwiz may have just downloaded/updated the env file referenced by
|
||||
# LOAD_ENV_FROM_FILE. The initial load in start-configuration happened
|
||||
# before this point, so re-load it now to pick up the pack's values for
|
||||
# the remaining setup stages (server.properties, JVM args, etc.).
|
||||
if [[ ${LOAD_ENV_FROM_FILE:-} ]]; then
|
||||
if ! loadEnvFromFile "${LOAD_ENV_FROM_FILE}"; then
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
@@ -560,6 +560,17 @@ function extract() {
|
||||
# remaining args are paths within the archive to extract; if none, extract everything
|
||||
|
||||
type=$(file -b --mime-type "${src}")
|
||||
if [[ "$type" == application/octet-stream ]]; then
|
||||
logWarning "Detected non-specific file type $type for $src"
|
||||
case "$src" in
|
||||
*.zip)
|
||||
log "Assuming zip from extension"
|
||||
type=application/zip
|
||||
;;
|
||||
# otherwise fall through to
|
||||
esac
|
||||
fi
|
||||
|
||||
case "${type}" in
|
||||
application/zip)
|
||||
unzip -o -q -d "${destDir}" "${src}" "$@"
|
||||
|
||||
@@ -46,7 +46,7 @@ setupOnlyMinecraftTest(){
|
||||
start=$(date +%s)
|
||||
status=PASSED
|
||||
verify=
|
||||
if ! logs=$(docker compose run --rm -e SETUP_ONLY=true -e DEBUG="${DEBUG:-false}" mc 2>&1); then
|
||||
if ! logs=$(docker compose run --rm -e SETUP_ONLY=true -e DEBUG="${DEBUG:-false}" -e GH_TOKEN="${GH_TOKEN:-}" mc 2>&1); then
|
||||
status=FAILED
|
||||
outputContainerLog "$logs"
|
||||
result=1
|
||||
|
||||
Reference in New Issue
Block a user