Releases: cms-dev/cms
v1.5.0
Given the long pause before this release, it's hard to summarize what changed. Here's Github's automatically-generated release notes, including all merged PRs:
What's Changed
- Make RWS' main page / instead of /Ranking.html by @stefano-maggiolo in #1035
- Allow deeplinking of users in RWS by @stefano-maggiolo in #1037
- Fix extraction of translation messages by Babel by @lw in #1047
- Remove excessive whitespace in CWS license notice by @andreyv in #1049
- Fix notifications in CWS being translated after being formatted by @lw in #1046
- Updated Spanish translations. by @elsantodel90 in #1050
- Update Latvian translation by @andreyv in #1051
- Update Vietnamese translations by @kuroni in #1052
- RWS: add -y switch to allow unattended data drop by @tuankiet65 in #1057
- Update Vietnamese translations by @kuroni in #1053
- Ensure compiled translation .mo files are picked up during build phase by @lw in #1059
- Updated Lithuanian translation. by @vytisb in #1058
- Fix whitespace in consecutive {% trans %} blocks by @andreyv in #1063
- HTML fixes by @andreyv in #1064
- Translate Yes/No messages in the Official column of the submissions row by @andreyv in #1080
- Fix custom PostgreSQL domains not being used in table definitions by @lw in #1073
- Fix grammar in delete_sandbox() warning by @andreyv in #1092
- Clearer unofficial submissions in CWS by @stefano-maggiolo in #1091
- Add timezone field in italy_yaml format by @lucach in #1098
- Pagination and more macros by @stefano-maggiolo in #1101
- Fix RWS with score mode MAX_SUBTASK by @lucach in #1111
- Regenerate cms.pot file by @lw in #1114
- Follow up to the fix to #1107 by @stefano-maggiolo in #1115
- Fix updaters 26 and 36 leaving dump inconsistent by @lw in #1118
- Update Travis environment to Ubuntu 18.04 by @andreyv in #1161
- Add C++14 programming language by @andreyv in #1132
- Bump version of gevent, this is needed for Python 3.7 by @wil93 in #1143
- Don't open title page input file in binary mode in PrintingService by @magula in #1150
- Make PrintingService translatable by @magula in #1152
- korean translation update by @melongist-zz in #1169
- Let PdfFileMerger open the files to be merged itself by @magula in #1151
- Korean translation update by @junukwon7 in #1171
- Fix cmsImportContest when multiple IPs are provided by @wil93 in #1147
- Add feedback_level to italy_yaml loader by @lucach in #1144
- Make clients revalidate files by @magula in #1149
- Set up Jinja whitespace control in Babel mapping by @andreyv in #1130
- testlib: backport fix for #1056 by @andreyv in #1127
- Replace most subprocess.call() invocations with check_call() by @andreyv in #1128
- Do not show ranking credentials in ProxyService logs by @andreyv in #1129
- Fix +4 phase computation and add more phase tests by @andreyv in #1133
- Update Latvian translation by @andreyv in #1140
- Show original IP address of requests in AWS logs by @andreyv in #1131
- Fix issue #1159 by @ranaldmiao in #1164
- Fix misc issues regarding user tests with graders by @ranaldmiao in #1172
- While starting to look at typing, I found some code we took from CPython 2.7 and was not updated. Briefly tested manually, it looks like it's working (but please check, this is my first time touching CMS in quite some time). by @stefano-maggiolo in #1174
- Migrate CI to GitHub Actions by @fushar in #1176
- Fix typo in the AddSubmission script by @MaGaroo in #1178
- fix #1179 by @ranaldmiao in #1180
- Fix DumpExporter if a user test didn't compile by @fagu in #1184
- Let all services share the file cache directory by @fagu in #1183
- Enable automatic precaching by @fagu in #1185
- Add Language.executable_extension property by @andreyv in #1139
- Update to jQuery 3.6.0 by @andreyv in #1188
- Better default Nginx configuration by @wil93 in #1126
- Added German translation by @LennartF22 in #1121
- Update Czech translation by @SvizelPritula in #1190
- Italian contest loader is able to load contests with no participants by @MarcoUCM in #1193
- BugFix: Italian contest exporter and communication tasks by @MarcoUCM in #1196
- Fix ProxyService team.code encoding for user by @PPakalns in #1117
- Add no-users option to DumpImporter and DumpExporter by @ranaldmiao in #1165
- Fix CI by @edomora97 in #1199
- Fix support for services connected via IPv6 by @edomora97 in #1141
- Ignore wrong contest submissions in ProxyService by @edomora97 in #1142
- Join contest with current account by @MaGaroo in #1191
- Complete polygon loader language list by @MaGaroo in #1197
- fix: pin MarkupSafe to 2.0.1 (#33) by @SvizelPritula in #1211
- Updated Romanian translations by @CodeRadu in #1203
- Use docker-compose to run tests by @wil93 in #1221
- Handle IntegrityError on file commit gracefully by @magula in #1223
- Added Ukrainian translation by @arsijo in #1225
- Add support for importing score_precision in italian_yaml by @edomora97 in #1229
- Update Simplified Chinese translations by @psz2007 in #1231
- Adding C++17 to the default list of allowed programming language by @davinci-tech in #1232
- Simplify testing with pytest by @wil93 in #1233
- Enhance Korean translation a bit. by @leejseo in #1237
- Extend and fix Russian translations by @maleksware in #1241
- Fix sidebar "Testing" link not being active when on testing page by @prandla in #1249
- Install a SIGTERM handler in addition to SIGINT by @prandla in #1246
- Update Estonian translation by @prandla in #1248
- Update instructions on usage of docker compose by @wil93 in #1256
- Upgrade gevent and greenlet by @wil93 in #1255
- Make oom-heap.c test work with newer GCC by @SvizelPritula in #1210
- Upgrade to isolate v2 by @wil93 in #1222
- Make the yaml importer load multiple languages. by @veluca93 in #1253
- Add docker-compose.dev.yml and dev/test scripts by @wil93 in #1262
- fix missing spaces between sentences in task_submissions.html by @prandla in #1250
- Upstream two more improvements to italy_yaml by @veluca93 in #1263
- Fix submissions_status RPC when UNION ALL doesn't keep the order by @edomora97 in #1201
- Fail in RunFunctionalTests if tests throw exceptions. by @veluca93 in #1273
- Fix CI not reporting error when unit tests fail but functional tests pass. by @wil93 in #1274
- Remove python2. by @veluca93 in #1272
- [italy_yaml] Load all contest parameters from contest.yaml by @Virv12 in #1276
- Compatibility with Python 3.12. by @veluca93 in #1271
- Use CODECOV_TOKEN to fix rate limit issue. by @wil93 in #1278
- Support for c++20 by @Virv12 in #1275
- Add missing templates for submission export by @Virv12 in https://gi...
v1.4.rc1: Version 1.4.rc1
This is the second release candidate for version 1.4 of CMS, which improves on the previous one by fixing some bugs and updating some translations. It is considered stable and is recommended over the old 1.3 for anybody new to CMS. If you are currently using CMS 1.3, we will continue backporting security fixes until the 1.4.0 release, but you should start thinking now about migrating.
With this second RC we are further approaching the release of version 1.4.0. This will happen when, after greater adoption, we will become confident that the release will work smoothly for everyone. In the meantime we will continue to iron out any bug that gets reported and we encourage the community to submit updated translations of the contest interface; see https://cms.readthedocs.io/en/v1.4/Localization.html#for-translators for instructions.
What's new
- Updated Spanish, Latvian, Vietnamese and Lithuanian translations.
- Fixed the AWS web client being unable to issue RPCs (this affected the overview and resources pages, and the recompilation/evaluation/scoring buttons).
- Fixed the output of testcases not being included in contest dumps.
- Fixed RWS miscalculating the score when using the new score mode.
- Fixed the memory measurements not being displayed when they were between 1000 and 1023 KiB, MiB, ...
- Fixed the translations not being correctly installed on the first try.
- Fixed some evaluation details remaining hidden during the analysis phase.
- Fixed a malformed query in the user details page in AWS.
v1.4.rc0
Continuing with the process started in the 1.3 branch, we release today a candidate for CMS version 1.4. CMS 1.4.rc0 is a stable version, so we recommended it over the old 1.3 for anybody new to CMS. If you are currently using CMS 1.3, we will continue backporting security fixes until the 1.4.0 release, but you should start thinking now about migrating.
Having a release candidate allows us to include in 1.4.0 not only bugfixes but also contained improvements; in particular, we encourage updating the translations of the contest interface and sending them to us; see https://cms.readthedocs.io/en/v1.4/Localization.html#for-translators for instructions.
Finally, before the changelog, a thank you to all the people that helped shape CMS 1.4, with code contributions but also with bug reports, testing, discussions, ... If you want to participate, join the gitter chat at https://gitter.im/cms-dev/cms.
What's new
-
Web Servers
- Added analysis phase (contestants can see the full feedback and send "unofficial" submissions with no limits and no effect on scores).
- Admins can limit the feedback given to contestants to prevent reverse engineering; limited feedback is the default for new contests.
- Single instances of ContestWebServer and ResourceService can handle multiple contests.
- The ranking in AdminWebServer is now sortable.
- AdminWebServer shows the name of the admin that answered a question or sent an announcement/message.
- Contestants can see the task score in the task submission page.
- Contestants' passwords can be stored hashed (with bcrypt).
- Changed the STL documentation from SGI to cppreference.com.
- Files are not fully loaded in memory while being downloaded.
-
Grading
- Improved safety of task types:
- All operations have a timeout, even those supposedly safe (and compilation limits are tweakable via hidden configurations).
- Sandboxes are not recycled between evaluation and checking.
- Deprecated TwoSteps as Communication is a safer replacement.
- Allowed stub-less compilation and standard I/O in Communication tasks.
- Improved the validation of the task configurations, and error reporting.
- Allowed memory limits higher than 2GB.
- Fixed issues with user tests when using managers.
- Improved safety of task types:
-
Scoring
- Added score mode for the sum over all subtasks of the best score over all submissions (as in IOI 2017-2018).
- Added support for subtask with a maximum score of zero (useful for example for giving contestants testcases to validate their solutions, but not providing any points).
-
Languages
- Added support for Rust, Python 3, and C#.
- Python 2 and 3: added support for graders (for Batch tasks) and stubs (for Communication tasks).
- C/C++: enabled GNU extensions in compilation.
- Pascal: enabled symbol stripping and recommended lighter FPC installation (without optional units).
-
Updates
- CMS now runs under both Python 2 and Python 3.
- Python 2 support will be dropped starting from the next version.
- Updated isolate to v1.6.
- Updated polygon's testlib.h to version 0.9.21.
- Updated database model (among other changes, used better types).
- To update a contest running on a previous version: dump it using the old version, update CMS, drop and re-init the database, reimport the dump.
- Upgraded dependencies' versions to those found in Ubuntu 18.04.
- CMS now runs under both Python 2 and Python 3.
-
Scripts
- Improved ExportSubmission: more task types are supported and more formatting options.
- Added importer for Task Preparation System.
-
Internals
- Vastly increased code coverage for both unit and functional tests.
- Eased plugging-in task types, score types, and languages by using setuptools' entry points.
- Extracted and tested several pieces of business logic in ContestWebServer and in the grading module.
- Switched from Tornado to Jinja2 (for templates) and Babel (for localization).
- Fixed the database schema so that PostgreSQL’s vacuum tool does not think CMS's files are unused and can be removed.
- Printjobs are now exported correctly in the dumps.
v1.3.2: Version 1.3.2
CMS 1.3.2 is a small bugfix release. Due to a security vulnerability in ContestWebServer, we strongly suggest to update from previous versions.
What's new
- Fix a security issue in CWS that could allow remote code execution by an attacker that knows the secret key.
- Don't leak the names of the task in CWS before the start of the contest.
v1.3.1: Version 1.3.1
CMS 1.3.1 is a small bugfix release. Due to a potentially exploitable bug in the isolate configuration, we strongly suggest to update from previous versions.
What's new
- Fix configuration of isolate to correctly account for the time used by all processes, that in certain cases could be wrong (see #913 for more information).
- Fix configuration of isolate to compute correctly memory usage when not using cgroups (by default, CMS uses cgroups).
- Mitigate the effect of an unexpected error when storing a submission result.
v1.3.0: Version 1.3.0
As announced, 1.3.0 is a small release after 1.3.rc0 containing small fixes, but also a few improvements.
What's new
- Updates to Dutch, Lithuanian and Vietnamese translations.
- Fix inability to submit in OutputOnly tasks.
- Don't recreate participations (and thus lose their submissions) when reimporting a contest.
- Remove a few short flags for some risky operations in scripts.
- Includes all the changes from 1.3.rc0: https://github.com/cms-dev/cms/wiki/CMS-1.3.rc0-RELEASE-NOTES
v1.3.rc0: Version 1.3.rc0
With CMS 1.2 we wanted to start a new process with smaller and more frequent releases. Looking at the 2 year gap between 1.2 and 1.3, it is clear that did not happen, but we are glad to be finally back!
Given the long time since 1.2, we decided to do things a bit differently, releasing first a CMS 1.3.rc0, with CMS 1.3.0 to follow up soon. In 1.3.0, we will not only include security bugs (similarly to a X.Y.1 release), but also small bug fixes if necessary.
CMS continues to be used all over the world. Since 1.2, it was used in IOI 2015, and will be used again in IOI 2017. We are also happy to mention that CMS has been used in APIO 2016 and CEOI 2015. As always, please continue to send feedback and testimonials. The full list is at http://cms-dev.github.io/testimonials.html .
We would like to thank the many people that worked on CMS 1.3! Also, we would like to apologize as the developer experience was often not optimal, especially in terms of latency of reviews and inclusion of pull requests.
What's new
A lot! To make things more organized, here are the major changes grouped by topic.
-
Features to ease long running contests and CMS-based training platforms.
- Users (contestants) now exist independently of contests.
- ES is contest agnostic: a single ES manages the submissions of all existing contests.
- Old executables can be removed from the database to save space.
-
Installation and configuration
- CMS works with virtualenv; thus avoiding the usual issues of using an incompatible version of a dependency.
- To ease debugging, sandboxes are not deleted in case of errors, even if
keep_sandboxes
is unset. - Moved some configurations from cms.conf to the contest entity (IP restrictions, whether to allow hidden users, whether to allow questions.
- IP based autologin: admins can decide to log in contestants automatically based on the IP of their machine.
- Per-contest configuration to disable the testing interface.
- Configuration to prevent contestants from downloading their previous submissions.
- Unrestricted users (with no limits on submissions, useful for tests).
-
Tasks types, score types and programming languages
- Some output from managers can be translated.
- Grouped score type allow defining groups using regexps on their names.
- Communication tasks support multiple contestant-led programs.
- Communication tasks work with all programming languages.
- Plugin system for programming languages, allows admin to easily define their own and a contest to have multiple versions of the same language (e.g., for different compilers).
- Java JDK support.
- Haskell support.
-
Performances
- ES distributes jobs in batches whose size depends on the load: small batches under light load to optimize for latency, larger batches under heavy load to optimize for throughput.
- Translated several queries from SQLAlchemy to raw SQL (especially in ES and SS)
- Big speedup in the queries used when showing submissions in CWS.
-
AdminWebServer
- A new page showing all submissions in a contest.
- Implemented real pagination for lists of submissions.
- Desktop notifications for questions.
- Teams and team associations can be edited in AWS.
- Administrative accounts (including accounts with lower permissions).
- Better forms (no duplication of create and edit, inline documentation of options).
- Single action to download all testcases.
- XSRF protection.
- Admins can delete users, tasks, contests from AWS.
- Admins can see user tests and their status.
-
ContestWebServer
- Desktop notifications for announcements and messages.
- Suggest task names as question subjects.
- Only allowed localizations are shown.
-
Command line tools
- Refactoring and improvements of cmsMake.
- Refactoring the scripts to add, remove, import data. Added a lot of new one.
-
Tests
- Tests run much faster thanks to parallel startup and more workers.
- We moved our continuous integration from a self-hosted Jenkins to Travis.
- Added a performance test for ES.
- Functional tests for user tests.
Incompatible updates.
- GroupThreshold does not consider any more the outcome 0.0 as success (too many parts of CMS already interpret 0.0 as failure).
- Both the database schema and the format of the dumps have changed. To update a dump, use
cmscontrib/DumpUpdater.py \<name of dump\>
. - To update the schema, first dump the content with
cmscontrib/DumpExporter.py
, then drop and reinit the database withcmsDropDB
andcmsInitDB
, update the dump as before and import it withcmscontrib/DumpImporter.py
- Alternatively, we support in-place updates with the SQL scripts in
cmscontrib/updaters
, but the process is still manual.
v1.2.0: Version 1.2.0
CMS 1.2 starts a new process of smaller, bi-annual releases that we hope to continue in the future. For news on the project, make sure to follow @contestms at https://twitter.com/contestms.
Since the previous release in July, CMS has been used by the IOI 2014, and confirmed by IOI 2015. We continue to have many users all around the world, and to ask you to send us feedback and testimonials, especially through the online forms at http://cms-dev.github.io/index.html#help-us-help-you .
Even more important, we would love to see more developers interested in improving CMS. There are several starter projects listed at http://cms-dev.github.io/contribute.html for you to get accustomed with the project. Many thanks to the people that already are contributing!
What's new
New features.
- Workers can evaluate testcases for the same submission in parallel: this means that evaluations are much faster if you have many workers.
- Printing service, that allow contestants to print PDF and text files (with quotas) without the need to configure a print server.
- Admins can import task in the Polygon format.
- Admins can attach comments to the contestants' solutions (useful in a training setting).
- The new IOI score modality (full feedback without tokens) is now implemented, and admins can choose between the previous and the current.
- C++11 is used by default.
Behind the scenes.
- Several security bugs around an unsafe use of isolate (our sandbox) were fixed. These won't be backported to 1.1, so make sure you update.
- Isolate lives in a git submodule - make sure you update both CMS and isolate.
- New base library for many of our core services.
Incompatible updates.
- Both the database schema and the format of ContestExporter have changed. To update a dump, use
cmscontrib/DumpUpdater.py \<name of dump\>
. To update the schema, first dump the content withcmscontrib/ContestExporter.py
and then drop and reinit the database withcmsDropDB
andcmsInitDB
.
v1.1.0: Version 1.1.0
CMS 1.1 is the product of 15 months of work, during which CMS ran an International Olympiad, two major regional contests and many other national and local competitions.
In addition to the brief summary below, you can find a more in-depth discussion on the new release in a paper by CMS core developers:
Stefano Maggiolo, Giovanni Mascellani, Luca Wehrstedt. CMS: a Growing Grading System. Olympiad in Informatics, vol. 8 (2014), pp. 123-132 (http://www.mii.lt/olympiads_in_informatics/files/volume8.pdf).
What's new
New features.
- Task versioning: useful for changing wrong task data behind the scenes and easily test it during the contest, minimizing disturbance to the contestants.
- Split the communication of the scoring to RWS from the scoring itself, creating ProxyService to handle the former.
- Notable performance improvements in ScoringService.
- Refactor the importers code to make it easier to write new importer.
- Support for contests in Java (through gcj), Python and PHP.
Behind the scenes.
- New sandbox, isolate, from Bernard Blackham and Martin Mareš.
- New event loop library, based on modern Python technology, and new RPC system based upon that.
- Improve testing and testing infrastructure (http://cms.di.unipi.it/jenkins).
Translations.
- Apart from English, the contestant interface of CMS is available in other 8 languages: Bosnian, Dutch, French, Italian, Japanese,
Lithuanian, Russian and Traditional Chinese.
Incompatible updates.
- Both the database schema and the format of ContestExporter have changed. To update a dump, use cmscontrib/DumpUpdater.py . To update the schema, first dump the content with cmscontrib/ContestExporter.py and then drop and reinit the database with cmsDropDB and cmsInitDB.
v1.0.1
Bug-fix release.
Bug-fix
This CMS release updates the RPC protocol used between CMS services, fixing a bug in message termination that could lead to loosing messages of a specific length. In practice this specific length was greater than any message actually used in CMS, so the bug was never actually observed. Yet, this update eliminates the source of risk.
Moreover, this release also fixes a couple of little bugs in task types OutputOnly and Communication.