diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml new file mode 100644 index 00000000..035e7812 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -0,0 +1,32 @@ +name: Bug Report +description: File a bug report +labels: + - bug + - status/needs triage +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to report a bug. + + Please double check some things first: + - Do you just have a question about something? If so, asking in the [Q&A Discussions](https://github.com/itzg/docker-minecraft-server/discussions/categories/q-a) or asking on [the Discord server](https://discord.gg/DXfKpjB) would be best. + - Is this bug happening after the `[init]` prefixed logs and after the log that says "Starting the Minecraft server"? If so, please report the bug with Mojang or the respective server provider. + - Are you seeing a performance problem? If so, that is typically outside the scope of the image setup mechanims. Ask a question as above or contact the respective server provider. + - type: textarea + id: problem + attributes: + label: Describe the problem + validations: + required: true + - type: textarea + id: container + attributes: + label: Container definition + description: Please provide the compose file or run command used to create the container + - type: textarea + id: logs + attributes: + label: Container logs + description: | + Please provide container logs from the start of the container, which will be the ones prefixed with `[init]`. It is even better if you can set the variable `DEBUG` to "true" and provide those debug container logs. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/enhancement.yml b/.github/ISSUE_TEMPLATE/enhancement.yml new file mode 100644 index 00000000..8b739742 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/enhancement.yml @@ -0,0 +1,29 @@ +name: Enhancement Request +description: Request an enhancement +labels: + - enhancement + - status/needs triage +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to request an enhancement. + + Even if you plan on submitting a pull request with a contributed enhancement it is best to describe the enhancement here first. Somebody might already be working on a similar thing and could use your help. + - type: dropdown + id: type + attributes: + label: Enhancement Type + options: + - Improve an existing feature + - A completely new feature + - New server type + - Not sure + validations: + required: true + - type: textarea + id: description + attributes: + label: Describe the enhancement + validations: + required: true \ No newline at end of file diff --git a/.github/no-response.yml b/.github/no-response.yml deleted file mode 100644 index 8618e88c..00000000 --- a/.github/no-response.yml +++ /dev/null @@ -1,6 +0,0 @@ -daysUntilClose: 14 -responseRequiredLabel: "status/waiting on feedback" -closeComment: > - This issue has been automatically closed because there has been no response - after requesting feedback. Please feel free to re-open this issue if the - scenario still exists and provide a comment with more information. \ No newline at end of file diff --git a/.github/workflows/stale-check.yml b/.github/workflows/stale-check.yml new file mode 100644 index 00000000..ddb9ef07 --- /dev/null +++ b/.github/workflows/stale-check.yml @@ -0,0 +1,26 @@ +name: Stale Check + +on: + issue_comment: + schedule: + - cron: 0 2 * * * + +jobs: + check: + runs-on: ubuntu-20.04 + permissions: + issues: write + pull-requests: write + steps: + - name: Process Stale Issues + uses: actions/stale@v4.0.0 + with: + stale-issue-label: status/stale + stale-pr-label: status/stale + stale-issue-message: > + This issue is stale because it has been open 30 days with no activity. + Please add a comment describing the reason to keep this issue open. + days-before-stale: 30 + days-before-close: 5 + exempt-issue-labels: 'enhancement,keep,status/needs triage' + diff --git a/README.md b/README.md index f8c1e6c2..d34486a9 100644 --- a/README.md +++ b/README.md @@ -131,8 +131,9 @@ By default, the container will download the latest version of the "vanilla" [Min * [Description](#description) * [Enabling Autopause](#enabling-autopause) * [Running on RaspberryPi](#running-on-raspberrypi) + * [Contributing](#contributing) - + @@ -281,13 +282,13 @@ To use a different version of Java, please use a docker tag to run your Minecraf | java11-openj9 | 11 | Debian | OpenJ9 | amd64 | | java16 | 16 | Debian | Hotspot | amd64,arm64,armv7 | | java16-openj9 | 16 | Debian | OpenJ9 | amd64 | -| java17 | 17 | Ubuntu | Hotspot | amd64 | +| java17 | 17 | Ubuntu | Hotspot | amd64,arm64,armv7 | For example, to use Java version 16 on any supported architecture: docker run --name mc itzg/minecraft-server:java16 -> Keep in mind that some versions of Minecraft server can't work on the newest versions of Java. Also, FORGE doesn't support openj9 JVM implementation. +> Keep in mind that some versions of Minecraft server, such as Forge before 1.17, can't work on the newest versions of Java. Instead, one of the Java 8 images should be used. Also, FORGE doesn't support openj9 JVM implementation. ### Deprecated Image Tags @@ -516,11 +517,14 @@ By default the latest build will be used; however, a specific build number can b ### Running a SpongeVanilla server Enable SpongeVanilla server mode by adding a `-e TYPE=SPONGEVANILLA` to your command-line. + By default the container will run the latest `STABLE` version. If you want to run a specific version, you can add `-e SPONGEVERSION=1.11.2-6.1.0-BETA-19` to your command-line. +Beware that current [Sponge](https://www.spongepowered.org) `STABLE` versions for Minecraft 1.12 require using [the Java 8 tag](#running-minecraft-server-on-different-java-version): + docker run -d -v /path/on/host:/data -e TYPE=SPONGEVANILLA \ - -p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server + -p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server:java8-multiarch You can also choose to use the `EXPERIMENTAL` branch. Just change it with `SPONGEBRANCH`, such as: @@ -1284,7 +1288,9 @@ The values of all three are passed directly to the JVM and support format/units -e MEMORY=2G -> NOTE: the settings above only set the Java **heap** limits. Memory resource requests and limits on the overall container should also account for non-heap memory usage. An extra 25% is [a general best practice](https://dzone.com/articles/best-practices-java-memory-arguments-for-container). +> To let the JVM calculate the heap size from the container declared memory limit, unset `MEMORY` with an empty value, such as `-e MEMORY=""`. + +> The settings above only set the Java **heap** limits. Memory resource requests and limits on the overall container should also account for non-heap memory usage. An extra 25% is [a general best practice](https://dzone.com/articles/best-practices-java-memory-arguments-for-container). ### JVM Options @@ -1446,3 +1452,7 @@ To run this image on a RaspberryPi 3 B+, 4, or newer, use any of the image tags > NOTE: you may need to lower the memory allocation, such as `-e MEMORY=750m` > If experiencing issues such as "sleep: cannot read realtime clock: Operation not permitted", ensure `libseccomp` is up to date on your host. In some cases adding `:Z` flag to the `/data` mount may be needed, [but use cautiously](https://docs.docker.com/storage/bind-mounts/#configure-the-selinux-label). + +## Contributing + +See [Development](DEVELOPMENT.md) and [Building](BUILDING.md). diff --git a/scripts/start-finalExec b/scripts/start-finalExec index 60e78d40..1112f104 100755 --- a/scripts/start-finalExec +++ b/scripts/start-finalExec @@ -70,8 +70,8 @@ if [[ ${GUI} = false || ${GUI} = FALSE ]]; then EXTRA_ARGS+=" nogui" fi -# put these prior JVM_OPTS at the end to give any memory settings there higher precedence -log "Setting initial memory to ${INIT_MEMORY:=${MEMORY}} and max to ${MAX_MEMORY:=${MEMORY}}" +: "${INIT_MEMORY:=${MEMORY}}" +: "${MAX_MEMORY:=${MEMORY}}" expandedDOpts= if [ -n "$JVM_DD_OPTS" ]; then @@ -157,7 +157,15 @@ if isTrue "${DEBUG_MEMORY}"; then free -m fi -JVM_OPTS="-Xms${INIT_MEMORY} -Xmx${MAX_MEMORY} ${JVM_OPTS}" +if [[ ${INIT_MEMORY} || ${MAX_MEMORY} ]]; then + log "Setting initial memory to ${INIT_MEMORY:=${MEMORY}} and max to ${MAX_MEMORY:=${MEMORY}}" + if [[ ${INIT_MEMORY} ]]; then + JVM_OPTS="-Xms${INIT_MEMORY} ${JVM_OPTS}" + fi + if [[ ${MAX_MEMORY} ]]; then + JVM_OPTS="-Xmx${MAX_MEMORY} ${JVM_OPTS}" + fi +fi function copyFilesForCurseForge() { # copy player modification files unconditionally since their @@ -197,11 +205,11 @@ elif [[ ${TYPE} == "CURSEFORGE" ]]; then cat > "${FTB_DIR}/settings-local.sh" <