Thanks for considering taking the time to contribute to Holocore! ❤️
This section will guide you through setting up a development environment for Holocore.
The project uses Docker to make it easy to run a MongoDB instance.
You can download Docker here.
If you see the error "Could not find a valid Docker environment" when running automated tests on Linux, you may additionally need to do the following for them to work:
$ sudo groupadd docker
$ sudo gpasswd -a $USER docker
$ sudo service docker restart
$ sudo chmod 666 /var/run/docker.sock
We recommend using IntelliJ IDEA as your IDE. It's free and has great support for Gradle projects.
It will also automatically use the project's code style settings and add license headers to relevant files. This greatly reduces the amount of friction when contributing.
Assuming you are using IntelliJ IDEA, you can easily install the correct JDK version by opening the project in IntelliJ IDEA and clicking on the "Install JDK" link in the top right corner.
If you already have a JDK installed, but perhaps not the correct version, follow this guide to download a JDK.
The project uses git submodules.
Clone them by running: git submodule update --init
.
You may have to manually update the submodules in the future, if they become outdated: git submodule update
.
A MongoDB instance can be bootstrapped by running docker-compose up -d
.
This will run and initialize a MongoDB instance with a default game server user.
- Username: user
- Password: pass
This will also run a web UI, which can be accessed in the browser at: http://localhost:8081
You can stop both with: docker-compose down
.
In IntelliJ idea, run the Start run configuration.
NOTE: Docker must be running in the background for MongoDB to start properly.
In IntelliJ idea, run the Tests run configuration.
If you're new to contributing to open source projects, we recommend reading this guide.
Some issues require coding, while others are more focused on documentation or other non-coding tasks.
If you're new to the project, you can start by looking at the good first issues.
These are issues that are relatively easy to fix, and are intended for new contributors to get started with. We will try to provide as much information as possible in the issue description, but don't hesitate to ask for more information if you need it.
We're happy to help you get started with your first contribution, so don't hesitate to ask for help. A good place to ask questions is on our Discord server, in the #development channel.
Once you have completed one or two Good first issues, you can start looking at other issues. These may be more complex, but we're happy to help you get started. The issue description is likely to be less detailed, so you may have to ask for more information.
The project is written in Java and Kotlin, and uses Gradle as its build system.
We are in the process of transitioning from Java to Kotlin, so some parts of the codebase are still written in Java.
To make that transition as easy as possible, we recommend you write new code in Kotlin. If you have to edit existing Java code, you may use Java.
If we find ourselves editing a piece of Java code often, we should consider rewriting it in Kotlin. This would be a separate task, and should be discussed in an issue.
When you're ready to submit your changes, you can create a pull request.
A pull request is a way to propose your changes to the project. It allows other contributors to review the changes, and suggest improvements.
To create a pull request, follow this guide.
Once you've created a pull request, it will be reviewed by other contributors.
If there are any issues or suggestions for improvements, you can simply push new commits, and they will automatically be added to the pull request.
Once the pull request has been approved, it will be merged into the master
branch.
If you've found a bug, please report it as an issue on the issues page.
Please include as much information as possible, such as:
- Steps to reproduce the bug
- What you expected to happen
- What actually happened
- Screenshots, if applicable
- Server logs, if applicable