diff --git a/.gitignore b/.gitignore index 80e4978b..d9c76d50 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ tmp/* .byebug_history coverage/ srv/ +environment diff --git a/CHANGELOG.md b/CHANGELOG.md index a74212ce..ecaa2808 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,79 +1,90 @@ -This is the Changelog for Judge0. The Changelog for Judge0 Extra can be found [here](https://github.com/judge0/judge0/blob/extra/CHANGELOG.md). Learn more about their difference [here](https://github.com/judge0/judge0#flavors). +This is the Changelog for Judge0 Extra CE. The Changelog for Judge0 CE can be found [here](https://github.com/judge0/judge0/blob/master/CHANGELOG.md). Learn more about their difference [here](https://github.com/judge0/judge0#flavors). +# v1.13.0-extra (2021-03-10) +Huge thanks to [**Filtered**](https://www.filtered.ai) for sponsoring this release. -# v1.12.0 (2020-10-18) ## New Features -- Added support for invalidating statistics cache using the `invalidate_cache` query parameter. - - Commits: [@561c2a30](https://github.com/judge0/judge0/commit/561c2a309d98680801628fc2d79ea17e885e1d66) -- Added rake task `judge0:run_in_queue` to manually run submissions that might have stuck in the `In Queue` state. - - Commits: [@c3b87d23](https://github.com/judge0/judge0/commit/c3b87d232a8e922b5ae04f5afdb12fc49b2ec003) -- Added support for specifying `CALLBACKS_MAX_TRIES` and `CALLBACKS_TIMEOUT`. This is a global configuration that applies to all submissions that have defined webhooks (HTTP callbacks). - - Commits: [@c4bb76ec](https://github.com/judge0/judge0/commit/c4bb76ec866bce6b07bd733391291e720f40ef96) -- Added support for submission caching to reduce the number of unnecessary database hits. Cache duration can be controlled with the `SUBMISSION_CACHE_DURATION` variable which is currently set to 1 second by default. Submissions are only cached for `GET /submissions/` route. Cache files are written to the server's file system and are automatically cleared every day at midnight. This is the first step toward more serious submission caching in the future. - - Commits: [@7a33c61c](https://github.com/judge0/judge0/commit/7a33c61c8dcbcdbf31fd4d93ef76cc2f1f5e154b) [@0b344920](https://github.com/judge0/judge0/commit/0b344920bd70bd2bf4b2a53fc78b6b145c298cbc) +- Added **4 new languages** and archived 4 languages. In total, there are **21 active languages**. Archived languages cannot be used anymore. -## Improvements -- Update PostgreSQL to 13.0 and Redis to 6.0. - - Commits: [@05330f11](https://github.com/judge0/judge0/commit/05330f112b26850a18c59a380991f8b401eae224) [@be300efa](https://github.com/judge0/judge0/commit/be300efa4bec7653303bb76681f91588550c25ef) -- Reschedule failed jobs after 0.1 seconds with 100 attempts. - - Commits: [@f7265cf8](https://github.com/judge0/judge0/commit/f7265cf8d53ef5319a9e96e1bf7bee8649b09762) [@e003c888](https://github.com/judge0/judge0/commit/e003c888e64ea4f4a83e1acce8d355b666276aa2) -- Send only submission ID to the worker and not the whole serialized submission. - - Commits: [@f7265cf8](https://github.com/judge0/judge0/commit/f7265cf8d53ef5319a9e96e1bf7bee8649b09762) [@4222c090](https://github.com/judge0/judge0/commit/4222c090689deb1a356cf6c2588b81b9904124f1) -- Automatically restart Judge0 server without the need for Docker restart policies. Use the `RESTART_MAX_TRIES` variable to specify the maximum number of restart tries. - - Commits: [@65756516](https://github.com/judge0/judge0/commit/65756516b331265ec5a6742372ecc57ecbb8ca71) [@c0fd97e2](https://github.com/judge0/judge0/commit/c0fd97e2359172f7fc8bf7195089ab7c19845728) +|ID|Name|Status| +|---|---|---| +|16|C# (.NET Core SDK 3.1.302)|archived| +|17|C# (Mono 6.10.0.104)|archived| +|18|C# Test (.NET Core SDK 3.1.302, NUnit 3.12.0)|archived| +|19|F# (.NET Core SDK 3.1.302)|archived| +|21|C# (.NET Core SDK 3.1.406)|**NEW**| +|22|C# (Mono 6.12.0.122)|**NEW**| +|23|C# Test (.NET Core SDK 3.1.406, NUnit 3.12.0)|**NEW**| +|24|F# (.NET Core SDK 3.1.406)|**NEW**| + +- Added support for `enable_network` configuration flag. With the new `ALLOW_ENABLE_NETWORK` configuration variable, usage of this flag can be permitted or denied. Furthermore, with the new `ENABLE_NETWORK` configuration variable the default value of this flag can be set for every submission. + - Commits: [@62a00520](https://github.com/judge0/judge0/commit/62a00520692c2b7a8bf0f54528aee8fbbf864f36) +- Added `USE_DOCS_AS_HOMEPAGE` configuration variable, which allows you to show or hide Judge0 homepage. **Now, by default, Judge0 homepage is empty** and does not show the API documentation. However, you can still access the API documentation via `/docs`. + - Issues: [#257](https://github.com/judge0/judge0/issues/257) ## Bug Fixes -- Fixed a bug in the `is_project` method of submission model where an exception was raised and not handled properly due to unknown language. - - Commits: [@6426ac61](https://github.com/judge0/judge0/commit/6426ac61ea6723fcf6b93b72024ec39e3dc4b7f2) +- Fixed the bug where the wrong number of workers would be reported via `/workers`. + - Issues: [#256](https://github.com/judge0/judge0/issues/256) + +## Security Fixes +- **HIGH** Fixed a security bug where certain submission configuration settings would allow the user to run a program that would run infinetly long. With this fix `wall_time_limit` **must** be at least 1 second. + - Commits: [@fce8d97a](https://github.com/judge0/judge0/commit/fce8d97ae765e87c4584115fcb73bd288d64d815) ## Other Changes -- Use Docker volumes for storing Postgres and Redis data instead of mounting directories. This is now the new recommended setting. - - Commits: [@600f5aaa](https://github.com/judge0/judge0/commit/600f5aaa3facfef38dd2cd5df25ac248734ace97) -- Added Resque Web to the development stack. - - Commits: [@3762a635](https://github.com/judge0/judge0/commit/3762a6355b8911d8d8e13d91869edeef9bec0a4f) -- Changed binding ports for Nginx and documentation server in the development stack. Nginx is now bound to port 80, and the development server to port 3001. - - Commits: [@3762a635](https://github.com/judge0/judge0/commit/3762a6355b8911d8d8e13d91869edeef9bec0a4f) -- Removed port bindings of Postgres and Redis in the development stack. - - Commits: [@3762a635](https://github.com/judge0/judge0/commit/3762a6355b8911d8d8e13d91869edeef9bec0a4f) -- Added PgBouncer to the development stack for testing and experimenting. - - Commits: [@24b3227a](https://github.com/judge0/judge0/commit/24b3227a0a47dcca89041e1c08106d08a413dcf3) -- Changed recommended values for `POSTGRES_DB` and `POSTGRES_USER`. Both are now `judge0`. - - Commits: [@745f4455](https://github.com/judge0/judge0/commit/745f4455937d15f2f6093539e9ab96c40bc506da) +- Allow setting the `max_file_size` and `stack_limit` to 0 kB. + - Issues: [#242](https://github.com/judge0/judge0/issues/242) + - Commits: [@bf7c1284](https://github.com/judge0/judge0/commit/bf7c1284fe756d348154546ad8a6280ce3af5eb2) [@5a4b79ab](https://github.com/judge0/judge0/commit/5a4b79abd19c20b7b26ef70cf862da25f5fd8008) +- Allow setting the `cpu_time_limit` and `cpu_extra_time` to 0 seconds. + - Commits: [@fce8d97a](https://github.com/judge0/judge0/commit/fce8d97ae765e87c4584115fcb73bd288d64d815) +- Updated to a port 2358 as a new **default port for Judge0** as a online code execution service. + - Issues: [#205](https://github.com/judge0/judge0/issues/205) + - Commits: [@ea9c7c97](https://github.com/judge0/judge0/commit/ea9c7c975e0697d66ada910ec7806d3c28ad4a03) +- Updated the default number of Judge0 Workers, those that acutally run the user's code, to the 2*[`nproc`](https://linux.die.net/man/1/nproc). This has been shown as a good choice for general purpose use-case. + - Commits: [@113d9c74](https://github.com/judge0/judge0/commit/113d9c74b4659cf6707e748eb6e04701ce67d3f0) +- Updated the default number of Rails threads to `nproc` and Rails processes to 2. This has been shown as a good choice for general purpose use-case. + - Commits: [@113d9c74](https://github.com/judge0/judge0/commit/113d9c74b4659cf6707e748eb6e04701ce67d3f0) +- Updated Let's Encrypt Docker image for deployment with HTTPS. + - Commits: [@86b7f8e8](https://github.com/judge0/judge0/commit/86b7f8e8d0154ab5044db91c537872ea8deb7343) +- Updated Nginx proxy Docker image that is used in development setup and deployment with HTTPS. + - Commits: [@83f5b175](https://github.com/judge0/judge0/commit/83f5b175d0925fe21374e9c70d7fbb4e6941fa9c) +- Fixed documentation typos. Thank you @balababa. + - Pull Requests: [#245](https://github.com/judge0/judge0/pull/245) +- Updated base image to `judge0/compilers:1.4.0` which uses updated Isolate to [@ad39cc4d](https://github.com/judge0/isolate/commit/ad39cc4d0fbb577fb545910095c9da5ef8fc9a1a). ## Deployment Procedure -Judge0 is collecting telemetry data to help understand how to improve the product and to better understand how Judge0 is used in various production environments. Read more about telemetry [here](https://github.com/judge0/judge0/blob/v1.12.0/TELEMETRY.md). +Judge0 is collecting telemetry data to help understand how to improve the product and to better understand how Judge0 is used in various production environments. Read more about telemetry [here](https://github.com/judge0/judge0/blob/v1.13.0-extra/TELEMETRY.md). Please note that Judge0 has only been tested on **Linux** and **macOS**, and might not work on Windows, thus we do not provide support for it. ### With HTTP 1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/compose). -2. Download and extract release archive: +2. Download and extract the release archive: ``` -wget https://github.com/judge0/judge0/releases/download/v1.12.0/judge0-v1.12.0.zip -unzip judge0-v1.12.0.zip +wget https://github.com/judge0/judge0/releases/download/v1.13.0-extra/judge0-v1.13.0-extra.zip +unzip judge0-v1.13.0-extra.zip ``` 3. Run all services and wait a few seconds until everything is initialized: ``` -cd judge0-v1.12.0 +cd judge0-v1.13.0-extra docker-compose up -d db redis sleep 10s docker-compose up -d sleep 5s ``` -4. Your instance of Judge0 v1.12.0 is now available at `http://`. +4. Your instance of Judge0 Extra CE v1.13.0 is now available at `http://`. ### With HTTPS (SSL/TLS) 1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/compose). -2. Download and extract release archive: +2. Download and extract the release archive: ``` -wget https://github.com/judge0/judge0/releases/download/v1.12.0/judge0-v1.12.0-https.zip -unzip judge0-v1.12.0-https.zip +wget https://github.com/judge0/judge0/releases/download/v1.13.0-extra/judge0-v1.13.0-extra-https.zip +unzip judge0-v1.13.0-extra-https.zip ``` -3. Change directory to `judge0-v1.12.0-https`: +3. Change directory to `judge0-v1.13.0-extra-https`: ``` -cd judge0-v1.12.0-https +cd judge0-v1.13.0-extra-https ``` 4. Edit `docker-compose.yml` and change variables `VIRTUAL_HOST`, `LETSENCRYPT_HOST` and `LETSENCRYPT_EMAIL`. 5. Run all services and wait a few seconds until everything is initialized: @@ -84,365 +95,164 @@ docker-compose up -d sleep 5s ``` -6. Your instance of Judge0 v1.12.0 is now available at `https://`. +6. Your instance of Judge0 Extra CE v1.13.0 is now available at `https://`. -# v1.11.0 (2020-09-09) +# v1.12.0-extra (2020-10-18) ## New Features -- Added queue size into response of `/workers`. - - Issues: [#210](https://github.com/judge0/judge0/issues/210) - - Commits: [@7ee1b10c](https://github.com/judge0/judge0/commit/7ee1b10c79576e745140f02d49446d57a208bcca) +- Added support for invalidating statistics cache using the `invalidate_cache` query parameter. + - Commits: [@561c2a30](https://github.com/judge0/judge0/commit/561c2a309d98680801628fc2d79ea17e885e1d66) +- Added rake task `judge0:run_in_queue` to manually run submissions that might have stuck in the `In Queue` state. + - Commits: [@c3b87d23](https://github.com/judge0/judge0/commit/c3b87d232a8e922b5ae04f5afdb12fc49b2ec003) +- Added support for specifying `CALLBACKS_MAX_TRIES` and `CALLBACKS_TIMEOUT`. This is a global configuration that applies to all submissions that have defined webhooks (HTTP callbacks). + - Commits: [@c4bb76ec](https://github.com/judge0/judge0/commit/c4bb76ec866bce6b07bd733391291e720f40ef96) +- Added support for submission caching to reduce the number of unnecessary database hits. Cache duration can be controlled with the `SUBMISSION_CACHE_DURATION` variable which is currently set to 1 second by default. Submissions are only cached for `GET /submissions/` route. Cache files are written to the server's file system and are automatically cleared every day at midnight. This is the first step toward more serious submission caching in the future. + - Commits: [@7a33c61c](https://github.com/judge0/judge0/commit/7a33c61c8dcbcdbf31fd4d93ef76cc2f1f5e154b) [@0b344920](https://github.com/judge0/judge0/commit/0b344920bd70bd2bf4b2a53fc78b6b145c298cbc) ## Improvements -- Set configuration defaults even if `judge0.conf` is not present. Thank you @vvalchev. - - Issues: [#206](https://github.com/judge0/judge0/issues/206) - - Commits: [@8c42f7be](https://github.com/judge0/judge0/commit/8c42f7befcdf8d70fa8cb4e3ba549c828c38164d) - -## Other Changes -- Updated documentation with some better explanation on the use of `base64_encoded` query parameter. Thank you @mejibyte. - -## Deployment Procedure -Judge0 is collecting telemetry data to help understand how to improve the product and to better understand how Judge0 is used in various production environments. Read more about telemetry [here](https://github.com/judge0/judge0/blob/v1.11.0/TELEMETRY.md). - -Please note that Judge0 has only been tested on **Linux** and might not work on Windows or macOS, thus we do not provide support for these systems. - -### With HTTP -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/compose). -2. Download and extract release archive: -``` -wget https://github.com/judge0/judge0/releases/download/v1.11.0/judge0-v1.11.0.zip -unzip judge0-v1.11.0.zip -``` - -3. Run all services and wait few seconds until everything is initialized: -``` -cd judge0-v1.11.0 -docker-compose up -d db redis -sleep 10s -docker-compose up -d -sleep 5s -``` - -4. Your instance of Judge0 v1.11.0 is now available at `http://`. - -### With HTTPS (SSL/TLS) -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/compose). -2. Download and extract release archive: -``` -wget https://github.com/judge0/judge0/releases/download/v1.11.0/judge0-v1.11.0-https.zip -unzip judge0-v1.11.0-https.zip -``` - -3. Change directory to `judge0-v1.11.0-https`: -``` -cd judge0-v1.11.0-https -``` -4. Edit `docker-compose.yml` and change variables `VIRTUAL_HOST`, `LETSENCRYPT_HOST` and `LETSENCRYPT_EMAIL`. -5. 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 -``` - -6. Your instance of Judge0 v1.11.0 is now available at `https://`. - - -# v1.10.0 (2020-07-27) -## New Features -- Added support for multi-file programs in the terms of adding a new special language called **Multi-file program**. In total there are now **47 active languages**. - -|ID|Name|Note| -|---|---|---| -|89|Multi-file program|| - -Multi-file programs allow you specify your own compilation and execution scripts that Judge0 will use. - -To use multi-file program feature you need to choose a language called *Multi-file program* whoose ID is **89**. Moreover, you need to send all program files with `additional_files` attribute. With multi-file programs attribute `source_code` cannot be used, i.e. all files should be sent with `additional_files` attribute. +- Update PostgreSQL to 13.0 and Redis to 6.0. + - Commits: [@05330f11](https://github.com/judge0/judge0/commit/05330f112b26850a18c59a380991f8b401eae224) [@be300efa](https://github.com/judge0/judge0/commit/be300efa4bec7653303bb76681f91588550c25ef) +- Reschedule failed jobs after 0.1 seconds with 100 attempts. + - Commits: [@f7265cf8](https://github.com/judge0/judge0/commit/f7265cf8d53ef5319a9e96e1bf7bee8649b09762) [@e003c888](https://github.com/judge0/judge0/commit/e003c888e64ea4f4a83e1acce8d355b666276aa2) +- Send only submission ID to the worker and not the whole serialized submission. + - Commits: [@f7265cf8](https://github.com/judge0/judge0/commit/f7265cf8d53ef5319a9e96e1bf7bee8649b09762) [@4222c090](https://github.com/judge0/judge0/commit/4222c090689deb1a356cf6c2588b81b9904124f1) +- Automatically restart Judge0 server without the need for Docker restart policies. Use the `RESTART_MAX_TRIES` variable to specify the maximum number of restart tries. + - Commits: [@65756516](https://github.com/judge0/judge0/commit/65756516b331265ec5a6742372ecc57ecbb8ca71) [@c0fd97e2](https://github.com/judge0/judge0/commit/c0fd97e2359172f7fc8bf7195089ab7c19845728) -For the Judge0 to know how to compile and execute your multi-file program you need to provide two special files that should be available in the root of the `.zip` archive that you are sending with `additional_files` attribute. These files should be named `compile` and `run`, and are expected to be Bash scripts that know how to compile and execute your multi-file program. If your multi-file program does not need compilation step, then you don't need to provide `compile` script. Take a look at [this example](https://github.com/judge0/examples/tree/master/cpp-project-01) to learn how to use this feature to compile and run multi-file C++ project that uses CMake. +## Bug Fixes +- Fixed a bug in the `is_project` method of submission model where an exception was raised and not handled properly due to unknown language. + - Commits: [@6426ac61](https://github.com/judge0/judge0/commit/6426ac61ea6723fcf6b93b72024ec39e3dc4b7f2) ## Other Changes -- Updated gems. +- Use Docker volumes for storing Postgres and Redis data instead of mounting directories. This is now the new recommended setting. + - Commits: [@600f5aaa](https://github.com/judge0/judge0/commit/600f5aaa3facfef38dd2cd5df25ac248734ace97) +- Added Resque Web to the development stack. + - Commits: [@3762a635](https://github.com/judge0/judge0/commit/3762a6355b8911d8d8e13d91869edeef9bec0a4f) +- Changed binding ports for Nginx and documentation server in the development stack. Nginx is now bound to port 80, and the development server to port 3001. + - Commits: [@3762a635](https://github.com/judge0/judge0/commit/3762a6355b8911d8d8e13d91869edeef9bec0a4f) +- Removed port bindings of Postgres and Redis in the development stack. + - Commits: [@3762a635](https://github.com/judge0/judge0/commit/3762a6355b8911d8d8e13d91869edeef9bec0a4f) +- Added PgBouncer to the development stack for testing and experimenting. + - Commits: [@24b3227a](https://github.com/judge0/judge0/commit/24b3227a0a47dcca89041e1c08106d08a413dcf3) +- Changed recommended values for `POSTGRES_DB` and `POSTGRES_USER`. Both are now `judge0`. + - Commits: [@745f4455](https://github.com/judge0/judge0/commit/745f4455937d15f2f6093539e9ab96c40bc506da) ## Deployment Procedure -Judge0 is collecting telemetry data to help understand how to improve the product and to better understand how Judge0 is used in various production environments. Read more about telemetry [here](https://github.com/judge0/api/blob/v1.10.0/TELEMETRY.md). - -### With HTTPS (SSL/TLS) -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/compose). -2. Download and extract release archive: -``` -wget https://github.com/judge0/api/releases/download/v1.10.0/judge0-v1.10.0-https.zip -unzip judge0-v1.10.0-https.zip -``` - -3. Change directory to `judge0-v1.10.0-https`: -``` -cd judge0-v1.10.0-https -``` -4. Edit `docker-compose.yml` and change variables `VIRTUAL_HOST`, `LETSENCRYPT_HOST` and `LETSENCRYPT_EMAIL`. -5. 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 -``` +Judge0 is collecting telemetry data to help understand how to improve the product and to better understand how Judge0 is used in various production environments. Read more about telemetry [here](https://github.com/judge0/judge0/blob/v1.12.0-extra/TELEMETRY.md). -6. Your instance of Judge0 v1.10.0 is now available at `https://`. +Please note that Judge0 has only been tested on **Linux** and **macOS**, and might not work on Windows, thus we do not provide support for it. ### With HTTP 1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/compose). 2. Download and extract release archive: ``` -wget https://github.com/judge0/api/releases/download/v1.10.0/judge0-v1.10.0.zip -unzip judge0-v1.10.0.zip +wget https://github.com/judge0/judge0/releases/download/v1.12.0-extra/judge0-v1.12.0-extra.zip +unzip judge0-v1.12.0-extra.zip ``` -3. Run all services and wait few seconds until everything is initialized: +3. Run all services and wait a few seconds until everything is initialized: ``` -cd judge0-v1.10.0 +cd judge0-v1.12.0-extra docker-compose up -d db redis sleep 10s docker-compose up -d sleep 5s ``` -4. Your instance of Judge0 v1.10.0 is now available at `http://`. - - -# v1.9.0 (2020-06-10) -Huge thanks to [**Filtered**](https://www.filtered.ai) for sponsoring this release. - -## New Features -- Added support for configuration variable `RAILS_SERVER_PROCESSES` which allows to create multiple processes for handling requests. - -## Other Changes -- Updated gems. - -## Deployment Procedure -Judge0 is collecting telemetry data to help understand how to improve the product and to better understand how Judge0 is used in various production environments. Read more about telemetry [here](https://github.com/judge0/api/blob/v1.9.0/TELEMETRY.md). +4. Your instance of Judge0 v1.12.0-extra is now available at `http://`. ### With HTTPS (SSL/TLS) 1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/compose). 2. Download and extract release archive: ``` -wget https://github.com/judge0/api/releases/download/v1.9.0/judge0-v1.9.0-https.zip -unzip judge0-v1.9.0-https.zip +wget https://github.com/judge0/judge0/releases/download/v1.12.0-extra/judge0-v1.12.0-extra-https.zip +unzip judge0-v1.12.0-extra-https.zip ``` -3. Change directory to `judge0-v1.9.0-https`: +3. Change directory to `judge0-v1.12.0-extra-https`: ``` -cd judge0-v1.9.0-https +cd judge0-v1.12.0-extra-https ``` 4. Edit `docker-compose.yml` and change variables `VIRTUAL_HOST`, `LETSENCRYPT_HOST` and `LETSENCRYPT_EMAIL`. -5. 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 -``` - -6. Your instance of Judge0 v1.9.0 is now available at `https://`. - -### With HTTP -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/compose). -2. Download and extract release archive: -``` -wget https://github.com/judge0/api/releases/download/v1.9.0/judge0-v1.9.0.zip -unzip judge0-v1.9.0.zip -``` - -3. Run all services and wait few seconds until everything is initialized: +5. Run all services and wait a few seconds until everything is initialized: ``` -cd judge0-v1.9.0 docker-compose up -d db redis sleep 10s docker-compose up -d sleep 5s ``` -4. Your instance of Judge0 v1.9.0 is now available at `http://`. +6. Your instance of Judge0 v1.12.0-extra is now available at `https://`. -# v1.8.0 (2020-05-28) -Huge thanks to [**Filtered**](https://www.filtered.ai) for sponsoring this release. +# v1.11.0-extra (2020-09-09) +Huge thanks to [AlgoDaily](https://algodaily.com) for sponsoring this release. ## New Features -- Added **4 new languages**, and in total there are now **46 active languages**. +- Added **8 new languages**, and in total there are now **21 active languages**. |ID|Name|Note| |---|---|---| -|85|Perl (5.28.1)|Sponsored by [Filtered](https://www.filtered.ai).| -|86|Clojure (1.10.1)|Sponsored by [Filtered](https://www.filtered.ai).| -|87|F# (.NET Core SDK 3.1.202)|Sponsored by [Filtered](https://www.filtered.ai).| -|88|Groovy (3.0.3)|Sponsored by [Filtered](https://www.filtered.ai).| - -## Bug Fixes -- Fixed `/statistics` route caching. - - Issues: [#184](https://github.com/judge0/api/issues/184) - - Commits: [@83c5cfc6](https://github.com/judge0/api/commit/83c5cfc6b4ae95fa8bdef0bba2eee98829207dd0) - -## Other Changes -- Updated gems. - - Commits: [@0c766273](https://github.com/judge0/api/commit/0c766273d7cb8009695a3aa1903719c8474a233d) [@700e6582](https://github.com/judge0/api/commit/700e65829910ee860ddfa43254847f564c0d5623) -- Increased default `CPU_TIME_LIMIT` to 5, `CPU_EXTRA_TIME` to 1, `MAX_CPU_EXTRA_TIME` to 5 and `WALL_TIME_LIMIT` to 10 seconds. - - Commits: [@77961ab9](https://github.com/judge0/api/commit/77961ab9f6b1015d5bdb5150e29d8de06478f38c) -- Changed `HOME` environment variable value for sandbox to `/tmp`. - - Commits: [@77961ab9](https://github.com/judge0/api/commit/77961ab9f6b1015d5bdb5150e29d8de06478f38c) -- Updated *isolate* to [@9be3ff6f](https://github.com/judge0/isolate/commit/9be3ff6ff0670763e564912a6662730e55b69536). - -## Deployment Procedure -Judge0 API is collecting telemetry data to help understand how to improve the product and to better understand how the Judge0 API is used in various production environments. Read more about telemetry [here](https://github.com/judge0/api/blob/v1.8.0/TELEMETRY.md). - -### With HTTPS (SSL/TLS) -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/compose). -2. Download and extract release archive: -``` -wget https://github.com/judge0/api/releases/download/v1.8.0/judge0-api-v1.8.0-https.zip -unzip judge0-api-v1.8.0-https.zip -``` - -3. Change directory to `judge0-api-v1.8.0-https`: -``` -cd judge0-api-v1.8.0-https -``` -4. Edit `docker-compose.yml` and change variables `VIRTUAL_HOST`, `LETSENCRYPT_HOST` and `LETSENCRYPT_EMAIL`. -5. 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 -``` - -6. Your instance of Judge0 API v1.8.0 is now available at `https://`. - -### With HTTP -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/compose). -2. Download and extract release archive: -``` -wget https://github.com/judge0/api/releases/download/v1.8.0/judge0-api-v1.8.0.zip -unzip judge0-api-v1.8.0.zip -``` - -3. Run all services and wait few seconds until everything is initialized: -``` -cd judge0-api-v1.8.0 -docker-compose up -d db redis -sleep 10s -docker-compose up -d -sleep 5s -``` - -4. Your instance of Judge0 API v1.8.0 is now available at `http://`. +|13|C (Clang 9.0.1)|| +|14|C++ (Clang 9.0.1)|| +|15|C++ Test (Clang 10.0.1, Google Test 1.8.1)|| +|16|C# (.NET Core SDK 3.1.302)|Sponsored by [AlgoDaily](https://algodaily.com).| +|17|C# (Mono 6.10.0.104)|Sponsored by [AlgoDaily](https://algodaily.com).| +|18|C# Test (.NET Core SDK 3.1.302, NUnit 3.12.0)|Sponsored by [AlgoDaily](https://algodaily.com).| +|19|F# (.NET Core SDK 3.1.302)|| +|20|Visual Basic.Net (vbnc 0.0.0.5943)|| +- Added queue size into response of `/workers`. + - Issues: [#210](https://github.com/judge0/judge0/issues/210) + - Commits: [@7ee1b10c](https://github.com/judge0/judge0/commit/7ee1b10c79576e745140f02d49446d57a208bcca) -# v1.7.1 (2020-05-06) -## Bug Fixes -- Compile Swift before executing since default file size limit of 1MB for execution is not enough for Swift to run successfully. Compilation has a file size limit of 4MB by default which seems to be enough for Swift to compile. Thanks @OliverwengFiltered. - - Issues: [#154](https://github.com/judge0/api/issues/154) - - Commits: [@371e2463](https://github.com/judge0/api/commit/371e246312a41242033d916f1f4fea3db80015b7) -- Fixed environment loading for Telemetry Client. - - Commits: [@bd16119c](https://github.com/judge0/api/commit/bd16119ccde52798b5d354afdd5e008df6d5b940) +## Improvements +- Set configuration defaults even if `judge0.conf` is not present. Thank you @vvalchev. + - Issues: [#206](https://github.com/judge0/judge0/issues/206) + - Commits: [@8c42f7be](https://github.com/judge0/judge0/commit/8c42f7befcdf8d70fa8cb4e3ba549c828c38164d) ## Other Changes -- Set `VIRTUAL_HOST` environment variable in Dockerfile to value `3000`. -- Updated Telemetry Client to version `c62fa63d`. -- Added separated Docker Compose files for server and workers. -- Renamed service `worker` to `workers` and `api` to `server`. +- Updated documentation with some better explanation on the use of `base64_encoded` query parameter. Thank you @mejibyte. +- Increased default `CPU_TIME_LIMIT` to 15 s, `MAX_CPU_TIME_LIMIT` to 20 s, `WALL_TIME_LIMIT` to 20 s and `MAX_WALL_TIME_LIMIT` to 25 s. +- Increased default `MAX_MAX_FILE_SIZE` to 20480 KB. +- Increased default `MAX_PROCESSES_AND_OR_THREADS` to 100. +- Mount additional folders `/files` and `/NuGet/packages` in compilation step. ## Deployment Procedure -Judge0 API is collecting telemetry data to help understand how to improve the product and to better understand how the Judge0 API is used in various production environments. Read more about telemetry [here](https://github.com/judge0/api/blob/v1.7.1/TELEMETRY.md). - -### With HTTPS (SSL/TLS) -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/compose). -2. Download and extract release archive: -``` -wget https://github.com/judge0/api/releases/download/v1.7.1/judge0-api-v1.7.1-https.zip -unzip judge0-api-v1.7.1-https.zip -``` +Judge0 is collecting telemetry data to help understand how to improve the product and to better understand how Judge0 is used in various production environments. Read more about telemetry [here](https://github.com/judge0/judge0/blob/v1.11.0-extra/TELEMETRY.md). -3. Change directory to `judge0-api-v1.7.1-https`: -``` -cd judge0-api-v1.7.1-https -``` -4. Edit `docker-compose.yml` and change variables `VIRTUAL_HOST`, `LETSENCRYPT_HOST` and `LETSENCRYPT_EMAIL`. -5. 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 -``` - -6. Your instance of Judge0 API v1.7.1 is now available at `https://`. +Please note that Judge0 has only been tested on **Linux** and might not work on Windows or macOS, thus we do not provide support for these systems. ### With HTTP 1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/compose). 2. Download and extract release archive: ``` -wget https://github.com/judge0/api/releases/download/v1.7.1/judge0-api-v1.7.1.zip -unzip judge0-api-v1.7.1.zip +wget https://github.com/judge0/judge0/releases/download/v1.11.0-extra/judge0-v1.11.0-extra.zip +unzip judge0-v1.11.0-extra.zip ``` 3. Run all services and wait few seconds until everything is initialized: ``` -cd judge0-api-v1.7.1 +cd judge0-v1.11.0-extra docker-compose up -d db redis sleep 10s docker-compose up -d sleep 5s ``` -4. Your instance of Judge0 API v1.7.1 is now available at `http://`. - - -# v1.7.0 (2020-05-05) -Huge thanks to sponsors of this release: [**Filtered**](https://www.filtered.ai) and [**Evalart**](https://evalart.com). - -## New Features -- Added **10 new languages**, and in total there are now **42 active languages**. - -|ID|Name|Note| -|---|---|---| -|75|C (Clang 7.0.1)|| -|76|C++ (Clang 7.0.1)|| -|77|COBOL (GnuCOBOL 2.2)|Sponsored by [Evalart](https://evalart.com).| -|78|Kotlin (1.3.70)|Sponsored by [Filtered](https://www.filtered.ai).| -|79|Objective-C (Clang 7.0.1)|Sponsored by [Filtered](https://www.filtered.ai) and [Evalart](https://evalart.com).| -|80|R (4.0.0)|Sponsored by [Filtered](https://www.filtered.ai).| -|81|Scala (2.13.2)|Sponsored by [Filtered](https://www.filtered.ai).| -|82|SQL (SQLite 3.27.2)|Sponsored by [Filtered](https://www.filtered.ai). (*)| -|83|Swift (5.2.3)|Sponsored by [Filtered](https://www.filtered.ai) and [Evalart](https://evalart.com).| -|84|Visual Basic.Net (vbnc 0.0.0.5943)|Sponsored by [Filtered](https://www.filtered.ai).| - -(*) Watch [this asciicast](https://asciinema.org/a/326975) to learn how to use this language. +4. Your instance of Judge0 v1.11.0-extra is now available at `http://`. -## Other Changes -- Increased default `MAX_MEMORY_LIMIT` to 512000. - - Commits: [@3dcbfc96](https://github.com/judge0/api/commit/3dcbfc9605a0f81680afd890a239ef2b60739186) -- Set compile CPU time limit to `MAX_CPU_TIME_LIMIT`. - - Commits: [@3dcbfc96](https://github.com/judge0/api/commit/3dcbfc9605a0f81680afd890a239ef2b60739186) -- Set compile wall time limit to `MAX_WALL_TIME_LIMIT`. - - Commits: [@3dcbfc96](https://github.com/judge0/api/commit/3dcbfc9605a0f81680afd890a239ef2b60739186) -- Redirect input from `/dev/null` when compiling. Thank you @gollux for your [help](https://github.com/ioi/isolate/issues/90). - - Commits: [@42b89a7c](https://github.com/judge0/api/commit/42b89a7cdb333253460023fa7bcbf1640329d48b) - -## Deployment Procedure ### With HTTPS (SSL/TLS) 1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/compose). 2. Download and extract release archive: ``` -wget https://github.com/judge0/api/releases/download/v1.7.0/judge0-api-v1.7.0-https.zip -unzip judge0-api-v1.7.0-https.zip +wget https://github.com/judge0/judge0/releases/download/v1.11.0-extra/judge0-v1.11.0-extra-https.zip +unzip judge0-v1.11.0-extra-https.zip ``` -3. Change directory to `judge0-api-v1.7.0-https`: +3. Change directory to `judge0-v1.11.0-extra-https`: ``` -cd judge0-api-v1.7.0-https +cd judge0-v1.11.0-extra-https ``` 4. Edit `docker-compose.yml` and change variables `VIRTUAL_HOST`, `LETSENCRYPT_HOST` and `LETSENCRYPT_EMAIL`. 5. Run all services and wait few seconds until everything is initialized: @@ -453,745 +263,4 @@ docker-compose up -d sleep 5s ``` -6. Your instance of Judge0 API v1.7.0 is now available at `https://`. - -### With HTTP -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/compose). -2. Download and extract release archive: -``` -wget https://github.com/judge0/api/releases/download/v1.7.0/judge0-api-v1.7.0.zip -unzip judge0-api-v1.7.0.zip -``` - -3. Run all services and wait few seconds until everything is initialized: -``` -cd judge0-api-v1.7.0 -docker-compose up -d db redis -sleep 10s -docker-compose up -d -sleep 5s -``` - -4. Your instance of Judge0 API v1.7.0 is now available at `http://`. - - -# v1.6.0 (2020-05-01) -## 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. - - Commits: [@8e6617aa](https://github.com/judge0/api/commit/8e6617aae2d4dd9106ab610738dcc5e59633b2f4) -- Added configuration variable `DISALLOW_ORIGIN` that can be used for disabling CORS only for specific origins. - - Commits: [@f61b5496](https://github.com/judge0/api/commit/f61b54965f12a9ccb0d19d3449bc818b12881127) [@a927c9db](https://github.com/judge0/api/commit/a927c9db0f47aa8bd3d2b7dd1774a829a0cbc6f7) -- 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. - - Commits: [@4fd0f34b](https://github.com/judge0/api/commit/4fd0f34b8f08fe808dd6b19ca96bac1e15b2a6f3) -- 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. - - Commits: [@201221e2](https://github.com/judge0/api/commit/201221e22bbe64e960306b2dcf22cc6941892e3f) -- Added support for universal field `*` which returns all attributes of a submission. - - Commits: [@521cc2e2](https://github.com/judge0/api/commit/521cc2e2e94f1b469c084680020953e76af6e2b9) -- Added route `GET /statistics` which returns some basic and useful information about Judge0 API instance. Statistic report is cached for 10 minutes. - - Commits: [@a24db632](https://github.com/judge0/api/commit/a24db6326b793e093a64dea877c26402c585c680) [@621c50f1](https://github.com/judge0/api/commit/621c50f1f8056e716ff073a404556e51ab3a34c3) [@eead8067](https://github.com/judge0/api/commit/eead806786fac79e13cee9fca0fe7196f116680b) -- Added basic support for callbacks which are called with HTTP verb `PUT`. - - Pull Requests: [#98](https://github.com/judge0/api/pull/98) - - Issues: [#33](https://github.com/judge0/api/issues/33) - - Commits: [@41e846b1](https://github.com/judge0/api/commit/41e846b156bc7c071b9d2827271d87cfaee584f7) -- Added support for presetting custom additional files in a sandbox. - - Issues: [#32](https://github.com/judge0/api/issues/32) [#88](https://github.com/judge0/api/issues/88) - - Commits: [@7829db87](https://github.com/judge0/api/commit/7829db878895acdb3adfa063df03204c87cd1589) [@6d1f4293](https://github.com/judge0/api/commit/6d1f4293000a479a0cae0e9c4dc905652297199b) [@6573c52f](https://github.com/judge0/api/commit/6573c52faccee55e467457ab54742dd189a48a4b) -- Added routes `GET /submissions/batch` and `POST /submissions/batch` batch create and show or -submissions. - - Issues: [#34](https://github.com/judge0/api/issues/34) - - Commits: [@6420156b](https://github.com/judge0/api/commit/6420156b0ad6526bed3d638be3e824c996cd33cd) [@87859b58](https://github.com/judge0/api/commit/87859b58e4c348249237f2a7881c1c26dcb5d785) [@595c7e11](https://github.com/judge0/api/commit/595c7e11d6ede28d6bef7b98c2675f29e1ae2a9a) [@04c900c9](https://github.com/judge0/api/commit/04c900c9d9c325720ed5c807b46272a500c22a97) [@cb676d6c](https://github.com/judge0/api/commit/cb676d6c7fe3a6e9144a9246329c6223e48c6511) - -## 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. - - Commits: [@dd6b62d7](https://github.com/judge0/api/commit/dd6b62d73c6ab0ef028711258e2edb141c1ba81a) -- Refactored submission field checking. - - Commits: [@9acefdbc](https://github.com/judge0/api/commit/9acefdbc7959ff88770ea186d12a085158bce521) -- Refactored setting up of default values. - - Commits: [@a14ae5d5](https://github.com/judge0/api/commit/a14ae5d540db75a0ade3a4dbfc12e6120d0c1ee2) - -## 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`. - - Commits: [@a6f693a0](https://github.com/judge0/api/commit/a6f693a0ced221a28a3f4b4815e9d3baf8c2c4c0) -- Fixed a bug where cgroups flags for isolate were chosen in the wrong conditions. - - Commits: [@4116b9cb](https://github.com/judge0/api/commit/4116b9cb988816cad81f6b5c3265da01a8cec120) -- Fixed a bug that caused `Internal Error` because sandbox cleanup failed. - - Pull Requests: [#126](https://github.com/judge0/api/pull/126) - - Issues: [#123](https://github.com/judge0/api/issues/123) [#143](https://github.com/judge0/api/issues/143) - - Commits: [@514aec53](https://github.com/judge0/api/commit/514aec53dca8f1fb9f8f153add05c14d263d6624) -- Fixed a bug where low `memory_limit` would cause `Internal Error`. Minimum required value for `memory_limit` is now 2048. - - Commits: [@655ccf27](https://github.com/judge0/api/commit/655ccf277aad2c11371ca223c5386380c0bfc4ba) - -## Security Fixes -- Fixed a bug that allowed creation of an arbitrary size of the compile output. - - Commits: [@5fc7b823](https://github.com/judge0/api/commit/5fc7b823a7bccecb148c57615da0be9d52f1585a) - -## 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. - - Commits: [@a3a24c5c](https://github.com/judge0/api/commit/a3a24c5c6fab31ab845905b7120146b18bfe7dbb) -- Removed output of configuration settings when server or worker starts. - - Commits: [@7061de7a](https://github.com/judge0/api/commit/7061de7a69ffb07b335e44f7120619558a6cf79d) -- Updated all the gems except Rails to the latest versions. - - Commits: [@230c7a77](https://github.com/judge0/api/commit/230c7a777edf96d6d8848618c15c239134d1f29b) [@69a9fe11](https://github.com/judge0/api/commit/69a9fe1193fb437e103a56b9691196e3687e5e7e) [@095588e6](https://github.com/judge0/api/commit/095588e6642211a123e5091227271de27fc700d5) -- Changed default value of `enable_per_process_and_thread_memory_limit` to `false`. - - Commits: [@4116b9cb](https://github.com/judge0/api/commit/4116b9cb988816cad81f6b5c3265da01a8cec120) -- Don't show total number of workers in `/workers` that is determined with configuration variable `COUNT` because that number is not relevant. - - Commits: [@99939b89](https://github.com/judge0/api/commit/99939b89a58d21fc7c6a43fcec90550f75681e39) -- Changed the default port to `80` in Docker Compose file. - - Commits: [@6ab67d6b](https://github.com/judge0/api/commit/6ab67d6b1e723ce1e959dd17c899605c340bc6ed) -- Limited the log size to 100 MB in Docker Compose file. - - Commits: [@435c7d79](https://github.com/judge0/api/commit/435c7d792babfda8564dd432d31d4edc5a694ab9) -- Added logging to `run-workers` script. - - Commits: [@381265a2](https://github.com/judge0/api/commit/381265a295c130c54d540641ba071a18447d8223) -- Updated dummy client default values. -- Added Docker Compose file for HTTPS support. -- Refactored all development and production scripts from `scripts` directory. -- Refactored `judge0-api.conf` file. - -## Deployment Procedure -### With HTTPS (SSL/TLS) -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/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 -``` - -3. Change directory to `judge0-api-v1.6.0-https`: -``` -cd judge0-api-v1.6.0-https -``` -4. Edit `docker-compose.yml` and change variables `VIRTUAL_HOST`, `LETSENCRYPT_HOST` and `LETSENCRYPT_EMAIL`. -5. Run all services and wait few seconds until everything is initialized: -``` -docker-compose up -d db redis nginx letsencrypt -sleep 10s -docker-compose up -d -sleep 5s -``` - -6. Your instance of Judge0 API v1.6.0 is now available at `https://`. - -### With HTTP -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/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 -``` - -3. 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 -``` - -4. Your instance of Judge0 API v1.6.0 is now available at `http://`. - - -# 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. - - Issues: [#51](https://github.com/judge0/api/issues/51) [#90](https://github.com/judge0/api/issues/90) [#106](https://github.com/judge0/api/issues/106) [#131](https://github.com/judge0/api/issues/131) - - Commits: [@f86a546c](https://github.com/judge0/api/commit/f86a546cb9c90eeaedf08862d2a2a2a76293a87f) - -|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. - - Commits: [@2a31e963](https://github.com/judge0/api/commit/2a31e96326651b90b59403d811ae48445fa4202e) -- Added route `GET /languages/all` for getting a list of all languages (archived and active). - - Commits: [@2a31e963](https://github.com/judge0/api/commit/2a31e96326651b90b59403d811ae48445fa4202e) -- Added route `DELETE /submissions/:token` for deleting specified submission. Only authorized requests (users) are allowed to delete a submission. - - Commits: [@3365e3c8](https://github.com/judge0/api/commit/3365e3c8da28bd273dbd7a21417e75fe393d83ee) -- 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. - - Commits: [@79e1de95](https://github.com/judge0/api/commit/79e1de95a4a6d2e022af557b96056b009a90be5e) -- Added info routes `GET /about`, `GET /version`, `GET /license` and `GET /isolate`. Last route `GET /isolate` returns result from [`isolate --version`](https://github.com/ioi/isolate) command. - - Commits: [@9f5202a5](https://github.com/judge0/api/commit/9f5202a501f8cc2375be68908c6fbd0249ac3dd1) - -## Improvements -- Updated base image to `judge0/api-base:1.0.0` which uses [Debian "buster"](https://www.debian.org/releases/buster/) and has installed Ruby 2.7.0. - - Issues: [#113](https://github.com/judge0/api/issues/113) - - Commits: [@f86a546c](https://github.com/judge0/api/commit/f86a546cb9c90eeaedf08862d2a2a2a76293a87f) -- 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. - - Issues: [#107](https://github.com/judge0/api/issues/107) [#129](https://github.com/judge0/api/issues/129) [#130](https://github.com/judge0/api/issues/130) - - Commits: [@cdcaa512](https://github.com/judge0/api/commit/cdcaa5122f96c90c0a9fcd16273a808c0ff06d4e) - -## Bug Fixes -- Fixed example in configuration for using `ALLOW_ORIGIN` variable with multiple origins. - - Commits: [@21d0202a](https://github.com/judge0/api/commit/21d0202ae16aa2e92853d146ba8fedb0c6bb6ab2) -- 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. - - Commits: [@563f8ea2](https://github.com/judge0/api/commit/563f8ea264dad9396b4e7743cef187c785cbee67) - -## Other Changes -- Increased maximum allowed `compiler_options` and `command_line_arguments` length to 512 characters. - - Issues: [#122](https://github.com/judge0/api/issues/122) - - Commits: [@3d4df3bf](https://github.com/judge0/api/commit/3d4df3bfe661ddff9ee7e6c015fa4403baf8be85) -- Increased default value of `MAX_PROCESSES_AND_OR_THREADS` to 60. - - Commits: [@563f8ea2](https://github.com/judge0/api/commit/563f8ea264dad9396b4e7743cef187c785cbee67) -- Increased default value of `MAX_MAX_PROCESSES_AND_OR_THREADS` to 120. - - Commits: [@563f8ea2](https://github.com/judge0/api/commit/563f8ea264dad9396b4e7743cef187c785cbee67) -- Changed default value of `RAILS_ENV` to `production`. - - Commits: [@be55ca65](https://github.com/judge0/api/commit/be55ca656b524c5e99e75bd6d6207c4a078f5689) -- Changed default value of `INTERVAL` to 0.1. - - Commits: [@be55ca65](https://github.com/judge0/api/commit/be55ca656b524c5e99e75bd6d6207c4a078f5689) -- Updated year in LICENSE. - - Commits: [@679fb2ba](https://github.com/judge0/api/commit/679fb2bad981a22dcaebdd63baff506678b36939) -- Added environment variables `JUDGE0_{HOMEPAGE,SOURCE_CODE,MAINTAINER,VERSION}`. Isolate sandbox inherits these variables and they are now available for use in user code. - - Commits: [@9f5202a5](https://github.com/judge0/api/commit/9f5202a501f8cc2375be68908c6fbd0249ac3dd1) - -## Deployment Procedure -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/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 -``` - -3. 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 -``` - -4. Your instance of Judge0 API v1.5.0 is now available at `http://: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. - - Commits: [@0f1b07fe](https://github.com/judge0/api/commit/0f1b07fe0f75141ec82431ef28ad939d73e418a3) - -## Other Changes -- Don't link math library for C language by default. You now need to send `-lm` in `compiler_options`. - - Commits: [@619a3bbe](https://github.com/judge0/api/commit/619a3bbed204b22c71e012f0de0faabf6f846d70) - - -## Deployment Procedure -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/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 -``` - -3. Run all services and wait few seconds until everything is initialized: -``` -cd judge0-api-v1.4.0 -docker-compose up -d -sleep 10s -``` - -4. Your instance of Judge0 API v1.4.0 is now available at `http://:3000`. - - -# v1.3.1 (2019-09-16) -## Improvements -- Improved handling exec format error by introducing new status **Exec Format Error**. - - Commits: [@93a60115](https://github.com/judge0/api/commit/93a601159187d67d1ca52e8c06ebecd8318ed6c3) - -## 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. - - Commits: [@93a60115](https://github.com/judge0/api/commit/93a601159187d67d1ca52e8c06ebecd8318ed6c3) - -## Deployment Procedure -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/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 -``` - -3. Run all services and wait few seconds until everything is initialized: -``` -cd judge0-api-v1.3.1 -docker-compose up -d -sleep 10s -``` - -4. Your instance of Judge0 API v1.3.1 is now available at `http://: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. - - Commits: [@a2bcdecb](https://github.com/judge0/api/commit/a2bcdecbb99dbd8d3875e2f95bdf71f12e34f495) - -## Improvements -- Improved worker shutdown procedure. Workers are now gracefully shutdown on `docker stop`. - - Commits: [@2ae0cd31](https://github.com/judge0/api/commit/2ae0cd31153dca4218638096d390ee6f84896236) - -## Bug Fixes -- Fixed a bug where authentication token was auto converted to integer. - - Issues: [#101](https://github.com/judge0/api/issues/101) - - Commits: [@b92c4970](https://github.com/judge0/api/commit/b92c49705c687e955f91dc6638015f14bbcad97c) - -## Deployment Procedure -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/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 -``` - -3. Run all services and wait few seconds until everything is initialized: -``` -cd judge0-api-v1.3.0 -docker-compose up -d -sleep 10s -``` - -4. Your instance of Judge0 API v1.3.0 is now available at `http://: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](https://github.com/judge0/api/releases/tag/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. - - Commits: [@121c8f9d](https://github.com/judge0/api/commit/121c8f9de8d89b45c5fec69266d625b375e3181e) - -## Other Changes -- Don't allow execution of scripts in `/usr/src/api` folder. - - Commits: [@121c8f9d](https://github.com/judge0/api/commit/121c8f9de8d89b45c5fec69266d625b375e3181e) - -## Deployment Procedure -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/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 -``` - -3. Run all services and wait few seconds until everything is initialized: -``` -cd judge0-api-v1.2.2 -docker-compose up -d -sleep 10s -``` - -4. Your instance of Judge0 API v1.2.2 is now available at `http://:3000`. - - -# v1.2.1 (2019-08-24) -## Improvements -- Improved config loading. Config can now be changed and reload just with `docker-compose restart` command. - - Commits: [@06fc37f1](https://github.com/judge0/api/commit/06fc37f16571840e87c41658807da20a08358926) - -## Bug Fixes -- Fixed bug in `run-worker` script that didn't consider `COUNT` config variable. - - Issues: [#91](https://github.com/judge0/api/issues/91) - - Commits: [@06fc37f1](https://github.com/judge0/api/commit/06fc37f16571840e87c41658807da20a08358926) - -## Deployment Procedure -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/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 -``` - -3. Run all services and wait few seconds until everything is initialized: -``` -cd judge0-api-v1.2.1 -docker-compose up -d -sleep 10s -``` - -4. Your instance of Judge0 API v1.2.1 is now available at `http://:3000`. - - -# v1.2.0-nim0.20.0 (2019-06-26) -This image contains only [The Nim Programming Language](https://nim-lang.org). 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`](https://github.com/judge0/api-base/tree/nim) branch of Judge0 API Base I will follow and install new releases of Nim, and in the [`nim`](https://github.com/judge0/api/tree/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](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/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 -``` - -3. 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 -``` - -4. Your instance of Judge0 API v1.2.0-nim0.20.0 is now available at `http://:3000`. - - -# v1.2.0-vlang0.1.3 (2019-06-26) -This image contains only [The V Programming Language](https://vlang.io), specifically only V compiler built from commit [@b00a47be](https://github.com/vlang/v/commit/b00a47be66e868b087146feb7999fd72f2af3da0). 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`](https://github.com/judge0/api-base/tree/vlang) branch of Judge0 API Base I will follow and install new releases of V, and in the [`vlang`](https://github.com/judge0/api/tree/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](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/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 -``` - -3. 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 -``` - -4. Your instance of Judge0 API v1.2.0-vlang0.1.3 is now available at `http://:3000`. - - -# v1.2.0 (2019-06-17) -## New Features -- Added new language **Executable** that allows executing custom executable files. - - Commits: [@0ab08351](https://github.com/judge0/api/commit/0ab08351f59ae75d9626b6941be3728b48e835db) -- Added new configuration variables: `REDIS_PASSWORD`, `REDIS_PORT` and `POSTGRES_PORT`. - - Commits: [@962d7d1d](https://github.com/judge0/api/commit/962d7d1dcff051357de492f2d31e996405b1d125) - -## Improvements -- Improved `run-server` and `run-worker` scripts. - - Commits: [@e1b3564b](https://github.com/judge0/api/commit/e1b3564b5f262c610c42a45879e313eca93e720f) - -## Bug Fixes -- Fixed `/etc/apt/sources.list` that prevented package update. - - Issues: [#84](https://github.com/judge0/api/issues/84) - - Commits: [@7fdca3cf](https://github.com/judge0/api/commit/7fdca3cfa5f3bddefbe2ae1e12a18ba18a7e5f63) -- Fixed cleanup bug that didn't remove sandbox files if `tmp` directory was not empty. - - Commits: [@50ee4dbf](https://github.com/judge0/api/commit/50ee4dbf841bc9d0ce195380aaa1c5ee957ee2b7) -- Fixed another UTF-8 problem with Python that @nguyenvanquan7826 reported. - - Issues: [#69](https://github.com/judge0/api/issues/69) - - Commits: [@64635c98](https://github.com/judge0/api/commit/64635c98f7c0475e33b9b4629a6da8bc20fff60a) - -## Other Changes -- Updated some gems that had security issues. - - Pull Requests: [#77](https://github.com/judge0/api/pull/77) [#78](https://github.com/judge0/api/pull/78) [#79](https://github.com/judge0/api/pull/79) [#80](https://github.com/judge0/api/pull/80) [#81](https://github.com/judge0/api/pull/81) [#82](https://github.com/judge0/api/pull/82) - - Commits: [@e1b3564b](https://github.com/judge0/api/commit/e1b3564b5f262c610c42a45879e313eca93e720f) -- Prepared Isolate Job for accepting custom compile flags. - - Commits: [@4f2dde1f](https://github.com/judge0/api/commit/4f2dde1f79e32545da219de5cea7c5aaf25869cb) - -## Deployment Procedure -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/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 -``` - -3. Run all services and wait few seconds until everything is initialized: -``` -cd judge0-api-v1.2.0 -docker-compose up -d -sleep 10s -``` - -4. Your instance of Judge0 API v1.2.0 is now available at `http://:3000`. - - -# v1.1.5-python3.6.8 (2019-03-08) -On @guvenim [request](https://github.com/judge0/api/issues/67) 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](https://github.com/judge0/api-base/commit/bfde9426e4a3d44098dab2a2d082e02de2bc5be5) and [api](https://github.com/judge0/api/commit/9f9f5cd0577a724d66be934c11d2e57b2b3fc705) when you only want to use languages that you need. - -## Deployment Procedure -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/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 -``` - -3. 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 -``` - -4. Your instance of Judge0 API v1.1.5-python3.6.8 is now available at `http://:3000`. - - -# v1.1.5 (2019-02-17) -## Bug Fixes -- Fixed problem with assigning compile output to submission when rerunning submission. - - Commits: [@c3cd0232](https://github.com/judge0/api/commit/c3cd023258a4ec48949d4ee2310bc39a2f40cac9) - -## Other Changes -- Remove unwanted newlines from compile output. - - Commits: [@c3cd0232](https://github.com/judge0/api/commit/c3cd023258a4ec48949d4ee2310bc39a2f40cac9) - -## Deployment Procedure -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/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 -``` - -3. Run all services and wait few seconds until everything is initialized: -``` -cd judge0-api-v1.1.5 -docker-compose up -d -sleep 10s -``` - -4. Your instance of Judge0 API v1.1.5 is now available at `http://:3000`. - - -# v1.1.4 (2019-02-17) -## Bug Fixes -- Fixed problem with assigning compile output to submission when compile output is not empty. - - Commits: [@22403707](https://github.com/judge0/api/commit/224037078325dfe02f5fbf191a55513582ca84b5) - -## Deployment Procedure -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/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 -``` - -3. Run all services and wait few seconds until everything is initialized: -``` -cd judge0-api-v1.1.4 -docker-compose up -d -sleep 10s -``` - -4. Your instance of Judge0 API v1.1.4 is now available at `http://:3000`. - - -# v1.1.3 (2019-02-15) -## Improvements -- Improved cleanup of sandbox by deleting stdin, stdout, stderr and meta file before running isolate cleanup. - - Commits: [@1dcfaf98](https://github.com/judge0/api/commit/1dcfaf98536fc55fe200c57de10540de64936654) - -## Bug Fixes -- Fixed problem with compile output that contained invalid byte sequence in UTF-8. - - Commits: [@37d46b14](https://github.com/judge0/api/commit/37d46b140c75aaafeca35ffc36e53746e0905387) -- Fixed problem with submissions not changing their post-run attributes after rerun if compile error occured. - - Commits: [@37d46b14](https://github.com/judge0/api/commit/37d46b140c75aaafeca35ffc36e53746e0905387) - -## Deployment Procedure -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/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 -``` - -3. Run all services and wait few seconds until everything is initialized: -``` -cd judge0-api-v1.1.3 -docker-compose up -d -sleep 10s -``` - -4. Your instance of Judge0 API v1.1.3 is now available at `http://: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. - - Commits: [@1f135c1a](https://github.com/judge0/api/commit/1f135c1a53f5039b52de5e9c78764c80a7ed3945) [@350ff3a4](https://github.com/judge0/api/commit/350ff3a4705b6d83ef4f1188de52586cbb87e693) - -## Bug Fixes -- Fixed writing of source code and stdin to disc, they are now written as binary files to avoid UTF-8 problems. - - Commits: [@519efbea](https://github.com/judge0/api/commit/519efbea1548f9dab5a95032af2cfa88fc319c65) -- Fixed problem with stripping output that contained invalid byte sequence in UTF-8. - - Commits: [@4c994c67](https://github.com/judge0/api/commit/4c994c67630d6679a636a656ba0041ba6a680219) - -## Other Changes -- Use `judge0/api-base:0.3.0` as base image which uses [isolate@18554e83](https://github.com/ioi/isolate/commit/18554e83793508acd1032d0cf4229a332c43085e). - - Commits: [@350ff3a4](https://github.com/judge0/api/commit/350ff3a4705b6d83ef4f1188de52586cbb87e693) - -## Deployment Procedure -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/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 -``` - -3. Run all services and wait few seconds until everything is initialized: -``` -cd judge0-api-v1.1.2 -docker-compose up -d -sleep 10s -``` - -4. Your instance of Judge0 API v1.1.2 is now available at `http://: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`. - - Commits: [@b25153e9](https://github.com/judge0/api/commit/b25153e9450569c995e8f3afe036fed4ad58726c) - -## 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. - - Commits: [@b25153e9](https://github.com/judge0/api/commit/b25153e9450569c995e8f3afe036fed4ad58726c) - -## Deployment Procedure -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/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 -``` - -3. Run all services and wait few seconds until everything is initialized: -``` -cd judge0-api-v1.1.1 -docker-compose up -d -sleep 10s -``` - -4. Your instance of Judge0 API v1.1.1 is now available at `http://: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](https://github.com/judge0/api/pull/60) -- Added fixed time limit of 10 seconds for compilation. - - Issues: [#63](https://github.com/judge0/api/issues/63) [#64](https://github.com/judge0/api/issues/64) - - Commits: [@2f05ce2c](https://github.com/judge0/api/commit/2f05ce2c9305fccaeb0c08e23d645736593d787e) - -## Improvements -- Improved procedure of seeding database with languages. Seeding is now idempotent. - - Commits: [@72cff961](https://github.com/judge0/api/commit/72cff9616db20bed128a38111e3c28dbfc75696e) - -## Bux Fixes -- Fixed versions of Postgres and Redis in Docker Compose files. - - Issues: [#20](https://github.com/judge0/api/issues/20) [#38](https://github.com/judge0/api/issues/38) [#40](https://github.com/judge0/api/issues/40) [#45](https://github.com/judge0/api/issues/45) [#47](https://github.com/judge0/api/issues/47) [#56](https://github.com/judge0/api/issues/56) [#57](https://github.com/judge0/api/issues/57) - - Commits: [@80a61629](https://github.com/judge0/api/commit/80a61629129af75e1d8a4bb167b349ab34cabfd3) [@90ec40cf](https://github.com/judge0/api/commit/90ec40cf5b4dc2ca6aa4c3af59326d431530cf80) -- Fixed problem with workers stopping when they lost connection with Postgres or Redis. - - Commits: [@eee340b6](https://github.com/judge0/api/commit/eee340b650aeacc7971ce5e73652a7bfa9e243af) -- Fixed problem of storing submission's stdout and stderr that contained invalid byte sequence in UTF-8. - - Commits: [@ff63c1bc](https://github.com/judge0/api/commit/ff63c1bc498a62101d4c074f5aa7b7a971550164) - -## Deployment Procedure -1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/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 -``` - -3. 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](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/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 -``` - -3. Run all services and wait few seconds until everything is initialized: -``` -cd judge0-api-v1.0.0 -docker-compose up -d -sleep 10s -``` - -4. Your instance of Judge0 API v1.0.0 is now available at `http://:3000`. +6. Your instance of Judge0 v1.11.0-extra is now available at `https://`. \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 71fba0bf..3cdcd1e4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM judge0/compilers:1.4.0 AS production +FROM judge0/compilers:1.6.0-extra AS production ENV JUDGE0_HOMEPAGE "https://judge0.com" LABEL homepage=$JUDGE0_HOMEPAGE @@ -12,7 +12,7 @@ LABEL maintainer=$JUDGE0_MAINTAINER ENV PATH "/usr/local/ruby-2.7.0/bin:/opt/.gem/bin:$PATH" ENV GEM_HOME "/opt/.gem/" -RUN apt-get update && \ +RUN apt-get update -o Acquire::Check-Valid-Until=false && \ apt-get install -y --no-install-recommends \ cron \ libpq-dev \ @@ -22,8 +22,7 @@ RUN apt-get update && \ gem install bundler:2.1.4 && \ npm install -g --unsafe-perm aglio@2.3.0 -ENV VIRTUAL_PORT 2358 -EXPOSE $VIRTUAL_PORT +EXPOSE 2358 WORKDIR /api @@ -35,24 +34,19 @@ RUN cat /etc/cron.d/* | crontab - COPY . . -ENTRYPOINT ["./docker-entrypoint.sh"] -CMD ["./scripts/server"] - -ENV JUDGE0_VERSION "1.13.0" -LABEL version=$JUDGE0_VERSION +ENTRYPOINT ["/api/docker-entrypoint.sh"] +CMD ["/api/scripts/server"] +RUN useradd -u 1000 -m -r judge0 && \ + echo "judge0 ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers && \ + chown judge0: /api/tmp/ -FROM production AS development +USER judge0 -ARG DEV_USER=judge0 -ARG DEV_USER_ID=1000 +ENV JUDGE0_VERSION "1.13.1-extra" +LABEL version=$JUDGE0_VERSION -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - vim && \ - useradd -u $DEV_USER_ID -m -r $DEV_USER && \ - echo "$DEV_USER ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers -USER $DEV_USER +FROM production AS development CMD ["sleep", "infinity"] diff --git a/Gemfile.lock b/Gemfile.lock index 1524fe4f..532948b9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -91,7 +91,9 @@ GEM mime-types (3.3.1) mime-types-data (~> 3.2015) mime-types-data (3.2020.0512) - mimemagic (0.3.5) + mimemagic (0.3.10) + nokogiri (~> 1) + rake mini_mime (1.0.2) mini_portile2 (2.4.0) minitest (5.14.1) diff --git a/README.md b/README.md index 47a18353..8c25b936 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# Judge0 +# Judge0 Extra CE -[![Judge0 Wallpaper](https://minio.judge0.com/public/web/image.png)](https://ce.judge0.com) +[![Judge0 Wallpaper](https://minio.judge0.com/public/web/image.png)](https://extra-ce.judge0.com) [![License](https://img.shields.io/github/license/judge0/judge0?color=2185d0&style=flat-square)](LICENSE) [![Release](https://img.shields.io/github/v/release/judge0/judge0?color=2185d0&style=flat-square)](https://github.com/judge0/judge0/releases) @@ -28,7 +28,7 @@ * [License](#license) ## About -[Judge0](https://ce.judge0.com) is a robust, scalable, and [open-source](https://github.com/judge0/judge0) **online code execution system**. You can use it to build a wide range of applications that need online code execution features. Some examples include competitive programming platforms, e-learning platforms, candidate assessment and recruitment platforms, online code editors, online IDEs, and many more. +[Judge0](https://extra-ce.judge0.com) is a robust, scalable, and [open-source](https://github.com/judge0/judge0) **online code execution system**. You can use it to build a wide range of applications that need online code execution features. Some examples include competitive programming platforms, e-learning platforms, candidate assessment and recruitment platforms, online code editors, online IDEs, and many more. In our research paper [Robust and Scalable Online Code Execution System](https://paper.judge0.com), we present Judge0's modern modular architecture that can be easily deployed and scaled. We study its design, comment on the various challenges in building such systems, and compare it with other available online code execution systems and online judge systems. @@ -38,7 +38,7 @@ Easily integrate online code editor with code execution (a.k.a. online compiler) ## Features - Quick and easy [installation](https://judge0.com/#pricing) -- Rich and verbose [API documentation](https://ce.judge0.com) +- Rich and verbose [API documentation](https://extra-ce.judge0.com) - Scalable architecture - Sandboxed compilation and execution - Support for [60+ languages](#supported-languages) @@ -48,10 +48,10 @@ Easily integrate online code editor with code execution (a.k.a. online compiler) - Detailed execution results - Webhooks (HTTP callbacks) -For more information about these and other features, please [read the documentation](https://ce.judge0.com). +For more information about these and other features, please [read the documentation](https://extra-ce.judge0.com). ## Get Started -Feel free to start with the [**FREE Basic Plan**](https://judge0.com/ce) on RapidAPI or [host it yourself](https://github.com/judge0/judge0/blob/master/CHANGELOG.md#deployment-procedure). +Feel free to start with the [**FREE Basic Plan**](https://judge0.com/extra-ce) on RapidAPI or [host it yourself](https://github.com/judge0/judge0/blob/extra/CHANGELOG.md#deployment-procedure). You can find our detailed plans and pricing [here](https://judge0.com/#pricing). @@ -66,7 +66,7 @@ Judge0 comes in two flavors: [Judge0 CE](https://judge0.com/ce) and [Judge0 Extr You can find the source code for Judge0 CE on the [`master`](https://github.com/judge0/judge0/tree/master) branch, while you can find the source code for Judge0 Extra CE on the [`extra`](https://github.com/judge0/judge0/tree/extra) branch. -Judge0 Extra CE is also available on [RapidAPI](https://judge0.com/extra-ce). +Judge0 CE is also available on [RapidAPI](https://judge0.com/ce). ## Supported Languages Judge0 comes in two flavors: [Judge0 CE](https://judge0.com/ce) and [Judge0 Extra CE](https://judge0.com/extra-ce). They differ mostly in the [supported languages](#supported-languages). @@ -495,7 +495,7 @@ Special thanks to open-source projects without whom Judge0 probably wouldn't exi Thanks a lot to all [Patrons](https://www.patreon.com/hermanzdosilovic) and [PayPal](https://paypal.me/hermanzdosilovic) donors that support Judge0 development. Thank you! ♥ ## Donate -Your are more than welcome to support Judge0 development on [Patreon](https://www.patreon.com/hermanzdosilovic), via [PayPal](https://paypal.me/hermanzdosilovic) or [Revolut](https://pay.revolut.com/profile/hermancy5). Thank you. +You are more than welcome to support Judge0 development on [Patreon](https://www.patreon.com/hermanzdosilovic), via [PayPal](https://paypal.me/hermanzdosilovic) or [Revolut](https://pay.revolut.com/profile/hermancy5). Thank you. ## License -Judge0 is licensed under the [GNU General Public License v3.0](LICENSE). +Judge0 is licensed under the [GNU General Public License v3.0](LICENSE). \ No newline at end of file diff --git a/app/helpers/config.rb b/app/helpers/config.rb index 10120c36..c57b8c53 100644 --- a/app/helpers/config.rb +++ b/app/helpers/config.rb @@ -13,24 +13,24 @@ module Config CALLBACKS_TIMEOUT = (ENV["CALLBACKS_TIMEOUT"].presence || 5).to_f ENABLE_ADDITIONAL_FILES = ENV["ENABLE_ADDITIONAL_FILES"] != "false" MAX_QUEUE_SIZE = (ENV["MAX_QUEUE_SIZE"].presence || 100).to_i - CPU_TIME_LIMIT = (ENV["CPU_TIME_LIMIT"].presence || 5).to_f - MAX_CPU_TIME_LIMIT = (ENV["MAX_CPU_TIME_LIMIT"].presence || 15).to_f + CPU_TIME_LIMIT = (ENV["CPU_TIME_LIMIT"].presence || 15).to_f + MAX_CPU_TIME_LIMIT = (ENV["MAX_CPU_TIME_LIMIT"].presence || 20).to_f CPU_EXTRA_TIME = (ENV["CPU_EXTRA_TIME"].presence || 1).to_f MAX_CPU_EXTRA_TIME = (ENV["MAX_CPU_EXTRA_TIME"].presence || 5).to_f - WALL_TIME_LIMIT = (ENV["WALL_TIME_LIMIT"].presence || 10).to_f - MAX_WALL_TIME_LIMIT = (ENV["MAX_WALL_TIME_LIMIT"].presence || 20).to_f + WALL_TIME_LIMIT = (ENV["WALL_TIME_LIMIT"].presence || 20).to_f + MAX_WALL_TIME_LIMIT = (ENV["MAX_WALL_TIME_LIMIT"].presence || 25).to_f MEMORY_LIMIT = (ENV["MEMORY_LIMIT"].presence || 128000).to_i # in KB MAX_MEMORY_LIMIT = (ENV["MAX_MEMORY_LIMIT"].presence || 512000).to_i STACK_LIMIT = (ENV["STACK_LIMIT"].presence || 64000).to_i # in KB MAX_STACK_LIMIT = (ENV["MAX_STACK_LIMIT"].presence || 128000).to_i - MAX_PROCESSES_AND_OR_THREADS = (ENV["MAX_PROCESSES_AND_OR_THREADS"].presence || 60).to_i + MAX_PROCESSES_AND_OR_THREADS = (ENV["MAX_PROCESSES_AND_OR_THREADS"].presence || 100).to_i MAX_MAX_PROCESSES_AND_OR_THREADS = (ENV["MAX_MAX_PROCESSES_AND_OR_THREADS"].presence || 120).to_i ENABLE_PER_PROCESS_AND_THREAD_TIME_LIMIT = ENV["ENABLE_PER_PROCESS_AND_THREAD_TIME_LIMIT"] == "true" ALLOW_ENABLE_PER_PROCESS_AND_THREAD_TIME_LIMIT = ENV["ALLOW_ENABLE_PER_PROCESS_AND_THREAD_TIME_LIMIT"] != "false" ENABLE_PER_PROCESS_AND_THREAD_MEMORY_LIMIT = ENV["ENABLE_PER_PROCESS_AND_THREAD_MEMORY_LIMIT"] == "true" ALLOW_ENABLE_PER_PROCESS_AND_THREAD_MEMORY_LIMIT = ENV["ALLOW_ENABLE_PER_PROCESS_AND_THREAD_MEMORY_LIMIT"] != "false" - MAX_FILE_SIZE = (ENV["MAX_FILE_SIZE"].presence || 1024).to_i - MAX_MAX_FILE_SIZE = (ENV["MAX_MAX_FILE_SIZE"].presence || 4096).to_i + MAX_FILE_SIZE = (ENV["MAX_FILE_SIZE"].presence || 5120).to_i + MAX_MAX_FILE_SIZE = (ENV["MAX_MAX_FILE_SIZE"].presence || 20480).to_i NUMBER_OF_RUNS = (ENV["NUMBER_OF_RUNS"].presence || 1).to_i MAX_NUMBER_OF_RUNS = (ENV["MAX_NUMBER_OF_RUNS"].presence || 20).to_i REDIRECT_STDERR_TO_STDOUT = ENV["REDIRECT_STDERR_TO_STDOUT"] == "true" @@ -40,7 +40,7 @@ module Config SUBMISSION_CACHE_DURATION = (ENV["SUBMISSION_CACHE_DURATION"].presence || 1).to_f USE_DOCS_AS_HOMEPAGE = ENV["USE_DOCS_AS_HOMEPAGE"] == "true" ALLOW_ENABLE_NETWORK = ENV["ALLOW_ENABLE_NETWORK"] != "false" - ENABLE_NETWORK = ENV["ENABLE_NETWORK"] == "true" + ENABLE_NETWORK = ENV["ENABLE_NETWORK"] != "false" # Enabled by default for Judge0 Extra CE. def self.config_info @@default_confg ||= { diff --git a/app/jobs/isolate_job.rb b/app/jobs/isolate_job.rb index 49e3ff2f..dcce2cd7 100644 --- a/app/jobs/isolate_job.rb +++ b/app/jobs/isolate_job.rb @@ -146,6 +146,9 @@ def compile -E PATH=\"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\" \ -E LANG -E LANGUAGE -E LC_ALL -E JUDGE0_HOMEPAGE -E JUDGE0_SOURCE_CODE -E JUDGE0_MAINTAINER -E JUDGE0_VERSION \ -d /etc:noexec \ + -d /usr/local/BosqueLanguage/impl:rw \ + -d /files:noexec \ + -d /NuGet/packages:noexec \ --run \ -- /bin/bash compile > #{compile_output_file} \ " @@ -168,7 +171,7 @@ def compile files_to_remove = [compile_output_file] files_to_remove << compile_script unless submission.is_project files_to_remove.each do |f| - `sudo chown $(whoami): #{f} && sudo rm -rf #{f}` + `sudo rm -rf #{f}` end return :success if process_status.success? @@ -197,7 +200,7 @@ def run unless submission.is_project # gsub is mandatory! command_line_arguments = submission.command_line_arguments.to_s.strip.encode("UTF-8", invalid: :replace).gsub(/[$&;<>|`]/, "") - File.open(run_script, "w") { |f| f.write("#{submission.language.run_cmd} #{command_line_arguments}")} + File.open(run_script, "w") { |f| f.write("#{submission.language.run_cmd % command_line_arguments}")} end command = "isolate #{cgroups} \ @@ -229,7 +232,7 @@ def run `#{command}` - `sudo chown $(whoami): #{run_script} && rm #{run_script}` unless submission.is_project + `sudo rm #{run_script}` unless submission.is_project end def verify diff --git a/cron/clear_cache b/cron/clear_cache index 18e1e7b8..ae1aad99 100644 --- a/cron/clear_cache +++ b/cron/clear_cache @@ -1 +1 @@ -0 0 * * * bash -c "source /api/tmp/environment; cd /api; rake judge0:clear_cache &> /api/log/clear_cache.log" +0 0 * * * bash -c "source /api/environment && cd /api && rake judge0:clear_cache &> ./log/clear_cache.log" diff --git a/cron/telemetry b/cron/telemetry index d15d6520..33ab0a59 100644 --- a/cron/telemetry +++ b/cron/telemetry @@ -1 +1 @@ -0 */12 * * * bash -c "source /api/tmp/environment; /api/bin/telemetry &> /api/log/telemetry.log" +0 */12 * * * bash -c "source /api/environment && cd /api && ./bin/telemetry &> ./log/telemetry.log" diff --git a/db/languages/active.rb b/db/languages/active.rb index 069a6ac2..73cf3e3e 100644 --- a/db/languages/active.rb +++ b/db/languages/active.rb @@ -2,359 +2,165 @@ @languages += [ { - id: 43, - name: "Plain Text", - is_archived: false, - source_file: "text.txt", - run_cmd: "/bin/cat text.txt" - }, - { - id: 44, - name: "Executable", - is_archived: false, - source_file: "a.out", - run_cmd: "/bin/chmod +x a.out && ./a.out" - }, - { - id: 45, - name: "Assembly (NASM 2.14.02)", - is_archived: false, - source_file: "main.asm", - compile_cmd: "/usr/local/nasm-2.14.02/bin/nasmld -f elf64 %s main.asm", - run_cmd: "./a.out" - }, - { - id: 46, - name: "Bash (5.0.0)", - is_archived: false, - source_file: "script.sh", - run_cmd: "/usr/local/bash-5.0/bin/bash script.sh" - }, - { - id: 47, - name: "Basic (FBC 1.07.1)", - is_archived: false, - source_file: "main.bas", - compile_cmd: "/usr/local/fbc-1.07.1/bin/fbc %s main.bas", - run_cmd: "./main" - }, - { - id: 48, - name: "C (GCC 7.4.0)", - is_archived: false, - source_file: "main.c", - compile_cmd: "/usr/local/gcc-7.4.0/bin/gcc %s main.c", - run_cmd: "./a.out" - }, - { - id: 49, - name: "C (GCC 8.3.0)", + id: 1, + name: "C (Clang 10.0.1)", is_archived: false, source_file: "main.c", - compile_cmd: "/usr/local/gcc-8.3.0/bin/gcc %s main.c", - run_cmd: "./a.out" + compile_cmd: "/usr/bin/clang-10 %s main.c", + run_cmd: "./a.out %s" }, { - id: 50, - name: "C (GCC 9.2.0)", - is_archived: false, - source_file: "main.c", - compile_cmd: "/usr/local/gcc-9.2.0/bin/gcc %s main.c", - run_cmd: "./a.out" - }, - { - id: 51, - name: "C# (Mono 6.6.0.161)", - is_archived: false, - source_file: "Main.cs", - compile_cmd: "/usr/local/mono-6.6.0.161/bin/mcs %s Main.cs", - run_cmd: "/usr/local/mono-6.6.0.161/bin/mono Main.exe" - }, - { - id: 52, - name: "C++ (GCC 7.4.0)", - is_archived: false, - source_file: "main.cpp", - compile_cmd: "/usr/local/gcc-7.4.0/bin/g++ %s main.cpp", - run_cmd: "LD_LIBRARY_PATH=/usr/local/gcc-7.4.0/lib64 ./a.out" - }, - { - id: 53, - name: "C++ (GCC 8.3.0)", + id: 2, + name: "C++ (Clang 10.0.1)", is_archived: false, source_file: "main.cpp", - compile_cmd: "/usr/local/gcc-8.3.0/bin/g++ %s main.cpp", - run_cmd: "LD_LIBRARY_PATH=/usr/local/gcc-8.3.0/lib64 ./a.out" - }, - { - id: 54, - name: "C++ (GCC 9.2.0)", - is_archived: false, - source_file: "main.cpp", - compile_cmd: "/usr/local/gcc-9.2.0/bin/g++ %s main.cpp", - run_cmd: "LD_LIBRARY_PATH=/usr/local/gcc-9.2.0/lib64 ./a.out" - }, - { - id: 55, - name: "Common Lisp (SBCL 2.0.0)", - is_archived: false, - source_file: "script.lisp", - run_cmd: "SBCL_HOME=/usr/local/sbcl-2.0.0/lib/sbcl /usr/local/sbcl-2.0.0/bin/sbcl --script script.lisp" - }, - { - id: 56, - name: "D (DMD 2.089.1)", - is_archived: false, - source_file: "main.d", - compile_cmd: "/usr/local/d-2.089.1/linux/bin64/dmd %s main.d", - run_cmd: "./main" - }, - { - id: 57, - name: "Elixir (1.9.4)", - is_archived: false, - source_file: "script.exs", - run_cmd: "/usr/local/elixir-1.9.4/bin/elixir script.exs" - }, - { - id: 58, - name: "Erlang (OTP 22.2)", - is_archived: false, - source_file: "main.erl", - run_cmd: "/bin/sed -i '1s/^/\\n/' main.erl && /usr/local/erlang-22.2/bin/escript main.erl" - }, - { - id: 59, - name: "Fortran (GFortran 9.2.0)", - is_archived: false, - source_file: "main.f90", - compile_cmd: "/usr/local/gcc-9.2.0/bin/gfortran %s main.f90", - run_cmd: "LD_LIBRARY_PATH=/usr/local/gcc-9.2.0/lib64 ./a.out" - }, - { - id: 60, - name: "Go (1.13.5)", - is_archived: false, - source_file: "main.go", - compile_cmd: "GOCACHE=/tmp/.cache/go-build /usr/local/go-1.13.5/bin/go build %s main.go", - run_cmd: "./main" + compile_cmd: "/usr/bin/clang++-10 %s main.cpp", + run_cmd: "./a.out %s" }, { - id: 61, - name: "Haskell (GHC 8.8.1)", + id: 3, + name: "C3 (latest)", is_archived: false, - source_file: "main.hs", - compile_cmd: "/usr/local/ghc-8.8.1/bin/ghc %s main.hs", - run_cmd: "./main" + source_file: "main.c3", + compile_cmd: "/usr/local/c3/c3c %s compile main.c3; /usr/bin/clang-10 main.o", + run_cmd: "./a.out %s" }, { - id: 62, - name: "Java (OpenJDK 13.0.1)", + id: 4, + name: "Java (OpenJDK 14.0.1)", is_archived: false, source_file: "Main.java", - compile_cmd: "/usr/local/openjdk13/bin/javac %s Main.java", - run_cmd: "/usr/local/openjdk13/bin/java Main" - }, - { - id: 63, - name: "JavaScript (Node.js 12.14.0)", - is_archived: false, - source_file: "script.js", - run_cmd: "/usr/local/node-12.14.0/bin/node script.js" - }, - { - id: 64, - name: "Lua (5.3.5)", - is_archived: false, - source_file: "script.lua", - compile_cmd: "/usr/local/lua-5.3.5/luac53 %s script.lua", - run_cmd: "/usr/local/lua-5.3.5/lua53 ./luac.out" - }, - { - id: 65, - name: "OCaml (4.09.0)", - is_archived: false, - source_file: "main.ml", - compile_cmd: "/usr/local/ocaml-4.09.0/bin/ocamlc %s main.ml", - run_cmd: "./a.out" + compile_cmd: "/usr/local/openjdk14/bin/javac %s Main.java", + run_cmd: "/usr/local/openjdk14/bin/java Main %s" }, { - id: 66, - name: "Octave (5.1.0)", + id: 5, + name: "Java Test (OpenJDK 14.0.1, JUnit Platform Console Standalone 1.6.2)", is_archived: false, - source_file: "script.m", - run_cmd: "/usr/local/octave-5.1.0/bin/octave-cli -q --no-gui --no-history script.m" + source_file: "MainTest.java", + compile_cmd: "/usr/local/openjdk14/bin/javac -cp /usr/local/junit-platform-console-standalone-1.6.2/launcher.jar %s MainTest.java", + run_cmd: "/usr/local/openjdk14/bin/java -jar /usr/local/junit-platform-console-standalone-1.6.2/launcher.jar --disable-ansi-colors --disable-banner -cp . -c MainTest %s" }, { - id: 67, - name: "Pascal (FPC 3.0.4)", + id: 6, + name: "MPI (OpenRTE 3.1.3) with C (GCC 8.4.0)", is_archived: false, - source_file: "main.pas", - compile_cmd: "/usr/local/fpc-3.0.4/bin/fpc %s main.pas", - run_cmd: "./main" - }, - { - id: 68, - name: "PHP (7.4.1)", - is_archived: false, - source_file: "script.php", - run_cmd: "/usr/local/php-7.4.1/bin/php script.php" + source_file: "main.c", + compile_cmd: "/usr/bin/mpicc %s main.c", + run_cmd: "/usr/bin/mpiexec --allow-run-as-root --oversubscribe %s ./a.out" }, { - id: 69, - name: "Prolog (GNU Prolog 1.4.5)", + id: 7, + name: "MPI (OpenRTE 3.1.3) with C++ (GCC 8.4.0)", is_archived: false, - source_file: "main.pro", - compile_cmd: "PATH=\"/usr/local/gprolog-1.4.5/gprolog-1.4.5/bin:$PATH\" /usr/local/gprolog-1.4.5/gprolog-1.4.5/bin/gplc --no-top-level %s main.pro", - run_cmd: "./main" + source_file: "main.cpp", + compile_cmd: "/usr/bin/mpicxx %s main.cpp", + run_cmd: "/usr/bin/mpiexec --allow-run-as-root --oversubscribe %s ./a.out" }, { - id: 70, - name: "Python (2.7.17)", + id: 8, + name: "MPI (OpenRTE 3.1.3) with Python (3.7.7)", is_archived: false, source_file: "script.py", - run_cmd: "/usr/local/python-2.7.17/bin/python2 script.py" + run_cmd: "/usr/bin/mpiexec --allow-run-as-root --oversubscribe %s /usr/bin/python3 script.py" }, { - id: 71, - name: "Python (3.8.1)", + id: 9, + name: "Nim (stable)", is_archived: false, - source_file: "script.py", - run_cmd: "/usr/local/python-3.8.1/bin/python3 script.py" + source_file: "main.nim", + compile_cmd: "/usr/local/nim/bin/nim compile --nimcache:.cache/nim %s main.nim", + run_cmd: "./main %s" }, { - id: 72, - name: "Ruby (2.7.0)", + id: 10, + name: "Python for ML (3.7.7)", is_archived: false, - source_file: "script.rb", - run_cmd: "/usr/local/ruby-2.7.0/bin/ruby script.rb" + source_file: "script.py", + run_cmd: "/usr/bin/python3 script.py %s" }, { - id: 73, - name: "Rust (1.40.0)", + id: 11, + name: "Bosque (latest)", is_archived: false, - source_file: "main.rs", - compile_cmd: "/usr/local/rust-1.40.0/bin/rustc %s main.rs", - run_cmd: "./main" + source_file: "main.bsq", + compile_cmd: "/usr/bin/node /usr/local/BosqueLanguage/impl/bin/runtimes/exegen/exegen.js -c g++-10 %s main.bsq", + run_cmd:"./a.out %s" }, { - id: 74, - name: "TypeScript (3.7.4)", + id: 12, + name: "C++ Test (GCC 8.4.0, Google Test 1.8.1)", is_archived: false, - source_file: "script.ts", - compile_cmd: "/usr/bin/tsc %s script.ts", - run_cmd: "/usr/local/node-12.14.0/bin/node script.js" + source_file: "main.cpp", + compile_cmd: "/usr/bin/g++ %s main.cpp -lgtest -lgtest_main -lpthread", + run_cmd: "GTEST_COLOR=no ./a.out %s" }, { - id: 75, - name: "C (Clang 7.0.1)", + id: 13, + name: "C (Clang 9.0.1)", is_archived: false, source_file: "main.c", - compile_cmd: "/usr/bin/clang-7 %s main.c", - run_cmd: "./a.out" + compile_cmd: "/usr/bin/clang-9 %s main.c", + run_cmd: "./a.out %s" }, { - id: 76, - name: "C++ (Clang 7.0.1)", + id: 14, + name: "C++ (Clang 9.0.1)", is_archived: false, source_file: "main.cpp", - compile_cmd: "/usr/bin/clang++-7 %s main.cpp", - run_cmd: "./a.out" - }, - { - id: 77, - name: "COBOL (GnuCOBOL 2.2)", - is_archived: false, - source_file: "main.cob", - compile_cmd: "/usr/local/gnucobol-2.2/bin/cobc -free -x %s main.cob", - run_cmd: "LD_LIBRARY_PATH=/usr/local/gnucobol-2.2/lib ./main" + compile_cmd: "/usr/bin/clang++-9 %s main.cpp", + run_cmd: "./a.out %s" }, { - id: 78, - name: "Kotlin (1.3.70)", + id: 15, + name: "C++ Test (Clang 10.0.1, Google Test 1.8.1)", is_archived: false, - source_file: "Main.kt", - compile_cmd: "/usr/local/kotlin-1.3.70/bin/kotlinc %s Main.kt", - run_cmd: "/usr/local/kotlin-1.3.70/bin/kotlin MainKt" - }, - { - id: 79, - name: "Objective-C (Clang 7.0.1)", - is_archived: false, - source_file: "main.m", - compile_cmd: "/usr/bin/clang-7 `gnustep-config --objc-flags | sed 's/-W[^ ]* //g'` `gnustep-config --base-libs | sed 's/-shared-libgcc//'` -I/usr/lib/gcc/x86_64-linux-gnu/8/include main.m %s", - run_cmd: "./a.out" - }, - { - id: 80, - name: "R (4.0.0)", - is_archived: false, - source_file: "script.r", - run_cmd: "/usr/local/r-4.0.0/bin/Rscript script.r" - }, - { - id: 81, - name: "Scala (2.13.2)", - is_archived: false, - source_file: "Main.scala", - compile_cmd: "/usr/local/scala-2.13.2/bin/scalac %s Main.scala", - run_cmd: "/usr/local/scala-2.13.2/bin/scala Main" - }, - { - id: 82, - name: "SQL (SQLite 3.27.2)", - is_archived: false, - source_file: "script.sql", - run_cmd: "/bin/cat script.sql | /usr/bin/sqlite3 db.sqlite" - }, - { - id: 83, - name: "Swift (5.2.3)", - is_archived: false, - source_file: "Main.swift", - compile_cmd: "/usr/local/swift-5.2.3/bin/swiftc %s Main.swift", - run_cmd: "./Main" + source_file: "main.cpp", + compile_cmd: "/usr/bin/clang++-10 %s main.cpp -lgtest -lgtest_main -lpthread", + run_cmd: "GTEST_COLOR=no ./a.out %s" }, { - id: 84, + id: 20, name: "Visual Basic.Net (vbnc 0.0.0.5943)", is_archived: false, source_file: "Main.vb", compile_cmd: "/usr/bin/vbnc %s Main.vb", - run_cmd: "/usr/bin/mono Main.exe" + run_cmd: "/usr/bin/mono Main.exe %s" }, { - id: 85, - name: "Perl (5.28.1)", + id: 89, + name: "Multi-file program", is_archived: false, - source_file: "script.pl", - run_cmd: "/usr/bin/perl script.pl" }, { - id: 86, - name: "Clojure (1.10.1)", + id: 21, + name: "C# (.NET Core SDK 3.1.406)", is_archived: false, - source_file: "main.clj", - run_cmd: "/usr/local/bin/java -jar /usr/local/clojure-1.10.1/clojure.jar main.clj" + source_file: "Main.cs", + compile_cmd: "cp /files/c#-dotnet/* . && mkdir -p ~/.dotnet && touch ~/.dotnet/3.1.406.dotnetFirstUseSentinel && /usr/bin/dotnet build %s Main.csproj", + run_cmd: "/usr/bin/dotnet run --no-build Main.csproj %s" }, { - id: 87, - name: "F# (.NET Core SDK 3.1.202)", + id: 22, + name: "C# (Mono 6.12.0.122)", is_archived: false, - source_file: "script.fsx", - run_cmd: "mkdir -p ~/.dotnet && touch ~/.dotnet/3.1.202.dotnetFirstUseSentinel && /usr/local/dotnet-sdk/dotnet fsi script.fsx" + source_file: "Main.cs", + compile_cmd: "/usr/bin/mcs %s Main.cs", + run_cmd: "/usr/bin/mono Main.exe %s" }, { - id: 88, - name: "Groovy (3.0.3)", + id: 23, + name: "C# Test (.NET Core SDK 3.1.406, NUnit 3.12.0)", is_archived: false, - source_file: "script.groovy", - compile_cmd: "/usr/local/groovy-3.0.3/bin/groovyc %s script.groovy", - run_cmd: "/usr/local/bin/java -cp \".:/usr/local/groovy-3.0.3/lib/*\" script" + source_file: "Test.cs", + compile_cmd: "cp /files/nunit/* . && mkdir -p ~/.dotnet && touch ~/.dotnet/3.1.406.dotnetFirstUseSentinel && dotnet restore --source /NuGet/packages && dotnet build --no-restore %s Test.csproj", + run_cmd: "/usr/bin/dotnet test --no-build Test.csproj %s" }, { - id: 89, - name: "Multi-file program", + id: 24, + name: "F# (.NET Core SDK 3.1.406)", is_archived: false, - } + source_file: "script.fsx", + run_cmd: "mkdir -p ~/.dotnet && touch ~/.dotnet/3.1.406.dotnetFirstUseSentinel && /usr/bin/dotnet fsi script.fsx %s" + }, ] \ No newline at end of file diff --git a/db/languages/archived.rb b/db/languages/archived.rb index baaaf7e2..9018382e 100644 --- a/db/languages/archived.rb +++ b/db/languages/archived.rb @@ -1,324 +1,35 @@ @languages ||= [] @languages += [ - { - id: 1, - name: "Bash (4.4)", - is_archived: true, - source_file: "script.sh", - run_cmd: "/usr/local/bash-4.4/bin/bash script.sh" - }, - { - id: 2, - name: "Bash (4.0)", - is_archived: true, - source_file: "script.sh", - run_cmd: "/usr/local/bash-4.0/bin/bash script.sh" - }, - { - id: 3, - name: "Basic (fbc 1.05.0)", - is_archived: true, - source_file: "main.bas", - compile_cmd: "/usr/local/fbc-1.05.0/bin/fbc %s main.bas", - run_cmd: "./main" - }, - { - id: 4, - name: "C (gcc 7.2.0)", - is_archived: true, - source_file: "main.c", - compile_cmd: "/usr/local/gcc-7.2.0/bin/gcc %s main.c", - run_cmd: "./a.out" - }, - { - id: 5, - name: "C (gcc 6.4.0)", - is_archived: true, - source_file: "main.c", - compile_cmd: "/usr/local/gcc-6.4.0/bin/gcc %s main.c", - run_cmd: "./a.out" - }, - { - id: 6, - name: "C (gcc 6.3.0)", - is_archived: true, - source_file: "main.c", - compile_cmd: "/usr/local/gcc-6.3.0/bin/gcc %s main.c", - run_cmd: "./a.out" - }, - { - id: 7, - name: "C (gcc 5.4.0)", - is_archived: true, - source_file: "main.c", - compile_cmd: "/usr/local/gcc-5.4.0/bin/gcc %s main.c", - run_cmd: "./a.out" - }, - { - id: 8, - name: "C (gcc 4.9.4)", - is_archived: true, - source_file: "main.c", - compile_cmd: "/usr/local/gcc-4.9.4/bin/gcc %s main.c", - run_cmd: "./a.out" - }, - { - id: 9, - name: "C (gcc 4.8.5)", - is_archived: true, - source_file: "main.c", - compile_cmd: "/usr/local/gcc-4.8.5/bin/gcc %s main.c", - run_cmd: "./a.out" - }, - - { - id: 10, - name: "C++ (g++ 7.2.0)", - is_archived: true, - source_file: "main.cpp", - compile_cmd: "/usr/local/gcc-7.2.0/bin/g++ %s main.cpp", - run_cmd: "LD_LIBRARY_PATH=/usr/local/gcc-7.2.0/lib64 ./a.out" - }, - { - id: 11, - name: "C++ (g++ 6.4.0)", - is_archived: true, - source_file: "main.cpp", - compile_cmd: "/usr/local/gcc-6.4.0/bin/g++ %s main.cpp", - run_cmd: "LD_LIBRARY_PATH=/usr/local/gcc-6.4.0/lib64 ./a.out" - }, - { - id: 12, - name: "C++ (g++ 6.3.0)", - is_archived: true, - source_file: "main.cpp", - compile_cmd: "/usr/local/gcc-6.3.0/bin/g++ %s main.cpp", - run_cmd: "LD_LIBRARY_PATH=/usr/local/gcc-6.3.0/lib64 ./a.out" - }, - { - id: 13, - name: "C++ (g++ 5.4.0)", - is_archived: true, - source_file: "main.cpp", - compile_cmd: "/usr/local/gcc-5.4.0/bin/g++ %s main.cpp", - run_cmd: "LD_LIBRARY_PATH=/usr/local/gcc-5.4.0/lib64 ./a.out" - }, - { - id: 14, - name: "C++ (g++ 4.9.4)", - is_archived: true, - source_file: "main.cpp", - compile_cmd: "/usr/local/gcc-4.9.4/bin/g++ %s main.cpp", - run_cmd: "LD_LIBRARY_PATH=/usr/local/gcc-4.9.4/lib64 ./a.out" - }, - { - id: 15, - name: "C++ (g++ 4.8.5)", - is_archived: true, - source_file: "main.cpp", - compile_cmd: "/usr/local/gcc-4.8.5/bin/g++ %s main.cpp", - run_cmd: "LD_LIBRARY_PATH=/usr/local/gcc-4.8.5/lib64 ./a.out" - }, - { - id: 16, - name: "C# (mono 5.4.0.167)", - is_archived: true, - source_file: "Main.cs", - compile_cmd: "/usr/local/mono-5.4.0.167/bin/mcs %s Main.cs", - run_cmd: "/usr/local/mono-5.4.0.167/bin/mono Main.exe" - }, - { - id: 17, - name: "C# (mono 5.2.0.224)", - is_archived: true, - source_file: "Main.cs", - compile_cmd: "/usr/local/mono-5.2.0.224/bin/mcs %s Main.cs", - run_cmd: "/usr/local/mono-5.2.0.224/bin/mono Main.exe" - }, - { - id: 18, - name: "Clojure (1.8.0)", - is_archived: true, - source_file: "main.clj", - run_cmd: "/usr/bin/java -cp /usr/local/clojure-1.8.0/clojure-1.8.0.jar clojure.main main.clj" - }, - { - id: 19, - name: "Crystal (0.23.1)", - is_archived: true, - source_file: "main.cr", - compile_cmd: "/usr/local/crystal-0.23.1-3/bin/crystal build %s main.cr", - run_cmd: "./main" - }, - { - id: 20, - name: "Elixir (1.5.1)", - is_archived: true, - source_file: "main.exs", - run_cmd: "/usr/local/elixir-1.5.1/bin/elixir main.exs" - }, - { - id: 21, - name: "Erlang (OTP 20.0)", - is_archived: true, - source_file: "main.erl", - run_cmd: "/bin/sed -i \"s/^/\\n/\" main.erl && /usr/local/erlang-20.0/bin/escript main.erl" - }, - { - id: 22, - name: "Go (1.9)", - is_archived: true, - source_file: "main.go", - compile_cmd: "/usr/local/go-1.9/bin/go build %s main.go", - run_cmd: "./main" - }, - { - id: 23, - name: "Haskell (ghc 8.2.1)", - is_archived: true, - source_file: "main.hs", - compile_cmd: "/usr/local/ghc-8.2.1/bin/ghc %s main.hs", - run_cmd: "./main" - }, - { - id: 24, - name: "Haskell (ghc 8.0.2)", - is_archived: true, - source_file: "main.hs", - compile_cmd: "/usr/local/ghc-8.0.2/bin/ghc %s main.hs", - run_cmd: "./main" - }, - { - id: 25, - name: "Insect (5.0.0)", - is_archived: true, - source_file: "main.ins", - run_cmd: "/usr/local/insect-5.0.0/insect main.ins" - }, - { - id: 26, - name: "Java (OpenJDK 9 with Eclipse OpenJ9)", - is_archived: true, - source_file: "Main.java", - compile_cmd: "/usr/local/openjdk9-openj9/bin/javac %s Main.java", - run_cmd: "/usr/local/openjdk9-openj9/bin/java Main" - }, - { - id: 27, - name: "Java (OpenJDK 8)", - is_archived: true, - source_file: "Main.java", - compile_cmd: "/usr/lib/jvm/java-8-openjdk-amd64/bin/javac %s Main.java", - run_cmd: "/usr/lib/jvm/java-8-openjdk-amd64/bin/java Main", - }, - { - id: 28, - name: "Java (OpenJDK 7)", - is_archived: true, - source_file: "Main.java", - compile_cmd: "/usr/lib/jvm/java-7-openjdk-amd64/bin/javac %s Main.java", - run_cmd: "/usr/lib/jvm/java-7-openjdk-amd64/bin/java Main", - }, - { - id: 29, - name: "JavaScript (nodejs 8.5.0)", - is_archived: true, - source_file: "main.js", - run_cmd: "/usr/local/node-8.5.0/bin/node main.js" - }, - { - id: 30, - name: "JavaScript (nodejs 7.10.1)", - is_archived: true, - source_file: "main.js", - run_cmd: "/usr/local/node-7.10.1/bin/node main.js" - }, - { - id: 31, - name: "OCaml (4.05.0)", - is_archived: true, - source_file: "main.ml", - compile_cmd: "/usr/local/ocaml-4.05.0/bin/ocamlc %s main.ml", - run_cmd: "./a.out" - }, - { - id: 32, - name: "Octave (4.2.0)", - is_archived: true, - source_file: "file.m", - run_cmd: "/usr/local/octave-4.2.0/bin/octave-cli -q --no-gui --no-history file.m" - }, - { - id: 33, - name: "Pascal (fpc 3.0.0)", - is_archived: true, - source_file: "main.pas", - compile_cmd: "/usr/local/fpc-3.0.0/bin/fpc %s main.pas", - run_cmd: "./main" - }, - { - id: 34, - name: "Python (3.6.0)", - is_archived: true, - source_file: "main.py", - run_cmd: "/usr/local/python-3.6.0/bin/python3 main.py" - }, - { - id: 35, - name: "Python (3.5.3)", - is_archived: true, - source_file: "main.py", - run_cmd: "/usr/local/python-3.5.3/bin/python3 main.py" - }, - { - id: 36, - name: "Python (2.7.9)", - is_archived: true, - source_file: "main.py", - run_cmd: "/usr/local/python-2.7.9/bin/python main.py" - }, - { - id: 37, - name: "Python (2.6.9)", - is_archived: true, - source_file: "main.py", - run_cmd: "/usr/local/python-2.6.9/bin/python main.py" - }, - { - id: 38, - name: "Ruby (2.4.0)", - is_archived: true, - source_file: "main.rb", - run_cmd: "/usr/local/ruby-2.4.0/bin/ruby main.rb" - }, - { - id: 39, - name: "Ruby (2.3.3)", - is_archived: true, - source_file: "main.rb", - run_cmd: "/usr/local/ruby-2.3.3/bin/ruby main.rb" - }, - { - id: 40, - name: "Ruby (2.2.6)", - is_archived: true, - source_file: "main.rb", - run_cmd: "/usr/local/ruby-2.2.6/bin/ruby main.rb" - }, - { - id: 41, - name: "Ruby (2.1.9)", - is_archived: true, - source_file: "main.rb", - run_cmd: "/usr/local/ruby-2.1.9/bin/ruby main.rb" - }, - { - id: 42, - name: "Rust (1.20.0)", - is_archived: true, - source_file: "main.rs", - compile_cmd: "/usr/local/rust-1.20.0/bin/rustc %s main.rs", - run_cmd: "./main" - } + { + id: 16, + name: "C# (.NET Core SDK 3.1.302)", + is_archived: true, + source_file: "Main.cs", + compile_cmd: "cp /files/c#-dotnet/* . && mkdir -p ~/.dotnet && touch ~/.dotnet/3.1.302.dotnetFirstUseSentinel && /usr/bin/dotnet build %s Main.csproj", + run_cmd: "/usr/bin/dotnet run --no-build Main.csproj %s" + }, + { + id: 17, + name: "C# (Mono 6.10.0.104)", + is_archived: true, + source_file: "Main.cs", + compile_cmd: "/usr/bin/mcs %s Main.cs", + run_cmd: "/usr/bin/mono Main.exe %s" + }, + { + id: 18, + name: "C# Test (.NET Core SDK 3.1.302, NUnit 3.12.0)", + is_archived: true, + source_file: "Test.cs", + compile_cmd: "cp /files/nunit/* . && mkdir -p ~/.dotnet && touch ~/.dotnet/3.1.302.dotnetFirstUseSentinel && dotnet restore --source /NuGet/packages && dotnet build --no-restore %s Test.csproj", + run_cmd: "/usr/bin/dotnet test --no-build Test.csproj %s" + }, + { + id: 19, + name: "F# (.NET Core SDK 3.1.302)", + is_archived: true, + source_file: "script.fsx", + run_cmd: "mkdir -p ~/.dotnet && touch ~/.dotnet/3.1.302.dotnetFirstUseSentinel && /usr/bin/dotnet fsi script.fsx %s" + } ] \ No newline at end of file diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 84a80a60..0a4e9154 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -1,19 +1,9 @@ -version: '2' services: - nginx: - image: judge0/jwilder-nginx-proxy:latest-2020-10-30 - environment: - - DEFAULT_HOST=judge0.local - volumes: - - /var/run/docker.sock:/tmp/docker.sock:ro - ports: - - "80:80" - restart: always - - server: - image: judge0/judge0:latest-dev - environment: - - VIRTUAL_HOST=judge0.local + judge0: + image: judge0/judge0:latest-extra-dev + build: + context: . + target: development volumes: - .:/api ports: @@ -22,47 +12,20 @@ services: privileged: true db: - image: postgres:13.0 + image: postgres:16.2 env_file: judge0.conf volumes: - - postgres-data:/var/lib/postgresql/data/ - restart: always - - # Not actually currently used. Just for testing purposes in development. - pgbouncer: - image: pgbouncer/pgbouncer:1.14.0 - environment: # DATABASES_* are the same as from judge0.conf - - DATABASES_HOST=db - - DATABASES_PORT=5432 - - DATABASES_DBNAME=judge0 - - DATABASES_USER=judge0 - - DATABASES_PASSWORD=YourPasswordHere1234 - - PGBOUNCER_LISTEN_PORT=5432 # Set the same as Postgres + - data:/var/lib/postgresql/data/ restart: always redis: - image: redis:6.0 - command: [ - "bash", "-c", - 'docker-entrypoint.sh --appendonly yes --requirepass "$$REDIS_PASSWORD"' - ] - env_file: judge0.conf - volumes: - - redis-data:/data - restart: always - - resque: - image: ennexa/resque-web:latest - entrypoint: "" + image: redis:7.2.4 command: [ "bash", "-c", - 'resque-web -FL -r redis://:$$REDIS_PASSWORD@$$REDIS_HOST:$$REDIS_PORT' + 'docker-entrypoint.sh --appendonly no --requirepass "$$REDIS_PASSWORD"' ] env_file: judge0.conf - ports: - - "5678:5678" restart: always volumes: - postgres-data: - redis-data: + data: diff --git a/docker-compose.https.yml b/docker-compose.https.yml deleted file mode 100644 index 30f6c208..00000000 --- a/docker-compose.https.yml +++ /dev/null @@ -1,77 +0,0 @@ -version: '2' - -x-logging: - &default-logging - logging: - driver: json-file - options: - max-size: 100m - -services: - nginx: - image: judge0/jwilder-nginx-proxy:latest-2020-10-30 - volumes: - - /var/run/docker.sock:/tmp/docker.sock:ro - - ./srv/nginx/vhost.d:/etc/nginx/vhost.d - - ./srv/nginx/html:/usr/share/nginx/html - - ./srv/ssl_certs:/etc/nginx/certs:ro - ports: - - "80:80" - - "443:443" - <<: *default-logging - restart: always - - letsencrypt: - image: judge0/jrcs-letsencrypt-nginx-proxy-companion:2.0 - volumes: - - /var/run/docker.sock:/var/run/docker.sock:ro - - ./srv/ssl_certs:/etc/nginx/certs:rw - volumes_from: - - nginx - <<: *default-logging - restart: always - - server: - image: judge0/judge0:latest - environment: - - VIRTUAL_HOST=example.com - - LETSENCRYPT_HOST=example.com - - LETSENCRYPT_EMAIL=john.doe@gmail.com - volumes: - - ./judge0.conf:/judge0.conf:ro - privileged: true - <<: *default-logging - restart: always - - workers: - image: judge0/judge0:latest - command: ["./scripts/workers"] - volumes: - - ./judge0.conf:/judge0.conf:ro - privileged: true - <<: *default-logging - restart: always - - db: - image: postgres:13.0 - env_file: judge0.conf - volumes: - - postgres-data:/var/lib/postgresql/data/ - <<: *default-logging - restart: always - - redis: - image: redis:6.0 - command: [ - "bash", "-c", - 'docker-entrypoint.sh --appendonly yes --requirepass "$$REDIS_PASSWORD"' - ] - env_file: judge0.conf - volumes: - - redis-data:/data - <<: *default-logging - restart: always - -volumes: - postgres-data: - redis-data: \ No newline at end of file diff --git a/docker-compose.server.yml b/docker-compose.server.yml deleted file mode 100644 index d91feda9..00000000 --- a/docker-compose.server.yml +++ /dev/null @@ -1,47 +0,0 @@ -version: '2' - -x-logging: - &default-logging - logging: - driver: json-file - options: - max-size: 100m - -services: - server: - image: judge0/judge0:latest - volumes: - - ./judge0.conf:/judge0.conf:ro - ports: - - "2358:2358" - privileged: true - <<: *default-logging - restart: always - - db: - image: postgres:13.0 - env_file: judge0.conf - volumes: - - postgres-data:/var/lib/postgresql/data/ - ports: - - "5432:5432" - <<: *default-logging - restart: always - - redis: - image: redis:6.0 - command: [ - "bash", "-c", - 'docker-entrypoint.sh --appendonly yes --requirepass "$$REDIS_PASSWORD"' - ] - env_file: judge0.conf - volumes: - - redis-data:/data - ports: - - "6379:6379" - <<: *default-logging - restart: always - -volumes: - postgres-data: - redis-data: \ No newline at end of file diff --git a/docker-compose.standalone.yml b/docker-compose.standalone.yml deleted file mode 100644 index a2835c55..00000000 --- a/docker-compose.standalone.yml +++ /dev/null @@ -1,70 +0,0 @@ -version: '2' - -x-logging: &logging - logging: - driver: json-file - options: - max-size: 100m - -x-db: &db - POSTGRES_HOST: db - POSTGRES_PORT: 5432 - POSTGRES_DB: judge0 - POSTGRES_USER: judge0 - POSTGRES_PASSWORD: YourPasswordHere1234 - -x-redis: &redis - REDIS_HOST: redis - REDIS_PORT: 6379 - REDIS_PASSWORD: YourPasswordHere1234 - -x-config: &config - JUDGE0_CONFIGURATION_OPTIONS_HELP: https://github.com/judge0/judge0/blob/master/judge0.conf - -services: - server: - image: judge0/judge0:latest - environment: - <<: *config - <<: *db - <<: *redis - ports: - - "2358:2358" - privileged: true - <<: *logging - restart: always - - workers: - image: judge0/judge0:latest - command: ["./scripts/workers"] - environment: - <<: *config - <<: *db - <<: *redis - privileged: true - <<: *logging - restart: always - - db: - image: postgres:13.0 - environment: *db - volumes: - - postgres-data:/var/lib/postgresql/data/ - <<: *logging - restart: always - - redis: - image: redis:6.0 - command: [ - "bash", "-c", - 'docker-entrypoint.sh --appendonly yes --requirepass "$$REDIS_PASSWORD"' - ] - environment: *redis - volumes: - - redis-data:/data - <<: *logging - restart: always - -volumes: - postgres-data: - redis-data: \ No newline at end of file diff --git a/docker-compose.workers.yml b/docker-compose.workers.yml deleted file mode 100644 index 63b62abb..00000000 --- a/docker-compose.workers.yml +++ /dev/null @@ -1,18 +0,0 @@ -version: '2' - -x-logging: - &default-logging - logging: - driver: json-file - options: - max-size: 100m - -services: - workers: - image: judge0/judge0:latest - command: ["./scripts/workers"] - volumes: - - ./judge0.conf:/judge0.conf:ro - privileged: true - <<: *default-logging - restart: always diff --git a/docker-compose.yml b/docker-compose.yml index 56e4d02d..596a9c5f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,15 +1,13 @@ -version: '2' - x-logging: &default-logging logging: driver: json-file options: - max-size: 100m + max-size: 100M services: server: - image: judge0/judge0:latest + image: judge0/judge0:latest-extra volumes: - ./judge0.conf:/judge0.conf:ro ports: @@ -19,7 +17,7 @@ services: restart: always workers: - image: judge0/judge0:latest + image: judge0/judge0:latest-extra command: ["./scripts/workers"] volumes: - ./judge0.conf:/judge0.conf:ro @@ -28,25 +26,22 @@ services: restart: always db: - image: postgres:13.0 + image: postgres:16.2 env_file: judge0.conf volumes: - - postgres-data:/var/lib/postgresql/data/ + - data:/var/lib/postgresql/data/ <<: *default-logging restart: always redis: - image: redis:6.0 + image: redis:7.2.4 command: [ "bash", "-c", - 'docker-entrypoint.sh --appendonly yes --requirepass "$$REDIS_PASSWORD"' + 'docker-entrypoint.sh --appendonly no --requirepass "$$REDIS_PASSWORD"' ] env_file: judge0.conf - volumes: - - redis-data:/data <<: *default-logging restart: always volumes: - postgres-data: - redis-data: \ No newline at end of file + data: diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 5bd80749..0f4e9911 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -1,3 +1,3 @@ #!/bin/bash -cron -exec "$@" \ No newline at end of file +sudo cron +exec "$@" diff --git a/docs/api/docs.md b/docs/api/docs.md index 1ecabf04..da4ae903 100644 --- a/docs/api/docs.md +++ b/docs/api/docs.md @@ -1,19 +1,17 @@ FORMAT: 1A -HOST: https://ce.judge0.com +HOST: https://extra-ce.judge0.com -# Judge0 CE - API Docs +# Judge0 Extra CE - API Docs ## About -[Judge0](https://ce.judge0.com) is a robust, scalable, and [open-source](https://github.com/judge0/judge0) **online code execution system**. You can use it to build a wide range of applications that need online code execution features. Some examples include competitive programming platforms, e-learning platforms, candidate assessment and recruitment platforms, online code editors, online IDEs, and many more. +[Judge0](https://extra-ce.judge0.com) is a robust, scalable, and [open-source](https://github.com/judge0/judge0) **online code execution system**. You can use it to build a wide range of applications that need online code execution features. Some examples include competitive programming platforms, e-learning platforms, candidate assessment and recruitment platforms, online code editors, online IDEs, and many more. In our research paper [Robust and Scalable Online Code Execution System](https://paper.judge0.com), we present Judge0's modern modular architecture that can be easily deployed and scaled. We study its design, comment on the various challenges in building such systems, and compare it with other available online code execution systems and online judge systems. To see Judge0 in action, try [Judge0 IDE](https://ide.judge0.com) - our free and open-source online code editor. You can also try using a [dummy client](/dummy-client.html) that can help you explore and test most of the features of Judge0. -Easily integrate online code editor with code execution (a.k.a. online compiler) to your website with our [**embeddable web widgets**](https://judge0.com/#judge0-widgets). - ## Features
  • Quick and easy installation
  • @@ -29,7 +27,7 @@ Easily integrate online code editor with code execution (a.k.a. online compiler)
