v2.0
The first Judgels release with proper versioning! π
This release focuses on three things:
- Simplicity in understanding the concepts for end users, by removing the Greek codenames from public usage. Now it is just "server", "client", and "grader".
- Simplicity in deployment, by merging the backend microservices into one server monolithic app.
- Simplicity in development, by having a single framework for backend, Dropwizard (removed Play framework).
Migrating from "v1"? See: https://judgels.toki.id/docs/migration-guides/1to2.
Judgels server
Breaking changes
- Merged Jophiel, Sandalphon, Uriel, Jerahmeel into one monolithic app: "Judgels server" (Docker image:
ghcr.io/ia-toki/judgels/server
). - Problem/lesson partner permissions are simplified and collapsed into just two:
VIEW
: can see everything,UPDATE
: can edit everything.- Old partners will have the
UPDATE
permission if and only if the "Is allowed to edit problem" checkbox is ticked, otherwiseVIEW
.
- The default domain for "Sandalphon" web interface (now called admin web interface) is
admin.*
(formerlysandalphon.*
) - Removed support for nginx config for RabbitMQ management interface.
New features
- Changed base Docker alpine image to
alpine:3.18.0
and then install Java manually (wasopenjdk:8u181-jre-alpine3.8
). - Problem/lesson partners can now be added in bulk via CSV input.
Judgels client
Breaking changes
- Renamed Raphael app to: "Judgels client" (Docker image:
ghcr.io/ia-toki/judgels/client
).
Judgels grader
Breaking changes
- Renamed Gabriel app to: "Judgels grader" (Docker image:
ghcr.io/ia-toki/judgels/grader
).
New features
- Graders can now sync the required test data from Judgels server automatically during grading.
- Ubuntu 22.04 is finally supported, by bumping Isolate to 1.10.1 (from 1.8.1).
Ansible deployment
Breaking changes
- The admin interface's default domain name is now
admin.*
(fromsandalphon.*
). - Changed docker restart policy to
on-failure
with max retries 3 (fromalways
). - Changed the host mount point from
/judgels
to/opt/judgels
. - Renamed file
dist/hosts
=>dist/hosts.ini
. - Renamed file
dist/env.yml
=>env/vars.yml
. - Renamed these keys in
env/vars.yml
:judgels_{name,slogan,title,description}
=>app_{name,slogan,title,description}
raphael_url
=>nginx_domain_judgels_client
judgels_server_api_url
=>nginx_domain_judgels_server_api
sandalphon_url
=>nginx_domain_judgels_server_admin
judgels_api_url
=>nginx_domain_judgels_server_api
letsencrypt_email
=>nginx_certbot_email
jophiel_superadminCreator_initialPassword
=>jophiel_superadmin_initialPassword
- Removed these keys in
env/vars.yml
:{jophiel,uriel,jerahmeel}_url
(replaced withnginx_domain_*
){jophiel,sandalphon,uriel,jerahmeel,gabriel}_xmx
(replaced withjava_opts_*
)judgels_mode
(alwaysJUDGELS
for now)judgels_scheme
(alwayshttps
){db,rabbitmq}_host
(alwayslocalhost
)db_options
(always?useSSL=false
)
New features
- New keys in
env/vars.yml
:app_version
: Docker image tagjava_opts_judgels_{server,grader}
: JVM opts. Any opts is supported, not limited to-Xmx
.
- Allowed letsencrypt ACME challenges to be done over https.
For developers
- Reworked the Java projects into the following subprojects:
judgels-commons
judgels-server-{api,app}
judgels-grader-{api,engines,app}
- The former {Jophiel, Sandalphon, Uriel, Jerahmeel, Gabriel} microservices are now just Java packages inside the
judgels-server-*
projects. - The administration (non-React) interface is now called "Michael". It is rewritten from Play framework to just Dropwizard, with Freemarker templating. Now, all backend logic are written in just one framework (Dropwizard), reducing dev confusion.
- Bumped minimal Java version to 11 (from 8).
- Bumped Gradle to 8.1.1 (from 6.0.1).
- Bumped
org.glassfish.jersey.core:jersey-client
to 2.30 (from 2.25.1). - Bumped
caffeine
to 3.0.2 (from 2.8.1). - Removed all Palantir dependencies (
sls-packaging
,launch-config
,baseline
,git-version
,conjure
). - Removed
wiremock
dependency. - Removed jquery dependency.