The judge system used by ShiftForward to run the ShiftForward Challenge at ENEI 2018.
First of all, you'll need to create a file with a list of entry codes that can be used by participants to register.
You can do that by creating an entry_codes.txt
file at the root of this project with one entry code per line.
Then, copy or rename src/main/resources/application.conf.template
to
an application.conf
file in the same location. You can tweak the settings there, which override the defaults present
in src/main/resources/reference.conf
.
You'll need SBT to build and run the server and Docker to run submissions in a safe environment. Once you have both installed in your system, you can run this server by executing:
sbt reStart
A web UI will be available at http://localhost:8090
and the server will start running validations and tournaments
periodically.
This judge system is prepared to run as a distributed system in which the Web UI, a Runner Master (orchestrating the validations and tournaments to run) and several Runner Workers (running the submissions as directed by the Runner Master) are launched on different physical or virtual servers. Different command-line parameters can be passed to SBT to change the behavior of the process:
# run the Web UI and an internal master-worker system
sbt reStart
# run the Web UI only
sbt reStart --http
# run a Runner Master only
sbt reStart --runner-master
# run a Runner Worker only
sbt reStart --runner-worker
The Web UI exchanges information with the Runner Master through the database only. The Runner Master forms a cluster
with all Runner Workers using Akka Cluster, allowing them to
exchange messages in real-time. Therefore, in order to get the system working in a distributed manner you need to
provide a persistent database and
configure Akka Cluster properly in your
application.conf
(reference.conf
already helps with most of that).