## Get Started -Feel free to start with the [**FREE Basic Plan**](https://judge0.com/ce) on RapidAPI or [host it yourself](https://github.com/judge0/judge0/blob/master/CHANGELOG.md#deployment-procedure). +Feel free to start with the [**FREE Basic Plan**](https://judge0.com/extra-ce) on RapidAPI or [host it yourself](https://github.com/judge0/judge0/blob/master/CHANGELOG.md#deployment-procedure). You can find our detailed plans and pricing [here](https://judge0.com/#pricing). @@ -49,7 +47,7 @@ You can find the source code for Judge0 CE on the [`master`](https://github.com/ Judge0 Extra CE is also available on [RapidAPI](https://judge0.com/extra-ce). ## Version -This document describes Judge0 CE [v1.13.0](https://github.com/judge0/judge0/tree/v1.13.0). +This document describes Judge0 CE [v1.13.1-extra](https://github.com/judge0/judge0/tree/v1.13.1-extra). ## Date and time formats [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) standard is used. @@ -59,9 +57,6 @@ Example: `2016-09-11T10:19:35Z` ## License Judge0 is licensed under the [GNU General Public License v3.0](https://github.com/judge0/judge0/blob/master/LICENSE). -## Donate -Your are more than welcome to support Judge0 development on [Patreon](https://www.patreon.com/hermanzdosilovic), via [PayPal](https://paypal.me/hermanzdosilovic) or [Revolut](https://pay.revolut.com/profile/hermancy5). Thank you. -
diff --git a/docs/api/hostname.html b/docs/api/hostname.html index 2148a9bb..1141d82c 100644 --- a/docs/api/hostname.html +++ b/docs/api/hostname.html @@ -1,21 +1,2 @@ - - diff --git a/docs/api/submissions/submissions.md b/docs/api/submissions/submissions.md index 341f4fae..997943ef 100644 --- a/docs/api/submissions/submissions.md +++ b/docs/api/submissions/submissions.md @@ -63,7 +63,7 @@ To use multi-file program feature you need to choose a language called *Multi-fi As mentioned in the table above, `additional_files` attribute should be a content of a Base64 encoded `.zip` archive. This archive will be extracted in the sandbox before compilation and execution. -For the Judge0 to know how to compile and execute your multi-file program you need to provide two special files that should be available in the root of the `.zip` archive that you are sending with `additional_files` attribute. These files should be named `compile` and `run`, and are expected to be Bash scripts that know how to compile and execute your multi-file program. If your multi-file program does not need compilation step, then you don't need to provide `compile` script. Take a look at [this example](https://github.com/judge0/examples/tree/master/cpp-project-01) to learn how to use this feature to compile and run multi-file C++ project that uses CMake. +For the Judge0 to know how to compile and execute your multi-file program you need to provide two special files that should be available in the root of the `.zip` archive that you are sending with `additional_files` attribute. These files should be named `compile` and `run`, and are expected to be Bash scripts that know how to compile and execute your multi-file program. If your multi-file program does not need compilation step, then you don't need to provide `compile` script. Take a look at [this example](https://github.com/judge0/examples/tree/master/cpp-and-cmake-01) to learn how to use this feature to compile and run multi-file C++ project that uses CMake. @@ -73,4 +73,4 @@ For the Judge0 to know how to compile and execute your multi-file program you ne ## Submission Batch [/submissions/batch{?tokens,base64_encoded,fields}] - \ No newline at end of file + diff --git a/docs/maintainers/RELEASE_NOTES_TEMPLATE.md b/docs/maintainers/RELEASE_NOTES_TEMPLATE.md index dc82e3a1..add8b388 100644 --- a/docs/maintainers/RELEASE_NOTES_TEMPLATE.md +++ b/docs/maintainers/RELEASE_NOTES_TEMPLATE.md @@ -1,4 +1,4 @@ -# vX.Y.Z (YYYY-MM-DD) +# vX.Y.Z-extra (YYYY-MM-DD) ## API Changes ## New Features @@ -14,7 +14,7 @@ ## Other Changes ## Deployment Procedure -Judge0 is collecting telemetry data to help understand how to improve the product and to better understand how Judge0 is used in various production environments. Read more about telemetry [here](https://github.com/judge0/judge0/blob/vX.Y.Z/TELEMETRY.md). +Judge0 is collecting telemetry data to help understand how to improve the product and to better understand how Judge0 is used in various production environments. Read more about telemetry [here](https://github.com/judge0/judge0/blob/vX.Y.Z-extra/TELEMETRY.md). Please note that Judge0 has only been tested on **Linux** and **macOS**, and might not work on Windows, thus we do not provide support for it. @@ -22,32 +22,32 @@ Please note that Judge0 has only been tested on **Linux** and **macOS**, and mig 1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/compose). 2. Download and extract the release archive: ``` -wget https://github.com/judge0/judge0/releases/download/vX.Y.Z/judge0-vX.Y.Z.zip -unzip judge0-vX.Y.Z.zip +wget https://github.com/judge0/judge0/releases/download/vX.Y.Z-extra/judge0-vX.Y.Z-extra.zip +unzip judge0-vX.Y.Z-extra.zip ``` 3. Run all services and wait a few seconds until everything is initialized: ``` -cd judge0-vX.Y.Z +cd judge0-vX.Y.Z-extra docker-compose up -d db redis sleep 10s docker-compose up -d sleep 5s ``` -4. Your instance of Judge0 vX.Y.Z is now available at `http://:2358`. +4. Your instance of Judge0 Extra CE vX.Y.Z is now available at `http://`. ### With HTTPS (SSL/TLS) 1. Install [Docker](https://docs.docker.com) and [Docker Compose](https://docs.docker.com/compose). 2. Download and extract the release archive: ``` -wget https://github.com/judge0/judge0/releases/download/vX.Y.Z/judge0-vX.Y.Z-https.zip -unzip judge0-vX.Y.Z-https.zip +wget https://github.com/judge0/judge0/releases/download/vX.Y.Z-extra/judge0-vX.Y.Z-extra-https.zip +unzip judge0-vX.Y.Z-extra-https.zip ``` -3. Change directory to `judge0-vX.Y.Z-https`: +3. Change directory to `judge0-vX.Y.Z-extra-https`: ``` -cd judge0-vX.Y.Z-https +cd judge0-vX.Y.Z-extra-https ``` 4. Edit `docker-compose.yml` and change variables `VIRTUAL_HOST`, `LETSENCRYPT_HOST` and `LETSENCRYPT_EMAIL`. 5. Run all services and wait a few seconds until everything is initialized: @@ -58,4 +58,4 @@ docker-compose up -d sleep 5s ``` -6. Your instance of Judge0 vX.Y.Z is now available at `https://`. +6. Your instance of Judge0 Extra CE vX.Y.Z is now available at `https://`. diff --git a/judge0.conf b/judge0.conf index ca54eef7..ef510584 100644 --- a/judge0.conf +++ b/judge0.conf @@ -196,7 +196,7 @@ REDIS_PORT= # Specify Redis password. Cannot be blank. # Default: NO DEFAULT! MUST BE SET! -REDIS_PASSWORD=YourPasswordHere1234 +REDIS_PASSWORD= ################################################################################ @@ -220,7 +220,7 @@ POSTGRES_USER=judge0 # Password of the user. Cannot be blank. Used only in production. # Default: NO DEFAULT, YOU MUST SET YOUR PASSWORD -POSTGRES_PASSWORD=YourPasswordHere1234 +POSTGRES_PASSWORD= ################################################################################ @@ -234,11 +234,11 @@ POSTGRES_PASSWORD=YourPasswordHere1234 # Default runtime limit for every program (in seconds). Decimal numbers are allowed. # Time in which the OS assigns the processor to different tasks is not counted. -# Default: 5 +# Default: 15 CPU_TIME_LIMIT= # Maximum custom CPU_TIME_LIMIT. -# Default: 15 +# Default: 20 MAX_CPU_TIME_LIMIT= # When a time limit is exceeded, wait for extra time (in seconds), before @@ -257,11 +257,11 @@ MAX_CPU_EXTRA_TIME= # for an external event. We recommend to use CPU_TIME_LIMIT as the main limit, # but set WALL_TIME_LIMIT to a much higher value as a precaution against # sleeping programs. -# Default: 10 +# Default: 20 WALL_TIME_LIMIT= # Maximum custom WALL_TIME_LIMIT. -# Default: 20 +# Default: 25 MAX_WALL_TIME_LIMIT= # Limit address space of the program in kilobytes. @@ -281,7 +281,7 @@ STACK_LIMIT= MAX_STACK_LIMIT= # Maximum number of processes and/or threads program can create. -# Default: 60 +# Default: 100 MAX_PROCESSES_AND_OR_THREADS= # Maximum custom MAX_PROCESSES_AND_OR_THREADS. @@ -305,11 +305,11 @@ ENABLE_PER_PROCESS_AND_THREAD_MEMORY_LIMIT= ALLOW_ENABLE_PER_PROCESS_AND_THREAD_MEMORY_LIMIT= # Limit size of files created (or modified) by the program in kilobytes. -# Default: 1024 +# Default: 5120 MAX_FILE_SIZE= # Maximum custom MAX_FILE_SIZE. -# Default: 4096 +# Default: 20480 MAX_MAX_FILE_SIZE= # Run each program this many times and take average of time and memory. @@ -333,7 +333,7 @@ MAX_EXTRACT_SIZE= ALLOW_ENABLE_NETWORK= # If true submission will by default be able to do network calls. -# Default: false, i.e. programs cannot do network calls. +# Default: true, i.e. programs can do network calls. ENABLE_NETWORK= diff --git a/public/docs.html b/public/docs.html index 5e756d9c..e5222c37 100644 --- a/public/docs.html +++ b/public/docs.html @@ -1,23 +1,4 @@ -Judge0 CE - API Docs Back to top

Judge0 CE - API Docs

- - @@ -44,10 +25,9 @@ title.style.color = "white";

About

-

Judge0 is a robust, scalable, and open-source online code execution system. You can use it to build a wide range of applications that need online code execution features. Some examples include competitive programming platforms, e-learning platforms, candidate assessment and recruitment platforms, online code editors, online IDEs, and many more.

+

Judge0 is a robust, scalable, and open-source online code execution system. You can use it to build a wide range of applications that need online code execution features. Some examples include competitive programming platforms, e-learning platforms, candidate assessment and recruitment platforms, online code editors, online IDEs, and many more.

In our research paper Robust and Scalable Online Code Execution System, we present Judge0’s modern modular architecture that can be easily deployed and scaled. We study its design, comment on the various challenges in building such systems, and compare it with other available online code execution systems and online judge systems.

To see Judge0 in action, try Judge0 IDE - our free and open-source online code editor. You can also try using a dummy client that can help you explore and test most of the features of Judge0.

-

Easily integrate online code editor with code execution (a.k.a. online compiler) to your website with our embeddable web widgets.

Features

-

Feel free to start with the FREE Basic Plan on RapidAPI or host it yourself.

+

Feel free to start with the FREE Basic Plan on RapidAPI or host it yourself.

You can find our detailed plans and pricing here.

Why should you use Judge0 on RapidAPI?

Our infrastructure allows you to focus on building your product and forget about the know-how of maintaining and scaling Judge0.

@@ -73,14 +53,12 @@

Flavors master branch, while you can find the source code for Judge0 Extra CE on the extra branch.

Judge0 Extra CE is also available on RapidAPI.

Version

-

This document describes Judge0 CE v1.13.0.

+

This document describes Judge0 CE v1.13.1-extra.

Date and time formats

ISO 8601 standard is used.

Example: 2016-09-11T10:19:35Z

License

Judge0 is licensed under the GNU General Public License v3.0.

-

Donate

-

Your are more than welcome to support Judge0 development on Patreon, via PayPal or Revolut. Thank you.


Authentication

Administrators of Judge0 can configure Judge0 to require you to have an authentication token (a.k.a. API key). If that is the case with the instance of Judge0 you are using, then you should provide X-Auth-Token header field in every API request.

@@ -103,7 +81,7 @@

Donate

To issue some API calls you need to be authorized. For example, you need to be authorized to @@ -128,7 +106,7 @@

Example URI

POSTAlthough you can send authorization token as URI parameter, always send authorization token through headers.
-

Example URI

POST https://ce.judge0.com/authorize
Request
HideShow
Headers
X-Auth-User: a1133bc6-a0f6-46bf-a2d8-6157418c6fe2
Response  200
HideShow

If your authorization token is valid.

+

Example URI

POST https://extra-ce.judge0.com/authorize
Request
HideShow
Headers
X-Auth-User: a1133bc6-a0f6-46bf-a2d8-6157418c6fe2
Response  200
HideShow

If your authorization token is valid.

Response  401
HideShow

Authentication failed. Please read about authentication process.

Response  403
HideShow

Authorization failed because your authorization token is invalid.

Submissions

Submission

Submission is used for running arbitrary source code in one of @@ -426,7 +404,7 @@

Multi-file programs v1.10.0 and they allow you specify your own compilation and execution scripts that Judge0 will use.

To use multi-file program feature you need to choose a language called Multi-file program whoose ID is 89. Moreover, you need to send all program files with additional_files attribute. With multi-file programs attribute source_code cannot be used, i.e. all files should be sent with additional_files attribute.

As mentioned in the table above, additional_files attribute should be a content of a Base64 encoded .zip archive. This archive will be extracted in the sandbox before compilation and execution.

-

For the Judge0 to know how to compile and execute your multi-file program you need to provide two special files that should be available in the root of the .zip archive that you are sending with additional_files attribute. These files should be named compile and run, and are expected to be Bash scripts that know how to compile and execute your multi-file program. If your multi-file program does not need compilation step, then you don’t need to provide compile script. Take a look at this example to learn how to use this feature to compile and run multi-file C++ project that uses CMake.

+

For the Judge0 to know how to compile and execute your multi-file program you need to provide two special files that should be available in the root of the .zip archive that you are sending with additional_files attribute. These files should be named compile and run, and are expected to be Bash scripts that know how to compile and execute your multi-file program. If your multi-file program does not need compilation step, then you don’t need to provide compile script. Take a look at this example to learn how to use this feature to compile and run multi-file C++ project that uses CMake.

Create a Submission
POST/submissions/{?base64_encoded,wait}

Creates new submission. Created submission waits in queue to be processed. On successful creation, you are returned submission token which can be used to check submission status.

If submission’s source_code, stdin or expected_output contains non printable characters, or @@ -443,7 +421,7 @@

Multi-file programs

GET/submissions/{token}{?base64_encoded,fields}

Returns details about submission.

Just like in create submission you can receive Base64 encoded data for every text type attribute (check the table to see which attributes are text type). By default, this parameter is set to false and Judge0 will send you raw data.

By default Judge0 is sending 8 attributes for submission. By sending fields query parameter you can specify exactly which attributes you want from Judge0. Special value * will return all available attributes.

-

Example URI

GET https://ce.judge0.com/submissions/d85cd024-1548-4165-96c7-7bc88673f194?base64_encoded=false&fields=stdout,stderr,status_id,language_id
URI Parameters
HideShow
token
string (required) Example: d85cd024-1548-4165-96c7-7bc88673f194

Token of submission. You got this token when you created submission.

+

Example URI

GET https://extra-ce.judge0.com/submissions/d85cd024-1548-4165-96c7-7bc88673f194?base64_encoded=false&fields=stdout,stderr,status_id,language_id
URI Parameters
HideShow
token
string (required) Example: d85cd024-1548-4165-96c7-7bc88673f194

Token of submission. You got this token when you created submission.

base64_encoded
boolean (optional) Example: false

Set to true if you want to receive Base64 encoded data from Judge0. You should set this to true if you expect the program’s stdout to contain non-printable characters or if you expect the compiler to output non-printable characters during a compile error (GCC does this, for instance).

fields
string (optional) Default: stdout,time,memory,stderr,token,compile_output,message,status Example: stdout,stderr,status_id,language_id

Return only the desired attributes.

Response  200
HideShow
Headers
Content-Type: applicatiion/json
Body
{
@@ -564,7 +542,7 @@ 

Example URI

GET& }
Response  400
HideShow
Headers
Content-Type: application/json
Body
{
   "error": "some attributes for this submission cannot be converted to UTF-8, use base64_encoded=true query parameter"
 }
Response  401
HideShow

Authentication failed. Please read about authentication process.

-

Get Submissions
GET/submissions/{?base64_encoded,fields,page,per_page}

Example URI

GET https://ce.judge0.com/submissions/?base64_encoded=false&fields=status,language,time&page=4&per_page=2
URI Parameters
HideShow
base64_encoded
boolean (optional) Default: false Example: false

Set to true if you want to receive Base64 encoded data from Judge0.

+

Get Submissions
GET/submissions/{?base64_encoded,fields,page,per_page}

Example URI

GET https://extra-ce.judge0.com/submissions/?base64_encoded=false&fields=status,language,time&page=4&per_page=2
URI Parameters
HideShow
base64_encoded
boolean (optional) Default: false Example: false

Set to true if you want to receive Base64 encoded data from Judge0.

page
integer (optional) Default: 1 Example: 4

Pagination page number.

per_page
integer (optional) Default: 20 Example: 2

Number of submissions to return per page.

fields
string (optional) Default: stdout,time,memory,stderr,token,compile_output,message,status Example: status,language,time

Return only the desired attributes.

@@ -653,7 +631,7 @@

Example URI

GET& you are using disallowed submission deletion. So before using this feature please check configuration of Judge0 you are using.

For this request query parameter base64_encoded is implicitly set to true and cannot be changed. This guarantees you will successfully get requested submission attributes after deletion.

-

Example URI

DELETE https://ce.judge0.com/submissions/d85cd024-1548-4165-96c7-7bc88673f194?fields=stdout,stderr,status_id,language_id
URI Parameters
HideShow
token
string (required) Example: d85cd024-1548-4165-96c7-7bc88673f194

Token of submission. You got this token when you created submission.

+

Example URI

DELETE https://extra-ce.judge0.com/submissions/d85cd024-1548-4165-96c7-7bc88673f194?fields=stdout,stderr,status_id,language_id
URI Parameters
HideShow
token
string (required) Example: d85cd024-1548-4165-96c7-7bc88673f194

Token of submission. You got this token when you created submission.

fields
string (optional) Default: stdout,time,memory,stderr,token,compile_output,message,status Example: stdout,stderr,status_id,language_id

Return only the desired attributes.

Response  200
HideShow
Headers
Content-Type: applcation/json
Body
{
   "stdout": "aGVsbG8sIHdvcmxkCg==\n",
@@ -673,7 +651,7 @@ 

Example URI

DELETE}
Response  401
HideShow

Authentication failed. Please read about authentication process.

Response  403
HideShow

Authorization failed. Please read about authorization process.

Submission Batch

Create a Submission Batch
POST/submissions/batch{?base64_encoded}

Create multiple submissions at once.

-

Example URI

POST https://ce.judge0.com/submissions/batch?base64_encoded=false
URI Parameters
HideShow
base64_encoded
boolean (optional) Default: false Example: false

Set to true if you are sending Base64 encoded data.

+

Example URI

POST https://extra-ce.judge0.com/submissions/batch?base64_encoded=false
URI Parameters
HideShow
base64_encoded
boolean (optional) Default: false Example: false

Set to true if you are sending Base64 encoded data.

Request
HideShow
Headers
Content-Type: application/json
Body
{
   "submissions": [
     {
@@ -729,7 +707,7 @@ 

Example URI

POST} ]

Get a Submission Batch
GET/submissions/batch{?tokens,base64_encoded,fields}

Get multiple submissions at once.

-

Example URI

GET https://ce.judge0.com/submissions/batch?tokens=db54881d-bcf5-4c7b-a2e3-d33fe7e25de7,ecc52a9b-ea80-4a00-ad50-4ab6cc3bb2a1,1b35ec3b-5776-48ef-b646-d5522bdeb2cc&base64_encoded=false&fields=token,stdout,stderr,status_id,language_id
URI Parameters
HideShow
tokens
string (required) Example: db54881d-bcf5-4c7b-a2e3-d33fe7e25de7,ecc52a9b-ea80-4a00-ad50-4ab6cc3bb2a1,1b35ec3b-5776-48ef-b646-d5522bdeb2cc

Submission tokens separeted with ,.

+

Example URI

GET https://extra-ce.judge0.com/submissions/batch?tokens=db54881d-bcf5-4c7b-a2e3-d33fe7e25de7,ecc52a9b-ea80-4a00-ad50-4ab6cc3bb2a1,1b35ec3b-5776-48ef-b646-d5522bdeb2cc&base64_encoded=false&fields=token,stdout,stderr,status_id,language_id
URI Parameters
HideShow
tokens
string (required) Example: db54881d-bcf5-4c7b-a2e3-d33fe7e25de7,ecc52a9b-ea80-4a00-ad50-4ab6cc3bb2a1,1b35ec3b-5776-48ef-b646-d5522bdeb2cc

Submission tokens separeted with ,.

base64_encoded
boolean (optional) Default: false Example: false

Set to true if you want to receive Base64 encoded data.

fields
string (optional) Default: stdout,time,memory,stderr,token,compile_output,message,status Example: token,stdout,stderr,status_id,language_id

Return only the desired attributes.

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
@@ -757,7 +735,7 @@ 

Example URI

GET& } ] }

