Skip to content

Latest commit

 

History

History
699 lines (579 loc) · 33.6 KB

CHANGELOG.md

File metadata and controls

699 lines (579 loc) · 33.6 KB

v1.6.0 (unreleased)

New Features

  • Added support for automatically redirecting stderr to stdout of the running program with the configuration flag redirect_stderr_to_stdout. Added configuration variable REDIRECT_STDERR_TO_STDOUT that can be used for setting default behaviour for every submission.
  • Added configuration variable DISALLOW_ORIGIN that can be used for disabling CORS only for specific origins.
  • Added configuration variables ALLOW_IP and DISALLOW_IP that can be used for allowing/disallowing only specific IP addresses that can use instance of Judge0 API.
  • Added support for built in maintenance mode that can be enabled with configuration variables MAINTENANCE_MODE and MAINTENANCE_MESSAGE. In maintenance mode clients cannot create or delete submissions i.e. they cannot create new database changes.
  • Added support for universal field * which returns all attributes of a submission.
  • Added route GET /statistics which returns some basic and useful information about Judge0 API instance.
  • Added basic support for callbacks which are called with HTTP verb PUT.
  • Added support for preseting custom files in sandbox.
  • Added routes GET /submissions/batch and POST /submissions/batch batch create and show or submissions.

Improvements

  • Use Redis queue with name that corresponds with the current Judge0 API version. This allows multiple instances of different versions of Judge0 API to use the same Redis instance.
  • Refactored submission field checking.

Bug Fixes

  • Fixed a bug that ignored custom setting of configuration variables enable_per_process_and_thread_time_limit and enable_per_process_and_thread_memory_limit.
  • Fixed a bug where cgroups flags for isolate were chosen in the wrong conditions.

Other Changes

  • Do not implicitly force wide open CORS settings when in development mode. I.e. variable ALLOW_ORIGIN can now also be used in development mode.
  • Removed output of configuration settings when server or worker starts.
  • Updated all the gems except Rails to the latest versions.
  • Changed default value of enable_per_process_and_thread_memory_limit to false.
  • Don't show total number of workers in /workers that is determined with configuration variable COUNT because that number is not relevant.

Deployment Procedure

With HTTPS (SSL/TLS)

  1. Install Docker and Docker Compose.
  2. Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.6.0/judge0-api-v1.6.0-https.zip
unzip judge0-api-v1.6.0-https.zip
  1. Change directory to judge0-api-v1.6.0-https:
cd judge0-api-v1.6.0-https
  1. Edit docker-compose.yml and change variables VIRTUAL_HOST, LETSENCRYPT_HOST and LETSENCRYPT_EMAIL.
  2. Run all services and wait few seconds until everything is initialized:
docker-compose up -d db redis
sleep 10s
docker-compose up -d
sleep 5s
  1. Your instance of Judge0 API v1.6.0 is now available at https://<YOUR DOMAIN>.

With HTTP

  1. Install Docker and Docker Compose.
  2. Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.6.0/judge0-api-v1.6.0.zip
unzip judge0-api-v1.6.0.zip
  1. Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.6.0
docker-compose up -d db redis
sleep 10s
docker-compose up -d
sleep 5s
  1. Your instance of Judge0 API v1.6.0 is now available at http://<IP ADDRESS OF YOUR SERVER>.

v1.5.0 (2020-01-01)

New Features

  • Added 30 new languages, archived 42 languages and kept active 2 languages from the last release. In total, there are now 32 active languages that can be used and all are updated to their latest versions as of the date of this release. Archived languages cannot be used anymore. Following table shows a status of every language that API supports.
