Files
docker-minecraft-server/docs/misc/contributing/development.md

3.4 KiB

Adding a server type

Adding a new server TYPE can vary due to the complexity of obtaining and configuring each type; however, the addition of any server type includes at least the following steps:

  1. Copy an existing "start-deploy*" script, such as start-deployFabric and rename it accordingly making sure to retain the "start-deploy" prefix
  2. Modify the type-specific behavior between the "start-utils" preamble and the hand-off to start-setupWorld at the end of the script
  3. Develop and test the changes using the iterative process described below
  4. Add a case-entry to the case "${TYPE^^}" in start-configuration
  5. Add a section to the docs. It is recommended to copy-modify an existing section to retain a similar wording and level of detail
  6. Submit a pull request

Iterative script development

The included compose-dev.yml will mount the local scripts code into the container and allow for iterative development. Replace [-e key=value] with any environment variables you wish to set for testing the modified scripts.

docker compose -f compose-dev.yml run --rm -it [-e key=value]  mc-dev

!!! tip

To speed up the development cycle, it is recommended to set `SETUP_ONLY` to `true` as part of the run command above.

Using development copy of tools

In the cloned repo, such as mc-image-helper, install the distribution locally by running:

./gradlew installDist

The distribution will be installed in the project's build/install/mc-image-helper. Obtain the absolute path to that directory use in the next step.

Refer to the instructions above to mount any locally modified image scripts or build a local copy of the image using or with alternate BASE_IMAGE, as described above:

docker build -t itzg/minecraft-server .

Mount the local mc-image-helper distribution directory as a volume in the container at the path /usr/share/mc-image-helper, such as

docker run -it --rm \
  -v /path/to/mc-image-helper/build/install/mc-image-helper:/usr/share/mc-image-helper \
  -e EULA=true \
  itzg/minecraft-server

In a compose file, include the volume mount in the volumes section of the container definition:

services:
  mc:
    # ... usual container definition
    volumes:
      - /path/to/mc-image-helper/build/install/mc-image-helper:/usr/share/mc-image-helper:ro

For Go base tools, run

goreleaser release --snapshot --clean

Clone itzg/github-releases-proxy and run it according to the instructions shown there.

In the Docker build, configure the following

--build-arg GITHUB_BASEURL=http://host.docker.internal:8080 \
--build-arg APPS_REV=1

and declare one or more version overrides, such as

--build-arg MC_HELPER_VERSION=1.8.1-SNAPSHOT

Generating release notes

The following git command can be used to provide the bulk of release notes content:

git log --invert-grep --grep "^ci:" --grep "^misc:" --grep "^docs:" --pretty="* %s" 1.1.0..1.2.0