Statuses and Languages

Language

Get Languages
GET/languages/

Get active languages.

-

Example URI

GET https://ce.judge0.com/languages/
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
+

Example URI

GET https://extra-ce.judge0.com/languages/
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
   {
     "id": 45,
     "name": "Assembly (NASM 2.14.02)"
@@ -886,7 +864,7 @@ 

Example URI

GET& "id": 74, "name": "TypeScript (3.7.4)" } -]

Get a Language
GET/languages/{id}

Example URI

GET https://ce.judge0.com/languages/1
URI Parameters
HideShow
id
integer (required) Example: 1

Language ID.

+]

Get a Language
GET/languages/{id}

Example URI

GET https://extra-ce.judge0.com/languages/1
URI Parameters
HideShow
id
integer (required) Example: 1

Language ID.

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
   "id": 1,
   "name": "Bash (4.4)",
@@ -895,7 +873,7 @@ 

Example URI

GET& "compile_cmd": null, "run_cmd": "/usr/local/bash-4.4/bin/bash script.sh" }

Active and Archived Languages

Get Active and Archived Languages
GET/languages/all

Get active and archived languages.

-

Example URI

GET https://ce.judge0.com/languages/all
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
+

Example URI

GET https://extra-ce.judge0.com/languages/all
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
   {
     "id": 45,
     "name": "Assembly (NASM 2.14.02)",
@@ -1266,7 +1244,7 @@ 

Example URI

GET& "name": "TypeScript (3.7.4)", "is_archived": false } -]