ID Name Status
1 Bash (4.4) archived
2 Bash (4.0) archived
3 Basic (fbc 1.05.0) archived
4 C (gcc 7.2.0) archived
5 C (gcc 6.4.0) archived
6 C (gcc 6.3.0) archived
7 C (gcc 5.4.0) archived
8 C (gcc 4.9.4) archived
9 C (gcc 4.8.5) archived
10 C++ (g++ 7.2.0) archived
11 C++ (g++ 6.4.0) archived
12 C++ (g++ 6.3.0) archived
13 C++ (g++ 5.4.0) archived
14 C++ (g++ 4.9.4) archived
15 C++ (g++ 4.8.5) archived
16 C# (mono 5.4.0.167) archived
17 C# (mono 5.2.0.224) archived
18 Clojure (1.8.0) archived
19 Crystal (0.23.1) archived
20 Elixir (1.5.1) archived
21 Erlang (OTP 20.0) archived
22 Go (1.9) archived
23 Haskell (ghc 8.2.1) archived
24 Haskell (ghc 8.0.2) archived
25 Insect (5.0.0) archived
26 Java (OpenJDK 9 with Eclipse OpenJ9) archived
27 Java (OpenJDK 8) archived
28 Java (OpenJDK 7) archived
29 JavaScript (nodejs 8.5.0) archived
30 JavaScript (nodejs 7.10.1) archived
31 OCaml (4.05.0) archived
32 Octave (4.2.0) archived
33 Pascal (fpc 3.0.0) archived
34 Python (3.6.0) archived
35 Python (3.5.3) archived
36 Python (2.7.9) archived
37 Python (2.6.9) archived
38 Ruby (2.4.0) archived
39 Ruby (2.3.3) archived
40 Ruby (2.2.6) archived
41 Ruby (2.1.9) archived
42 Rust (1.20.0) archived
43 Plain Text Renamed from Text (plain text).
44 Executable Not changed.
45 Assembly (NASM 2.14.02) NEW
46 Bash (5.0.0) NEW
47 Basic (FBC 1.07.1) NEW
48 C (GCC 7.4.0) NEW
49 C (GCC 8.3.0) NEW
50 C (GCC 9.2.0) NEW
51 C# (Mono 6.6.0.161) NEW
52 C++ (GCC 7.4.0) NEW
53 C++ (GCC 8.3.0) NEW
54 C++ (GCC 9.2.0) NEW
55 Common Lisp (SBCL 2.0.0) NEW
56 D (DMD 2.089.1) NEW
57 Elixir (1.9.4) NEW
58 Erlang (OTP 22.2) NEW
59 Fortran (GFortran 9.2.0) NEW
60 Go (1.13.5) NEW
61 Haskell (GHC 8.8.1) NEW
62 Java (OpenJDK 13.0.1) NEW
63 JavaScript (Node.js 12.14.0) NEW
64 Lua (5.3.5) NEW
65 OCaml (4.09.0) NEW
66 Octave (5.1.0) NEW
67 Pascal (FPC 3.0.4) NEW
68 PHP (7.4.1) NEW
69 Prolog (GNU Prolog 1.4.5) NEW
70 Python (2.7.17) NEW
71 Python (3.8.1) NEW
72 Ruby (2.7.0) NEW
73 Rust (1.40.0) NEW
74 TypeScript (3.7.4) NEW
  • Added route GET /languages/:id for getting all attributes of specified language.
  • Added route GET /languages/all for getting a list of all languages (archived and active).
  • Added route DELETE /submissions/:token for deleting specified submission. Only authorized requests (users) are allowed to delete a submission.
  • Added configuration variable ENABLE_SUBMISSION_DELETE with default value set to false. By default you cannot delete a submission as long as this variable is set to false. When set to true then only authorized requests (users) can delete specific submission.
  • Added info routes GET /about, GET /version, GET /license and GET /isolate. Last route GET /isolate returns result from isolate --version command.

Improvements

  • Updated base image to judge0/api-base:1.0.0 which uses Debian "buster" and has installed Ruby 2.7.0.
  • Improved handling of an server error when one or more submission attributes cannot be serialized to JSON without Base64 encoding. User now gets an error with instructions to use base64_encoded=true query parameter.

Bug Fixes

  • Fixed example in configuration for using ALLOW_ORIGIN variable with multiple origins.
  • Fixed a bug where value of MAX_MAX_PROCESSES_AND_OR_THREADS was used as default value for max_processes_and_or_threads attribute of submission, whereas MAX_PROCESSES_AND_OR_THREADS should be used.

