JAlgoArena is a programming contest platform. You can use it in SaaS mode (e.g. Heroku) as well as on-premises (self-hosted) mode - which is great alternative to portals like HackerRank and others - when you are limited to only own infrastructure or you just don't want to pay for external service or help in organizing coding contest for your developers.
JAlgoArena itself is implemented as set of microservices, based on Spring Boot and hosted (in SaaS mode) on Heroku.
- Demo
- Introduction
- Components
- Kanban Board
- E2E Tests
- Continuous Delivery
- Infrastructure
- Running Locally
- Developing new Judge Agent
- Notes
As JAlgoArena DEMO is hosted on free heroku account - they are goes every 5 minute sleep. If you want to successfully check below demo - firstly make sure you can open all below links to wake up all services
- jalgoarena-eureka - REQUIRED
- jalgoarena-judge - REQUIRED
- jalgoarena-api - REQUIRED
- jalgoarena-auth - REQUIRED
- jalgoarena-problems - REQUIRED
- jalgoarena-submissions - REQUIRED
- jalgoarena-judge-agent-1 - OPTIONAL
- jalgoarena-judge-agent-2 - OPTIONAL
- jalgoarena-judge-agent-3 - OPTIONAL
- jalgoarena-judge-agent-4 - OPTIONAL
Demo: https://jalgoarena-ui.herokuapp.com/
- JAlgoArena allows user to see existing problems, create account and using it submit solutions for existing problems, in one of two languages: Kotlin and Java. Every solution is limited by time and memory consumption and needs to pass all defined test cases. Problems itself are divided into three difficulty levels for each ones receiving different set of points. Additionally Kotlin language is promoted, giving you 150% of usual points in Java with same time.
- JAlgoArena conduts many parts, coming from Web UI, going through API service, which finally reaches direct parts of JAlgoArena: Judge Engine for Kotlin and Java, Authentication & Authorization Service keeping info about Users, Problems Service holding definition and meta-data about avialable problems and finally Submissions Service, where submissions are stored and ranking is calculated. Finally - all of that behind of scene is orchestrated by Eureka (discovery service) - which allows on loosely coupling between services and easy way to scale them
- JAlgoArena UI
- JAlgoArena Judge
- JAlgoArena Problems
- JAlgoArena Submissions (and Ranking)
- JAlgoArena Auth Server
- JAlgoArena Eureka Server
- JAlgoArena API Gateway
JAlgoArena kanban board showing planned features and their development progress.
State | Priority | Description |
---|---|---|
Ideas | Unset | Not yet decided if they will be done |
Backlog | Low | To be done |
TODO | High | Will be done for the next releases |
In Progress | High | Features in progress |
Done | High | Features implemented and released |
- end to end tests written in spock
- it runs against deployed applications (Heroku)
- it covers 2 cases, 1st for Java and 2nd for Kotlin
- initially, developer push his changes to GitHub
- in next stage, GitHub notifies Travis CI about changes
- Travis CI runs whole continuous integration flow, running compilation, tests and generating reports
- coverage report is sent to Codecov
- application is deployed into Heroku machine
- Heroku (PaaS)
- Xodus (embedded highly scalable database) - http://jetbrains.github.io/xodus/
- TravisCI - https://travis-ci.org/spolnik/JAlgoArena
To see detailed instructions on how to run particular components - go to below pages and look for running locally section. Below order is important if you want UI to be fully functional just after starting. Although - you can start it in any order - having some parts of functionallity not working till all parts will be started.
- Eureka Server
- API Gateway
- Auth Server
- Problems Service
- Judge Agent
- Submissions (and Ranking) Service
- UI Server
- If you would like to develop new judge agent supporting new programming language, or using different approach for judgement - please follow instructions in here: how to develop new judge agent