Status

Get Statuses
GET/statuses

Example URI

GET https://ce.judge0.com/statuses
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
+]

Status

Get Statuses
GET/statuses

Example URI

GET https://extra-ce.judge0.com/statuses
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
   {
     "id": 1,
     "description": "In Queue"
@@ -1338,7 +1316,7 @@ 

Example URI

GET& different hosts with different system configurations. Result of this API request is always from web system. This means that this request might be irrelevant to you if you as user don’t know if web and worker are hosted on the same machine. To find that out, please contact admins who host Judge0 you are using.

-

Example URI

GET https://ce.judge0.com/system_info
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
+

Example URI

GET https://extra-ce.judge0.com/system_info
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
   "Architecture": "x86_64",
   "CPU op-mode(s)": "32-bit, 64-bit",
   "Byte Order": "Little Endian",
@@ -1634,7 +1612,7 @@ 

Example URI

GET&

For example, max_cpu_time_limit with value 20 means that user cannot create new submission which has cpu_time_limit greater than 20.

-

Example URI

GET https://ce.judge0.com/config_info
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
+

Example URI

GET https://extra-ce.judge0.com/config_info
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
   "enable_wait_result": true,
   "enable_compiler_options": true,
   "allowed_languages_for_compile_options": [],
@@ -1662,7 +1640,7 @@ 

Example URI

GET& "number_of_runs": 1, "max_number_of_runs": 20 }