Other Changes

  • Increased maximum allowed compiler_options and command_line_arguments length to 512 characters.
  • Increased default value of MAX_PROCESSES_AND_OR_THREADS to 60.
  • Increased default value of MAX_MAX_PROCESSES_AND_OR_THREADS to 120.
  • Changed default value of RAILS_ENV to production.
  • Changed default value of INTERVAL to 0.1.
  • Updated year in LICENSE.
  • Added environment variables JUDGE0_{HOMEPAGE,SOURCE_CODE,MAINTAINER,VERSION}. Isolate sandbox inherits these variables and they are now available for use in user code.

Deployment Procedure

  1. Install Docker and Docker Compose.
  2. Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.5.0/judge0-api-v1.5.0.zip
unzip judge0-api-v1.5.0.zip
  1. Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.5.0
docker-compose up -d db redis
sleep 10s
docker-compose up -d
sleep 5s
  1. Your instance of Judge0 API v1.5.0 is now available at http://<IP OF YOUR SERVER>:3000.

v1.4.0 (2019-10-31)

New Features

  • Added support for compiler_options and command_line_arguments.
  • Added configuration variables ENABLE_COMPILER_OPTIONS, ALLOWED_LANGUAGES_FOR_COMPILER_OPTIONS and ENABLE_COMMAND_LINE_ARGUMENTS for controlling usage of compiler options and command line arguments.

Security Improvements

  • Run compilation process for compiled languages inside sandbox and use values of limit configuration variables for controlling sandbox resources.
  • Move application location from /usr/src/api to /api to prevent untrusted code from reading it.

Other Changes

  • Don't link math library for C language by default. You now need to send -lm in compiler_options.

Deployment Procedure

  1. Install Docker and Docker Compose.
  2. Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.4.0/judge0-api-v1.4.0.zip
unzip judge0-api-v1.4.0.zip
  1. Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.4.0
docker-compose up -d
sleep 10s
  1. Your instance of Judge0 API v1.4.0 is now available at http://<IP OF YOUR SERVER>:3000.

v1.3.1 (2019-09-16)

Improvements

  • Improved handling exec format error by introducing new status Exec Format Error.

Bug Fixes

  • Fixed bug where execution of Go code with no main package would induce execve("./main"): No such file or directory because Go compiler wouldn't create main binary.

Deployment Procedure

  1. Install Docker and Docker Compose.
  2. Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.3.1/judge0-api-v1.3.1.zip
unzip judge0-api-v1.3.1.zip
  1. Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.3.1
docker-compose up -d
sleep 10s
  1. Your instance of Judge0 API v1.3.1 is now available at http://<IP OF YOUR SERVER>:3000.

v1.3.0 (2019-09-15)

New Features

  • Added MAX_QUEUE_SIZE variable that defines a maximum submission queue size. If there is a new submission request and the queue is full, then that submission will be rejected.

Improvements

  • Improved worker shutdown procedure. Workers are now gracefully shutdown on docker stop.

Bug Fixes

  • Fixed a bug where authentication token was auto converted to integer.

Deployment Procedure

  1. Install Docker and Docker Compose.
  2. Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.3.0/judge0-api-v1.3.0.zip
unzip judge0-api-v1.3.0.zip
  1. Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.3.0
docker-compose up -d
sleep 10s
  1. Your instance of Judge0 API v1.3.0 is now available at http://<IP OF YOUR SERVER>:3000.

v1.2.2 (2019-09-07)

Securty Fixes

  • Fixed a bug that allowed anybody to read judge0-api.conf file. This bug was introduced in version v1.2.1 when config was mounted into container. With this fix, config is still mounted into container but not in /usr/src/api folder but rather in /. Root folder is not binded in isolate sandbox, whereas /usr/src/api is.

Other Changes

  • Don't allow execution of scripts in /usr/src/api folder.

Deployment Procedure

  1. Install Docker and Docker Compose.
  2. Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.2.2/judge0-api-v1.2.2.zip
unzip judge0-api-v1.2.2.zip
  1. Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.2.2
docker-compose up -d
sleep 10s
  1. Your instance of Judge0 API v1.2.2 is now available at http://<IP OF YOUR SERVER>:3000.

v1.2.1 (2019-08-24)

Improvements

  • Improved config loading. Config can now be changed and reload just with docker-compose restart command.

Bug Fixes

  • Fixed bug in run-worker script that didn't consider COUNT config variable.

Deployment Procedure

  1. Install Docker and Docker Compose.
  2. Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.2.1/judge0-api-v1.2.1.zip
unzip judge0-api-v1.2.1.zip
  1. Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.2.1
docker-compose up -d
sleep 10s
  1. Your instance of Judge0 API v1.2.1 is now available at http://<IP OF YOUR SERVER>:3000.

v1.2.0-nim0.20.0 (2019-06-26)

This image contains only The Nim Programming Language. Free public instance of this image is available on https://nim.api.judge0.com.

This image was build for the purpose of creating dedicated web playground for this language, and in the future I will add and deploy every new release of it. In the nim branch of Judge0 API Base I will follow and install new releases of Nim, and in the nim branch of Judge0 API I will maintain a Judge0 API that only has Nim available.

Free playground for the Nim programming language that uses Judge0 API is available at https://nim.ide.judge0.com.

Deployment Procedure

  1. Install Docker and Docker Compose.
  2. Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.2.0-nim0.20.0/judge0-api-v1.2.0-nim0.20.0.zip
unzip judge0-api-v1.2.0-nim0.20.0.zip
  1. Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.2.0-nim0.20.0
docker-compose up -d
sleep 10s
  1. Your instance of Judge0 API v1.2.0-nim0.20.0 is now available at http://<IP OF YOUR SERVER>:3000.

v1.2.0-vlang0.1.3 (2019-06-26)

This image contains only The V Programming Language, specifically only V compiler built from commit @b00a47be. Free public instance of this image is available on https://vlang.api.judge0.com.

This image was build for the purpose of creating dedicated web playground for this new programming language, and in the future I will add and deploy every new release of it. In the vlang branch of Judge0 API Base I will follow and install new releases of V, and in the vlang branch of Judge0 API I will maintain a Judge0 API that only has V available.

Free playground for the V programming language that uses Judge0 API is available at https://vlang.ide.judge0.com.

Deployment Procedure

  1. Install Docker and Docker Compose.
  2. Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.2.0-vlang0.1.3/judge0-api-v1.2.0-vlang0.1.3.zip
unzip judge0-api-v1.2.0-vlang0.1.3.zip
  1. Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.2.0-vlang0.1.3
docker-compose up -d
sleep 10s
  1. Your instance of Judge0 API v1.2.0-vlang0.1.3 is now available at http://<IP OF YOUR SERVER>:3000.

v1.2.0 (2019-06-17)

New Features

  • Added new language Executable that allows executing custom executable files.
  • Added new configuration variables: REDIS_PASSWORD, REDIS_PORT and POSTGRES_PORT.

Improvements

  • Improved run-server and run-worker scripts.

Bug Fixes

  • Fixed /etc/apt/sources.list that prevented package update.
  • Fixed cleanup bug that didn't remove sandbox files if tmp directory was not empty.
  • Fixed another UTF-8 problem with Python that @nguyenvanquan7826 reported.

Other Changes

Deployment Procedure

  1. Install Docker and Docker Compose.
  2. Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.2.0/judge0-api-v1.2.0.zip
unzip judge0-api-v1.2.0.zip
  1. Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.2.0
docker-compose up -d
sleep 10s
  1. Your instance of Judge0 API v1.2.0 is now available at http://<IP OF YOUR SERVER>:3000.

v1.1.5-python3.6.8 (2019-03-08)

On @guvenim request I have built an Judge0 API image that contains just Python 3.6.8. This release also shows what changes are necessary in api-base and api when you only want to use languages that you need.

Deployment Procedure

  1. Install Docker and Docker Compose.
  2. Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.1.5-python3.6.8/judge0-api-v1.1.5-python3.6.8.zip
unzip judge0-api-v1.1.5-python3.6.8.zip
  1. Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.1.5-python3.6.8
docker-compose up -d
sleep 10s
  1. Your instance of Judge0 API v1.1.5-python3.6.8 is now available at http://<IP OF YOUR SERVER>:3000.

v1.1.5 (2019-02-17)

Bug Fixes

  • Fixed problem with assigning compile output to submission when rerunning submission.

Other Changes

  • Remove unwanted newlines from compile output.