Statistics

Statistics

Statistics
GET/statistics

Get some statistics from current instance. Result is cached for 10 minutes.

-

Example URI

GET https://ce.judge0.com/statistics
URI Parameters
HideShow
invalidate_cache
boolean (optional) Example: false

Set to true if you want to invalidate current cache and fetch new statistics.

+

Example URI

GET https://extra-ce.judge0.com/statistics
URI Parameters
HideShow
invalidate_cache
boolean (optional) Example: false

Set to true if you want to invalidate current cache and fetch new statistics.

Health Check

Workers

Workers
GET/workers

For each queue you will get:

  • @@ -1687,7 +1665,7 @@

    Example URI

    GET&

    how many jobs failed

-

Example URI

GET https://ce.judge0.com/workers
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
+

Example URI

GET https://extra-ce.judge0.com/workers
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
   {
     "queue": "default",
     "size": 0,
@@ -1698,15 +1676,15 @@ 

Example URI

GET& "failed": 0 } ]

Information

About

About
GET/about

Returns general information.

-

Example URI

GET https://ce.judge0.com/about
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
+

Example URI

GET https://extra-ce.judge0.com/about
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
   "version": "1.5.0",
   "homepage": "https://judge0.com",
   "source_code": "https://github.com/judge0/judge0",
   "maintainer": "Herman Zvonimir Došilović <hermanz.dosilovic@gmail.com>"
 }

Version

Version
GET/version

Returns current version.

-

Example URI

GET https://ce.judge0.com/version

Isolate

Isolate
GET/isolate

Returns result of isolate --version.

-

Example URI

GET https://ce.judge0.com/isolate

License

License
GET/license

Returns a license.

-

Example URI

GET https://ce.judge0.com/license

Generated by aglio on 09 Mar 2021