Deployment Procedure

  1. Install Docker and Docker Compose.
  2. Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.1.5/judge0-api-v1.1.5.zip
unzip judge0-api-v1.1.5.zip
  1. Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.1.5
docker-compose up -d
sleep 10s
  1. Your instance of Judge0 API v1.1.5 is now available at http://<IP OF YOUR SERVER>:3000.

v1.1.4 (2019-02-17)

Bug Fixes

  • Fixed problem with assigning compile output to submission when compile output is not empty.

Deployment Procedure

  1. Install Docker and Docker Compose.
  2. Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.1.4/judge0-api-v1.1.4.zip
unzip judge0-api-v1.1.4.zip
  1. Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.1.4
docker-compose up -d
sleep 10s
  1. Your instance of Judge0 API v1.1.4 is now available at http://<IP OF YOUR SERVER>:3000.

v1.1.3 (2019-02-15)

Improvements

  • Improved cleanup of sandbox by deleting stdin, stdout, stderr and meta file before running isolate cleanup.

Bug Fixes

  • Fixed problem with compile output that contained invalid byte sequence in UTF-8.
  • Fixed problem with submissions not changing their post-run attributes after rerun if compile error occured.

Deployment Procedure

  1. Install Docker and Docker Compose.
  2. Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.1.3/judge0-api-v1.1.3.zip
unzip judge0-api-v1.1.3.zip
  1. Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.1.3
docker-compose up -d
sleep 10s
  1. Your instance of Judge0 API v1.1.3 is now available at http://<IP OF YOUR SERVER>:3000.

v1.1.2 (2019-02-15)

Improvements

  • Improved reading from stdin and writing to stdout, stderr and meta. They are now not available in sandbox.

Bug Fixes

  • Fixed writing of source code and stdin to disc, they are now written as binary files to avoid UTF-8 problems.
  • Fixed problem with stripping output that contained invalid byte sequence in UTF-8.

Other Changes

Deployment Procedure

  1. Install Docker and Docker Compose.
  2. Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.1.2/judge0-api-v1.1.2.zip
unzip judge0-api-v1.1.2.zip
  1. Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.1.2
docker-compose up -d
sleep 10s
  1. Your instance of Judge0 API v1.1.2 is now available at http://<IP OF YOUR SERVER>:3000.

v1.1.1 (2019-02-13)

Bug Fixes

  • Fixed a problem when strip method was called on a nil class when expected output was nil.

Other Changes

  • Don't let worker update submission's finished_at attribute if it already exists. This allows Judge0 API administrators to manually rerun submissions from command line and preserve initial timestamps if some unexpected error occured.

Deployment Procedure

  1. Install Docker and Docker Compose.
  2. Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.1.1/judge0-api-v1.1.1.zip
unzip judge0-api-v1.1.1.zip
  1. Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.1.1
docker-compose up -d
sleep 10s
  1. Your instance of Judge0 API v1.1.1 is now available at http://<IP OF YOUR SERVER>:3000.

v1.1.0 (2019-02-10)

New Features

  • Added -lm compile flag to link with math library when compiling C source code.
    • Pull Requests: #60
  • Added fixed time limit of 10 seconds for compilation.

Improvements

  • Improved procedure of seeding database with languages. Seeding is now idempotent.

Bux Fixes

  • Fixed versions of Postgres and Redis in Docker Compose files.
  • Fixed problem with workers stopping when they lost connection with Postgres or Redis.
  • Fixed problem of storing submission's stdout and stderr that contained invalid byte sequence in UTF-8.

Deployment Procedure

  1. Install Docker and Docker Compose.
  2. Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.1.0/judge0-api-v1.1.0.zip
unzip judge0-api-v1.1.0.zip
  1. Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.1.0
docker-compose up -d
sleep 10s

v1.0.0 (2017-10-01)

This is the first production ready release of Judge0 API.

Deployment Procedure

  1. Install Docker and Docker Compose.
  2. Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.0.0/judge0-api-v1.0.0.zip
unzip judge0-api-v1.0.0.zip
  1. Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.0.0
docker-compose up -d
sleep 10s
  1. Your instance of Judge0 API v1.0.0 is now available at http://<IP OF YOUR SERVER>:3000.